外部中断0实现8个LED的轮流亮灭
时间: 2023-06-07 13:10:57 浏览: 216
炫彩流水灯程序 用P1 口作为控制端口,使8个LED 轮流亮。从0-7,0—7,从两端开始,中间开始,全闪烁,四个四个,全灭,全亮。
5星 · 资源好评率100%
外部中断0可以配置为电平触发或者边沿触发,通过配置外部中断0的触发方式,可以在外部触发事件的时候让CPU中断当前的程序流程,转而去执行外部中断服务程序。在外部中断服务程序中,可以对8个LED灯的亮灭状态进行操作,实现轮流亮灭的效果。
具体实现方法:
1. 配置外部中断0的触发方式为边沿触发,当外部输入引脚(IRQ0)上的信号发生上升沿或下降沿时触发中断。
2. 在中断服务程序中,对8个LED引脚进行控制。可以使用一个计数器变量维护当前轮到哪个LED亮灭,每次中断服务程序被触发时,让计数器变量加1,然后根据计数器变量的值,判断哪个LED应该亮灭。
3. 让中断服务程序执行一段时间后,再返回主程序执行。在主程序中,不需要进行任何操作,只需要让CPU等待外部中断事件即可。
代码示例:
```C++
const int LED_PIN[] = {2, 3, 4, 5, 6, 7, 8, 9};
volatile int led_index = 0;
void setup() {
for (int i = 0; i < 8; i++) {
pinMode(LED_PIN[i], OUTPUT);
}
attachInterrupt(digitalPinToInterrupt(2), interrupt_handler, RISING); // 配置外部中断0
}
void loop() {
// do nothing
}
void interrupt_handler() {
digitalWrite(LED_PIN[led_index], LOW); // 熄灭当前LED
led_index = (led_index + 1) % 8; // 计数器加1
digitalWrite(LED_PIN[led_index], HIGH); // 点亮下一个LED
}
```
阅读全文