51单片机一个按键让灯按顺序跑,一个按键让灯两头开花
时间: 2024-11-09 18:17:58 浏览: 15
4、51单片机8按键流水灯程序
51单片机通过按键控制灯光序列变化,可以分为两个部分来描述:
1. **灯按顺序亮起**:这通常是通过计数器配合按键实现的。例如,你可以设置一个变量作为计数器,每当按下第一个按键(设为KEY1)时,计数器加1,然后依次点亮连接到单片机端口的LED灯。当计数器溢出回到0时,就从第一盏灯开始再亮起。代码大致如下:
```c
#include <reg52.h>
unsigned char ledIndex = 0; // LED索引,初始为0
void Key1_ISR() interrupt 1 {
ledIndex++;
if (ledIndex >= NUM_LEDS) { // 数量为NUM_LEDS
ledIndex = 0;
}
P1 = ledIndex; // 更新LED状态
}
// 初始化并设置LED和按键
void setup() {
// ...
// 初始化计数器和按键中断
}
void main() {
// ...
// 开始无限循环
}
```
其中`Key1_ISR`是按键KEY1的中断服务函数,LED状态由`ledIndex`决定,按顺序轮流点亮。
2. **灯两端同时亮起**:另一个按键(设为KEY2)负责控制两头同时亮起的效果。当按下KEY2时,可以关闭当前所有亮着的灯,然后重新从头开始点亮。例如:
```c
void Key2_ISR() interrupt 1 {
P1 = 0xFF; // 关闭所有LED
ledIndex = 0;
}
void Key2_ISR() interrupt 1 {
if (ledIndex >= NUM_LEDS) {
ledIndex = 0;
} else {
P1 = ledIndex; // 仅点亮一个LED
}
}
```
现在,当KEY2被按下时,先清零所有LED,然后切换回第一个LED点亮模式。
阅读全文