c51按键控制流水灯亮灭代码
时间: 2023-09-24 16:09:01 浏览: 341
下面是基于C51单片机的按键控制流水灯亮灭的代码:
```
#include <reg52.h>
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;
sbit LED4 = P1^3;
sbit KEY1 = P3^1;
sbit KEY2 = P3^0;
void delay(unsigned int i)
{
while(i--);
}
void main()
{
unsigned char cnt = 0;
while(1)
{
if(!KEY1) // 检测 KEY1 是否按下
{
delay(1000); // 延时消抖
if(!KEY1) // 再次检测 KEY1 是否按下
{
cnt++;
if(cnt == 5) // 如果计数器超过 4,则清零
{
cnt = 0;
}
}
while(!KEY1); // 等待 KEY1 松开
}
if(!KEY2) // 检测 KEY2 是否按下
{
delay(1000); // 延时消抖
if(!KEY2) // 再次检测 KEY2 是否按下
{
cnt--;
if(cnt == 255) // 如果计数器小于 0,则设置为最大值
{
cnt = 4;
}
}
while(!KEY2); // 等待 KEY2 松开
}
switch(cnt) // 根据计数器的值控制流水灯的亮灭
{
case 0:
LED1 = 1;
LED2 = 0;
LED3 = 0;
LED4 = 0;
break;
case 1:
LED1 = 0;
LED2 = 1;
LED3 = 0;
LED4 = 0;
break;
case 2:
LED1 = 0;
LED2 = 0;
LED3 = 1;
LED4 = 0;
break;
case 3:
LED1 = 0;
LED2 = 0;
LED3 = 0;
LED4 = 1;
break;
case 4:
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
break;
default:
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
break;
}
}
}
```
上面的代码中,使用了 P1.0 ~ P1.3 控制四个 LED 的亮灭,使用 P3.0 和 P3.1 作为按键输入。在主循环中,不断检测 KEY1 和 KEY2 是否按下,如果按下了则根据计数器的值进行加减,并控制流水灯的亮灭。需要注意的是,为了避免按键的抖动造成计数器值不准确,需要在检测到按键按下后加入一段延时消抖的代码。
阅读全文