修改程序,当外部中断1响应后,让8个LED灯交替闪烁(第1、3、5、7个LED灯亮1s后,第2、4、6.8个LED灯亮1s,轮流闪烁)。
时间: 2023-12-15 20:05:26 浏览: 138
假设使用的是51单片机,可以使用中断1(INT1)的下降沿触发来响应外部中断。下面是修改后的代码:
```c
#include <reg51.h>
// 定义8个LED灯的IO口
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;
void main()
{
// 初始时所有LED灯都关闭
LED1 = LED2 = LED3 = LED4 = LED5 = LED6 = LED7 = LED8 = 0;
// 设置中断1,下降沿触发
IT1 = 1;
EX1 = 1;
EA = 1;
while(1)
{
// do nothing
}
}
// 中断1的中断服务程序
void INT1_ISR() interrupt 2
{
static unsigned char led_state = 0; // 记录当前LED灯的状态,0表示第1、3、5、7个LED灯亮,1表示第2、4、6、8个LED灯亮
if(led_state == 0)
{
LED1 = LED3 = LED5 = LED7 = 1; // 第1、3、5、7个LED灯亮
LED2 = LED4 = LED6 = LED8 = 0; // 第2、4、6、8个LED灯灭
led_state = 1; // 更改状态
}
else
{
LED1 = LED3 = LED5 = LED7 = 0; // 第1、3、5、7个LED灯灭
LED2 = LED4 = LED6 = LED8 = 1; // 第2、4、6、8个LED灯亮
led_state = 0; // 更改状态
}
}
```
注意,这段代码需要使用中断1的下降沿触发,因此需要连接外部电路来触发中断。可以在INT1引脚连接一个按键,当按下按键时就会触发中断。
阅读全文