流水灯,定时器T0,延时5ms,从L1到L8 ,间隔2S,循环重复
时间: 2023-06-18 20:02:23 浏览: 83
下面是基于8051单片机的流水灯程序,使用定时器T0和延时函数实现LED流水灯效果,每个LED灯从L1到L8依次点亮,每次间隔2秒,循环重复。
```c
#include <reg52.h> // 包含reg52.h头文件,定义了STC单片机的寄存器
#define LED P0 // 定义LED端口为P0口
sbit L1 = P0^0; // 定义L1的端口
sbit L2 = P0^1; // 定义L2的端口
sbit L3 = P0^2; // 定义L3的端口
sbit L4 = P0^3; // 定义L4的端口
sbit L5 = P0^4; // 定义L5的端口
sbit L6 = P0^5; // 定义L6的端口
sbit L7 = P0^6; // 定义L7的端口
sbit L8 = P0^7; // 定义L8的端口
void delay(unsigned int ms) // 自定义延时函数
{
unsigned int i, j;
for (i = ms; i > 0; i--)
for (j = 110; j > 0; j--);
}
void main()
{
while (1) // 无限循环
{
L1 = 0; // 点亮L1
delay(5); // 延时5ms
L2 = 0; // 点亮L2
delay(5); // 延时5ms
L3 = 0; // 点亮L3
delay(5); // 延时5ms
L4 = 0; // 点亮L4
delay(5); // 延时5ms
L5 = 0; // 点亮L5
delay(5); // 延时5ms
L6 = 0; // 点亮L6
delay(5); // 延时5ms
L7 = 0; // 点亮L7
delay(5); // 延时5ms
L8 = 0; // 点亮L8
delay(5); // 延时5ms
LED = 0xff; // 关闭所有LED灯
delay(2000); // 延时2秒
L1 = 1; // 熄灭L1
L2 = 1; // 熄灭L2
L3 = 1; // 熄灭L3
L4 = 1; // 熄灭L4
L5 = 1; // 熄灭L5
L6 = 1; // 熄灭L6
L7 = 1; // 熄灭L7
L8 = 1; // 熄灭L8
LED = 0xff; // 关闭所有LED灯
delay(2000); // 延时2秒,等待下一次循环
}
}
```
需要注意的是,此程序中使用了一个延时函数`delay()`,该函数的实现方式可能因芯片型号和时钟频率不同而有所差异。在实际应用中,可以根据具体情况进行调整。