一个按键控制两种动作的嵌入式程序
时间: 2024-05-10 22:20:35 浏览: 21
以下是一个按键控制两种动作的嵌入式程序的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <stdint.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define LED_PIN PB0
#define BUTTON_PIN PB1
volatile bool button_pressed = false;
ISR(INT0_vect)
{
button_pressed = true;
}
void setup()
{
DDRB |= (1 << LED_PIN);
PORTB |= (1 << BUTTON_PIN);
EICRA |= (1 << ISC01); // trigger on falling edge
EIMSK |= (1 << INT0); // enable external interrupt 0
sei();
}
void loop()
{
if (button_pressed)
{
button_pressed = false;
if (PINB & (1 << BUTTON_PIN))
{
PORTB &= ~(1 << LED_PIN); // turn off LED
}
else
{
PORTB |= (1 << LED_PIN); // turn on LED
}
_delay_ms(50); // debounce delay
}
}
int main()
{
setup();
while (true)
{
loop();
}
return 0;
}
```
说明:
- 该程序使用AVR单片机来控制一个LED灯的开关,可以通过按下一个按键来切换LED灯的状态。
- 当按键按下时,程序会检测按键状态,如果按键被松开,则关闭LED灯;如果按键仍然被按下,则打开LED灯。
- 在程序中使用了外部中断0来检测按键状态的变化,并使用了软件去抖动来避免误触发。
- 程序使用了avr/io.h和avr/interrupt.h库文件,需要在编译时链接对应的库文件。