INO 发表于 2022-7-8 16:52:52

Arduino UNO 一个按键实现控制一个LED的亮灭翻转 (定时器中断消抖,带看门狗喂狗)


#include <MsTimer2.h>
#include <avr/wdt.h>
#define LED 13    //13号引脚 高电平点亮
#define KEY 8    //按键 8号引脚 低电平按下
#define KEY_MS 25   //按键消抖时间 25毫秒
void setup() {
pinMode(LED, OUTPUT);   //LED输出引脚
pinMode(KEY,INPUT_PULLUP);    //按键 使能上拉电阻
MsTimer2::set(1,ms1);   //1ms定时器
MsTimer2::start();    //开定时器中断
wdt_enable(WDTO_2S); //开看门狗 2秒溢出

}

bool key;       //按键 1按下 0松开
bool okey;      //上次的按键状态

unsigned char key_ms=0;    //按键按下时间 按住计数 最大255 松开清0

void loop() {
delay(1000);
wdt_reset(); //看门狗喂狗
}

void ms1(){   //1ms定时器中断
if(digitalRead(KEY)){   //按键松开
      key_ms = 0;
    } else {   //按键按下
      if(key_ms != 255){   
      key_ms++;
      }
    }
   key = (key_ms >= KEY_MS);
   if(!okey && key){
      digitalWrite(LED,!digitalRead(LED));
   }
   okey = key;
}
页: [1]
查看完整版本: Arduino UNO 一个按键实现控制一个LED的亮灭翻转 (定时器中断消抖,带看门狗喂狗)