写一个用51单片机做的流水灯
时间: 2023-05-23 19:06:53 浏览: 80
A:
以下是使用51单片机实现的流水灯程序:
```c
#include <reg51.h>
#define LED_PORT P2 // 接收LED的端口
void delay(unsigned int t) // 延迟函数
{
unsigned int i, j;
for (i = t; i > 0; i--)
{
for (j = 110; j > 0; j--)
{
;
}
}
}
int main()
{
unsigned char cnt = 0, i = 0;
LED_PORT = 0x00; // 初始化接收端口
while (1)
{
cnt++; // 计数器自增
if (cnt > 8) // 如果计数器大于了8,则重置计数器
{
cnt = 1;
}
for (i = 0; i < 8; i++) // 遍历8个LED
{
if (i == cnt - 1) // 如果是第cnt个LED,点亮
{
LED_PORT &= ~(1 << i); // 使用移位操作,将i位清零,点亮LED
}
else // 否则灭
{
LED_PORT |= (1 << i); // 使用移位操作,将i位置1,熄灭LED
}
}
delay(300); // 控制灯的变换速度,延时300毫秒
}
return 0;
}
```
程序中,首先通过定义了一个延迟函数,可以用来控制LED灯的变换速度。然后在主函数中,使用了一个计数器cnt,用来控制当前亮的LED灯。每次循环,都会遍历8个LED,同时根据计数器的值,决定当前亮的LED灯。
延时的时间设定为300毫秒,可以通过调整这个数值来改变流水灯的速度。程序的最后一行始终返回0,使程序持续循环运行。