// 引脚定义
#define KEY1_PIN PB4
#define KEY2_PIN PB5
#define KEY3_PIN PB6
#define KEY4_PIN PB7
#define ALARM_PIN PB15
// 按键消抖延时(毫秒)
#define KEY_DELAY 20
void setup() {
// 初始化按键引脚:上拉输入模式,低电平有效
pinMode(KEY1_PIN, INPUT_PULLUP);
pinMode(KEY2_PIN, INPUT_PULLUP);
pinMode(KEY3_PIN, INPUT_PULLUP);
pinMode(KEY4_PIN, INPUT_PULLUP);
// 初始化声光报警引脚:输出模式,默认关闭状态
pinMode(ALARM_PIN, OUTPUT);
digitalWrite(ALARM_PIN, LOW);
// 串口初始化(调试用,可选)
Serial1.begin(9600);
Serial1.println("系统初始化完成,等待按键触发...");
}
void loop() {
// 检测任意按键按下,触发声光报警
if(keyScan()){
Serial1.println("按键触发,声光报警器开启");
digitalWrite(ALARM_PIN, HIGH); // 开启LED+蜂鸣器
delay(1000); // 报警持续1秒
digitalWrite(ALARM_PIN, LOW); // 关闭声光报警
Serial1.println("声光报警器关闭");
}
delay(20); // 主循环轻微延时,降低CPU占用
}
/**
* @brief 按键扫描函数(带消抖)
* @retval 1:有按键按下 0:无按键按下
*/
bool keyScan(void)
{
// 检测任意按键低电平(按下)
if(digitalRead(KEY1_PIN) == LOW || digitalRead(KEY2_PIN) == LOW ||
digitalRead(KEY3_PIN) == LOW || digitalRead(KEY4_PIN) == LOW)
{
delay(KEY_DELAY); // 消抖延时
// 再次确认按键按下状态
if(digitalRead(KEY1_PIN) == LOW || digitalRead(KEY2_PIN) == LOW ||
digitalRead(KEY3_PIN) == LOW || digitalRead(KEY4_PIN) == LOW)
{
// 等待按键松开,避免长按重复触发
while(digitalRead(KEY1_PIN) == LOW || digitalRead(KEY2_PIN) == LOW ||
digitalRead(KEY3_PIN) == LOW || digitalRead(KEY4_PIN) == LOW);
return 1;
}
}
return 0;
}Loading
stm32-bluepill
stm32-bluepill