51单片机应用外部中断实现按键控制LED流水灯代码
时间: 2023-09-28 11:05:44 浏览: 831
C51单片机定时中断控制按键点亮流水灯实验课程程序设计
以下是一个在51单片机上实现外部中断实现按键控制LED流水灯的示例代码:
```c
#include <reg51.h>
sbit LED1 = P1 ^ 0;
sbit LED2 = P1 ^ 1;
sbit LED3 = P1 ^ 2;
sbit LED4 = P1 ^ 3;
sbit KEY = P3 ^ 2;
void delayms(uint ms) {
uint i, j;
for (i = ms; i > 0; i--)
for (j = 114; j > 0; j--);
}
void init_interrupt() {
IT0 = 1;
EX0 = 1;
EA = 1;
}
void main() {
uchar state = 0;
init_interrupt();
while (1) {
switch (state) {
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;
}
delayms(500);
}
}
void key_isr() interrupt 0 {
delayms(10); // 延时消抖
if (KEY == 0) {
while (KEY == 0); // 等待按键松开
state++;
if (state > 3) {
state = 0;
}
}
}
```
这个代码使用外部中断来检测按键的按下和松开,并通过切换状态来控制LED灯的流水效果。按键连接在P3.2口上,LED灯连接在P1口上。在主循环中,程序循环显示4个LED灯的流水效果,并在每个灯之间延迟500毫秒。外部中断的中断服务函数(ISR)通过切换状态来控制LED灯的流水效果。
阅读全文