通过中断方式工作的按键和LED亮灯控制的程序
时间: 2024-05-11 09:14:01 浏览: 38
以下是一个通过中断方式工作的按键和LED亮灯控制的示例程序:
```c
#include <avr/io.h>
#include <avr/interrupt.h>
volatile uint8_t led_on = 0;
ISR(INT0_vect) // 中断服务程序
{
led_on = !led_on; // 切换LED状态
}
int main(void)
{
DDRD = (1 << PD2); // 将PD2设置为输出模式,控制LED
PORTD = (1 << PD2); // 初始LED关闭
DDRD &= ~(1 << PD3); // 将PD3设置为输入模式,接收按键
PORTD |= (1 << PD3); // 内部上拉电阻使PD3默认为高电平
EICRA = (1 << ISC01); // 设置INT0为下降沿触发
EIMSK = (1 << INT0); // 开启INT0中断
sei(); // 开启全局中断
while (1)
{
if (led_on)
{
PORTD &= ~(1 << PD2); // 打开LED
}
else
{
PORTD |= (1 << PD2); // 关闭LED
}
}
}
```
这个程序将PD2设置为输出模式,控制LED的亮灭状态;将PD3设置为输入模式,接收按键的输入。当按键按下时,会触发INT0中断,中断服务程序会切换LED的状态。程序中使用了一个全局变量`led_on`来记录LED的状态。在主循环中,根据`led_on`的值来打开或关闭LED。同时,开启全局中断,以便能够响应INT0中断。