用51单片机写一段程序,利用八个发光二极管制作一个从上往下的流水灯,并用按键控制,点一下开始开始运行流水灯程序,再点一下,流水灯停止
时间: 2023-12-09 14:06:51 浏览: 103
好的,我可以为您提供一份基于Keil C51的程序代码,如下所示:
```c
#include <reg52.h>
sbit LED1 = P2^0; // 定义八个发光二极管引脚
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;
sbit LED5 = P2^4;
sbit LED6 = P2^5;
sbit LED7 = P2^6;
sbit LED8 = P2^7;
sbit KEY = P3^2; // 定义按键引脚
void Delay(unsigned int i) // 延时函数
{
while(i--);
}
void main()
{
unsigned char flag = 0; // 定义标志位
unsigned char i = 0;
while(1)
{
if(!KEY) // 当按键按下时,改变标志位
{
Delay(1000); // 延时去抖
if(!KEY)
{
flag = ~flag;
while(!KEY); // 等待按键松开
}
}
if(flag) // 标志位为1时,流水灯循环闪烁
{
for(i=0; i<8; i++)
{
switch(i)
{
case 0: LED1 = 1; break;
case 1: LED2 = 1; break;
case 2: LED3 = 1; break;
case 3: LED4 = 1; break;
case 4: LED5 = 1; break;
case 5: LED6 = 1; break;
case 6: LED7 = 1; break;
case 7: LED8 = 1; break;
}
Delay(10000); // 稍微延时
LED1 = LED2 = LED3 = LED4 = LED5 = LED6 = LED7 = LED8 = 0; // 熄灭所有发光二极管
}
}
else // 标志位为0时,所有发光二极管熄灭
{
LED1 = LED2 = LED3 = LED4 = LED5 = LED6 = LED7 = LED8 = 0;
}
}
}
```
该程序实现了按键控制八个发光二极管的流水灯循环闪烁,程序中使用了一个标志位来控制流水灯的开关,按下按键时,标志位取反,再次按下时,标志位再次取反,从而实现了流水灯的开关。
阅读全文