通常按键所用的开关都是机械弹性开关,当机械点断开或闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上就稳定地接通,在断开时也不会一下子彻底断开,而是在闭合和断开的瞬间伴随一连串抖动,如图4-6所示。
图4-6 按键抖动状态图
人工操作一次按键,正常速度大约会按下并保持50~200 ms然后释放,或者刻意更慢些。抖动时间是由按键的机械特性决定的,一般会在10 ms以内,为了确保程序对按键的一次闭合或者一次断开只响应一次,必须进行按键的消抖处理。
一次人工按键操作应包括按下和放开两个过程。程序上,我们可以把每次检测到的按键状态都保存下来,当新一次按键检测进来的时候,与前一次的状态做比较,如果发现这两次按键状态不一致,就说明按键产生动作了。当上一次的状态是未按下而现在是按下,此时按键的动作就是“按下”;当上一次的状态是按下而现在是未按下,此时按键的动作就是“弹起”。显然,每次按键动作都会包含一次“按下”和一次“弹起”,可以任选其一来执行程序,或者两个都用以执行不同的程序也可以(见表4-2)。(www.xing528.com)
表4-2 LED开关控制程序
本程序选择直接使用LaunchPad板上的PUSH2(P1.3)作为按键,绿色LED(P1.6)作为LED灯,注意要保证插上该LED灯上面的跳线帽。本示例程序选择“按下”动作控制LED的开关,当按键状态发生变化后,如果这个状态维持时间比防反跳延迟时间还长,说明是一个按键动作(“按下”或“弹起”),如果是“按下”动作,改变LED的开关状态。程序使用到的millis()函数返回MCU从上电(或复位)开始的运行时间,单位为ms。在以后的章节还会详细地介绍该函数。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。