前言:
(开发板上四个管脚的独立按键真实存在的现象)由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。这是一个很重要的时间参数,在很多场合都要用到。
消抖目的:按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。键抖动会引起一次按键被误读多次。为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。
【目标】
所以怎样才能保证CPU对键的一次闭合仅仅做一次处理,因为管脚的输入(四组并行双向IO口,可以输入可以输出)只有高低电平之分,所以只要保证其相应管脚的高低电平可以保持实现理性波形时的高低电平情况就不会出现多次一次按键被多次误读;
【补充】
一般来讲,对于5V电源的单片机来说,低电平在1.3V以下,高电平在3.7V以上,数字信号尽量不要使用1.3—3.7V这个区间,这有可能会造成单片机无法识别或识别错误。
【原理分析】
①上图所示,最开始状态时按键未按下时,电容肯定先是已经被充满电然后开路,又因为电容C1左极板与接地,所以左右极板电位0v/5v,又因为没有按下按键,所以电路处于开路,单片机管脚P02处于高电平5v(电路开路与VCC相连/也与电容右极板相连);
②当按键按下时,有一段时间的机械抖动,此时按键SW1右边节点的电位是5v(也是单片机管脚P02的电位为5v),又因为按键与电容形成回路,所以电容会进行放电(电容是一个非线性元件,放电需要时间),但是机械抖动的时间和电容放电的时间不是完全一致,所以当电容放电放一部时间(假设可能放到4.5v时)机械抖动就已经结束,那么管脚的电平却是始终都是表现为高电平,所以CPU识别还是高电平未变,当按键彻底按下稳定接触后,很快就会将放电完毕将电容短路(左右极板的电位变成0v/0v),然后按键SW1右边节点电位接地(也就是管脚P02因为接地电势为0v),所以此时单片机管脚P02为低电平,这也是教学视频说因为放电延时;
③当按键要松开时,按键有个松开时的抖动时间,只有你有松开的可能,按键这条支路就会开路而电容开始充电,电容就开始充电,但是充电需要时间在抖动的时间内电容右极板不会瞬间达到5v的电位,也就是按键SW1右边的节点电位不会一下子达到高电平(可能在这个抖动时间内电容才充电充了0.5v),所以该节点依然保持低电平(也就是CPU识别的管脚P02为低电平),当按键彻底松开稳定后,按键那条支路断开电容也充满电(两条支路都是开路),按键SW1右边节点和管脚的电位就是高电平(与直流电源VCC相连)这也是教学视频说因为充电延时;
【结论】
①具体分析也要参照实际电容充放电时间和加速度与抖动时间的比较;
②我上面的分析符合实际波形的高低高的波形情况;