首页 理论教育 按键检测原理详解

按键检测原理详解

时间:2023-06-28 理论教育 版权反馈
【摘要】:图3-2 按键理想动作过程事实上,图3-2所示的按键动作过程是理想化的,真实的机械按键,在按下和松开时,都会存在一定程度上的“抖动”,如图3-3所示。因此,必须在按键稳定状态下进行检测。按键检测必须避开按键抖动期间,当按键处于稳定状态下,才能依据检测到的按键口状态判断按键是否被按下。请读者观察图3-3,这个抖动过程实际上持续时间并不长,它属于过渡过程。

按键检测原理详解

根据前文描述,可知按键没有按下时,对应的I/O口为高电平;按键被按下时,对应的I/O口为低电平,如图3-2所示。

978-7-111-55685-5-Chapter03-2.jpg

图3-2 按键理想动作过程

事实上,图3-2所示的按键动作过程是理想化的,真实的机械按键,在按下和松开时,都会存在一定程度上的“抖动”,如图3-3所示。在抖动期间,会出现多个高、低电平变换,这期间的高、低电平不能用于判断按键是否按下或松开。因此,必须在按键稳定状态下进行检测。这好比你去体检,不能一赶到医院就立即去做心电图,而必须稍作休息,等心跳处于平稳状态才进行检测,否则所做的心电图往往是不准确的。

978-7-111-55685-5-Chapter03-3.jpg

图3-3 真实按键工作过程

因此,当你检测到按键口为高电平,并不一定意味着按键松开;同样,当你检测到按键口为低电平,也并不一定意味着按键按下。按键检测必须避开按键抖动期间,当按键处于稳定状态下,才能依据检测到的按键口状态判断按键是否被按下。

当按键按下或按键松开时,会出现抖动。请读者观察图3-3,这个抖动过程实际上持续时间并不长,它属于过渡过程。一般抖动若干毫秒后,就会进入稳定状态。因此,可以得出图3-4所示按键检测的基本流程。

978-7-111-55685-5-Chapter03-4.jpg(www.xing528.com)

图3-4 按键检测流程

说明:

➢“有键按下吗?”——这是一个判断,结果可能为真(Y,按键对应I/O口为低),也可能为假(N,按键对应I/O口为高)。在C语言中,可以使用if语句来实现判断功能。

➢“延时10ms”——这个10ms是一个常用的数值,而非固定值、精确值。用户延时20ms、30ms都可以。延时的目的是避开抖动过程。

➢“再次检测有键按下吗?”——同样是一个判断,经过延时后的按键已处于稳定状态,这时可以“一锤定音”,若还为低电平则表明按键是真的按下了,若恢复为高电平则表明是抖动造成的。同理,仍需使用if语句实现判断功能。

➢“有键释放吗?”——这是等待按键松开,避免一次按下多次响应的情形。这其实是个原地循环,按键若按下,则“原地踏步”,程序不向下执行。我们可以使用while语句实现按键是否释放。

➢“进行按键处理”——这个处理可以放在等待按键松开之前,也可以放在按键松开之后。若是放在按键松开之后,当按键长时间按下时,将会导致按键处理“严重滞后”。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈