什么是按键消抖
按键的概念我们都知道,像我们平常接触到的比如键盘,比如遥控器,比如一些智能锁上面的密码按键我相信应该没有人会没接触过吧,至少有接触过一种,如果是做过嵌入式开发的或多或少都会接触按键,大学相关专业的学生接触的也会比较多,那么在我们开发按键的时候基本上都会遇上的问题,那就是按键抖动,按下一次但是会产生多次重复结果,也就是按下一次误读取了很多次的原因,当然解决方法也有,我们往下看 ^ 。^。
如何消抖
其实说起来也简单,可以用我们的延时来消抖,大概延时个10ms就可以,并且去判断一下按键的一个状态就可以,就比如按键按下的时候为0,抬起的时候为1,就去判断这个状态就行,然后再加上一个10ms左右的延时就可以了,这样就可以有效的防止读取多次的结果,简称为软件防抖
当然也可以用定时器来做,也就是中断触发,分为上升沿和下降沿还有一个双边沿触发,上升沿就是按键按下是没反应的松开就有反应了,下降沿就是按下一瞬间就有反应,双边沿的话字面意思也好理解我就不多说了,而这个中断消抖就是在中断服务子程序里面做一个定时和判断按键按下的判断就可以啦,然后记住要清零和失能定时器哟。
延时消抖的代码
if(value_row == 0)
{
delay(16800); //别看这里这么大数,其实就是10ms左右哟
//下面这里就是判断我按键是否抬起的动作啦
while(velue_1 == 0)
{
numberKeypadInit();
sonata_gpio_input_get(&g_sonata_gpio_key3,&velue_1);
if(velue_1 == 1)
break;
}
}
上面代码展示要注意啦,大概率直接CV来用是不太可能啦,毕竟不是同一个芯片函数是不通用的,但是只要懂其原理,就算是100种芯片其方式还是不变的,如果想仔细研究这个的话可以去看看
链接: 【单片机】按键消抖及原理(硬件和软件方法详解)这位大佬的文章,相当仔细了,讲的明明白白。
分享结束,又是愉快的一天