一:硬件电路
P2 口: P2.0~ P2.7 是这些 I0 口
LED 阳极接 电源 , P20 口 为低电平 可以让 LED灯 亮
二:软件实现部分 两种
① 通过循环 来展示从左 到右
#include "reg52.h"
#define LED_PORT P2 // 定义单片机的P2端口 为 LED_PORT
typedef 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_PORT
typedef 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);
// 延时函数
}
}
}