硬件中有一个很重要的思维就是以微秒级的时间尺度去考虑问题:
比如控制LED灯的渐明渐暗,其中就用到了PWM(脉宽调制技术),是一种通过在一个周期时间内调节高低电平比例方法,特别是在电机控制、逆变器设计、电源管理等方面有着重要的应用。
那上述思维跟按键又有什么关系呢?什么又是按键去抖动处理?这个问题乍一听是不是有点奇奇怪怪的感觉,按键也能抖动?你以为是cosplay啊。这要看我们在哪个时间尺度上看问题了,以人类的秒级尺度看,我们没有抖动;可是以机械的微秒级尺度看,按键在两个金属片要接触还没接触、没接触却又接触上的临界状态时抖动得厉害。就好像你在地面上蹦蹦跳跳感觉不到大地在振动,可是地上的蚂蚁可不这样想。其实当我们按键的时候是不是能听到一声“滴答”的声音,那么声音又是怎么产生的呢?啊对啦——声音是通过震动产生的,这种震动,我们称之为按键的抖动。
这种抖动会损伤电路,在单片机中这种抖动会影响其对高低电平的判断,因为单片机在按键抖动时读取I/O接口的电平会发现在抖动的时候,谁也不知道会读出什么,可能是高电平也可能是低电平。
那如何避免按键的抖动呢?一般有两种方法:
1、硬件去抖动:让按键与一个滤波电路连接,然后再把滤除抖动波后的平滑电平曲线输入给单片机的i/o接口。
2、软件去抖动:这里用到了一个很聪明的方法,叫延迟读取,首先计算出大部分按键从抖动到稳定需要多长的时间,一般是10~20ms,然后写一段程序,当单片机发现有键按下时开始等待,等待10~20ms之后再读取按键的状态,这时读到的就是接触稳定时的按键状态了。一般采用此方法。
最后想说,按键的抖动并不是一个单纯不好的事,这里引用杜洋老师的一句话:按键抖动的特性和基本原理才是至高无上的,在此基础上,任何人都可以探索、发现、创新。