keil 外部中断1上接一个按钮开关,当开关闭合控制P0口所连8 LED灯中L1、L3、L5、L7和L2、L4、L6、L8交替闪烁5次。M 中断退出后8个LED灯流水点亮。c语言实现
时间: 2023-06-05 09:08:50 浏览: 150
下面是实现代码:
```c
#include <reg51.h>
// 定义外部中断1的处理函数
void ext1_isr() interrupt 2 {
static unsigned int cnt = 0;
// 判断是上升沿触发还是下降沿触发
if (IE0) {
IE0 = 0; // 清除中断标志位
// 触发次数加1
cnt++;
// 每次触发交替闪烁5次
if (cnt <= 5) {
P0 = 0x55; // 0101 0101,L1、L3、L5、L7点亮
delay_ms(500); // 延时500ms
P0 = 0xAA; // 1010 1010,L2、L4、L6、L8点亮
delay_ms(500); // 延时500ms
} else {
// 触发次数超过5次后,流水点亮8个LED灯
unsigned char i;
for (i = 0; i < 8; i++) {
P0 |= (1 << i); // 点亮当前位
delay_ms(200); // 延时200ms
}
cnt = 0; // 重置触发次数
}
}
}
void main() {
EA = 1; // 打开总中断使能
// 配置外部中断1
IT0 = 1; // 触发方式为下降沿触发
EX0 = 1; // 开启外部中断1使能
while (1) {
// 主循环中没有其他任务,可以省略
}
}
void delay_ms(unsigned int ms) {
unsigned int i, j;
for (i = 0; i < ms; i++) {
for (j = 0; j < 120; j++) {
// 空循环约1ms
}
}
}
```
阅读全文