在以前学习单片机的适合,研究过按键如何消抖。网上查到的一般都是选择delay软件延时进行消抖,或者外接电容等进行硬件消抖,后来也就没有深究了。
最近看到了一本书上面采用定时器消抖,主程序中10ms一次循环,检测IO口电平,并累加。可以避免delay模式出现的阻塞情况
void Key_Scan(void)
{
if(SW == LOW)
{
if(key_count < 400)
key_count++;
if( key_count == 400 ) //长按2s 不能写成 >= 否则每个循环都会出现一组长按
{
key_sos_long = 1;
// Flag_Speaker_long = 0;
key_count ++;
}
}
else
{
if(key_count > 15 && key_count < 400) //短按
{
key_sos_short = 1;
}
key_count = 0;
}
}