首页 理论教育 单片机实用教程按键防抖解决方案

单片机实用教程按键防抖解决方案

时间:2023-11-16 理论教育 版权反馈
【摘要】:图5-12 开关输入信号1.硬件防抖硬件防抖的方法很多,图5-13是几种常见的硬件防抖电路。图5-13a是RS触发器防抖电路。图5-13 常见的硬件防抖电路a)RS触发器防抖电路 b)RC防抖电路1 c)RC防抖电路22.软件防抖虽然用硬件可以消除抖动,但会使输入电路变复杂且成本提高,对于擅长编程的人,可以通过软件来消除抖动。下面以图5-13所示的开关输入电路为例编写一段程序,用于消除开关S按下时产生的抖动。

单片机实用教程按键防抖解决方案

第3章探讨过按键的简单应用,当时我们假设在理想状态下,当按下开关S时,给单片机输入一个“0”(低电平);当S断开时,则给单片机输入一个“1”(高电平)。

实际上,当按下开关S时,由于手的抖动,S会断开、闭合几次,然后稳定闭合,所以按下开关时,给单片机输入的低电平不稳定,而是高、低电平变化几次(持续10~20ms),再保持为低电平,同样在S弹起时也有这种情况。开关给单片机输入的信号如图5-12所示。开关抖动给单片机输入不正常的信号后,可能会使单片机产生误动作,应设法消除开关的抖动。开关抖动的消除方法通常有两种:硬件防抖和软件防抖。

978-7-111-43252-4-Chapter05-48.jpg

图5-12 开关输入信号

1.硬件防抖

硬件防抖的方法很多,图5-13是几种常见的硬件防抖电路。

图5-13a是RS触发器防抖电路。当开关S与上端接触时,S端(置“1”端)为“0”,触发器被置“1”,输出端Q=1;当开关被拨向下端时,R端(置“0”端)为“0”,触发器被置“0”,Q=0,这时即使手发生抖动,开关又脱离下端(由于上端距离下端较远,开关抖动也不会接触到上端),使R端为“1”,Q端仍保持为“0”不变(因为当S、R均为“0”时,RS触发器状态保持不变),从而消除了抖动。

用RS触发器可以消除开关抖动,但这种电路较复杂,成本也高,为此可采用图5-13b、c所示的RC防抖电路。

在图5-13b中,当开关S断开时,+5V电压经电阻R对电容C充电,在C上充得+5V电压,当按下开关时,S闭合,由于开关电阻小,电容C通过开关迅速将两端电荷放掉,两端电压迅速降低(接近0V),单片机输入为低电平,若手发生抖动导致开关短时断开,+5V电压经R对C充电,但由于R阻值大,短时间电容C充电很少,电容C两端电压基本不变,单片机输入仍为低电平,从而消除了开关抖动。

图5-13c所示防抖电路的工作原理读者可自己分析。

如果采用图5-13b、c所示的防抖电路,选择RC的值比较关键,RC元件的值可以用下式计算:

t<0.357·RC(www.xing528.com)

因为抖动时间一般为10~20ms,如果R=10kΩ,那么C可在2.8~5.6μF选择,通常选择3.3μF。

978-7-111-43252-4-Chapter05-49.jpg

图5-13 常见的硬件防抖电路

a)RS触发器防抖电路 b)RC防抖电路1 c)RC防抖电路2

2.软件防抖

虽然用硬件可以消除抖动,但会使输入电路变复杂且成本提高,对于擅长编程的人,可以通过软件来消除抖动。软件防抖的思想是在单片机第一次检测到开关按下时,马上执行延时子程序(需10~20ms),在执行延时子程序时,即使开关发生抖动,单片机也不采取措施,而是待延时子程序执行完后,再检测开关的状态,由于这时开关状态已稳定,所以检测到的是正确的开关输入信号。

下面以图5-13所示的开关输入电路为例编写一段程序,用于消除开关S按下时产生的抖动。程序如下:

978-7-111-43252-4-Chapter05-50.jpg

978-7-111-43252-4-Chapter05-51.jpg

此种方法中使用延时的方法实现了软件消抖,但是此种延时方法在工程上几乎不使用,因为它会浪费大量的资源。工程上一般使用定时器来解决延时的问题。

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

我要反馈