本帖最后由 rengran 于 2023-11-21 16:23 编辑
知识点 1、 按键消抖 按键为什么要消除抖动? 单片机应用系统中的按键通常为机械弹性开关,由于机械触点的弹性作用,其在实际的闭合及断开瞬间,常常会产生如图7.1所示的一连串电压的抖动对按键处理的重要环节就是去抖动,即去除键按下和抬起瞬间的电压抖动问题。如果对抖动不做任何处理,则会引起程序的误操作,对整个系统产生较大的负面影响。 按键按下的实际电平效果图: 图7.1
如果A点的电压高于0.7V,则在键按下的过程中会触发单片机产生两次中断。在键释放的阶段,如果B点的电压高于0.7V,而C点电压低于0.7V,同样会触发单片生两次中断。按键抖动的时间长短与按键的机械特性、操作人员的按键动作和习惯有关,一般而言,认为抖动的时间大概为5~10ms。按键抖动会导致一次按键被误判为多次为了确保对按键动作的正确处理,必须去除按键抖动。 2、 如何进行消抖? 根据上图中所示的电压抖动电压波形,我们可以选择在电压闭合稳定后再确认按键的状态,所以和视频中的一样(见图7.2),我们可以先检测一下低电平,过上10ms后再检测一下,如果还是低电平,那么我们就可以确认按键确实按下了,而且是处在稳定的闭合状态,而不是抖动过程中或者是有其他的什么干扰存在。 图7.2
3、 利用如图所示的delay_ms()延时函数进行消抖有什么优缺点? 首先,程序简单易懂,便于理解; 其次,它也有一定的缺点,原因在于:在delay_ms中,系统是不能执行其他的程序,只能等到这个函数执行完再去执行其他的步骤。这样以来,就会占用CPU资源,影响系统的实时性。如果对系统的实时性没有太大的要求,这样写函数也不为过,是可行的。
|