一:硬件电路
P2 口: P2.0~ P2.7 是这些 I0 口
LED 阳极接 电源 , P20 口 为低电平 可以让 LED灯 亮
二:软件实现部分 两种
① 通过循环 来展示从左 到右
#include "reg52.h"#define LED_PORT P2 // 定义单片机的P2端口 为 LED_PORTtypedef unsigned int u16; // 定义 无符号 整形类型 别名叫 u16
typedef unsigned char u8; // 定义 无符号 字符类型 别名叫 u8 void delay_times(u16 times) // 1/定义一个延时函数 ;2;传一个延时的参数进去 3、 u16 是定义 时间类型
{while(times--); // while 循环自减 times 是传的时间
}void main()
{u8 i = 0; // 定义 一个 i i 是定义led 灯初始值的while(1){for(i = 0; i<8; i++) // 8个led 灯 循环8次 从第一个led 灯开始进入循环体{LED_PORT = ~(0x01<<i); // 0000 0001 D1灭的 取反 灯亮1111 1110 ;<<i 位移 每次循环移动一位 delay_times(50000); // 延时函数 } } }
② 通过移位 库函数 来进行移位 从左到右 ,从右到左
#include "reg52.h"
#include "intrins.h" // 包含 左移 右移的 头文件#define LED_PORT P2 // 定义单片机的P2端口 为 LED_PORTtypedef unsigned int u16; // 定义 无符号 整形类型 别名叫 u16
typedef unsigned char u8; // 定义 无符号 字符类型 别名叫 u8 void delay_times(u16 times) // 1/定义一个延时函数 ;2;传一个延时的参数进去 3、 u16 是定义 时间类型
{while(times--); // while 循环自减 times 是传的时间
}void main()
{u8 i = 0; // 定义 一个 i i 是定义led 灯初始值的LED_PORT = ~0x01; // D1 灯初始化,0x01 = 0000 0001 取反后 1111 1110 D1 灯亮delay_times(50000); // 延时函数 while(1){for(i = 0; i<7; i++) // 8个led 灯 循环8次 从第一个led 灯开始进入循环体{LED_PORT = _crol_(LED_PORT,1); // 右移(LED_PORT,1 间隔)delay_times(50000); // 延时函数 }for(i = 0; i<7; i++) // {LED_PORT = _cror_(LED_PORT,1); // 左移(LED_PORT,1 间隔)delay_times(50000); // 延时函数 } }
}