anywill 发表于 2016-10-16 17:01:55

ARM®mbed OS入门开发(三 D)GPIO 之 按键消抖

本帖最后由 anywill 于 2016-11-9 06:58 编辑

按键防抖是单片机按键应用经常需要处理的问题,之所以要防抖是因为我们在按键的过程中存在抖动,从而造成高低电平变化影响应用程序的效果,消抖是指消除按键接触时产生的干扰抖动杂脉冲波。硬件消抖是通过采用外加零件来消除干扰抖动杂脉冲波,通常采用电容滤波、单稳延时电路等等。软件消抖是通过采用软件程序的方法来达到消除干扰抖动杂脉冲波,最常见的是软件采用延时再次检测的方法来消抖。 补充:按键按下时的瞬间,它的两片触片不是“理想”地立即接触的,特别是按键开关用了一段时间后,触片有些氧化和老化,这一点,如果用示波器来观察,就能观察到按键接触时的脉冲变化中附带有许多抖动波。
另,无论采用硬件还是软件方法,消除抖动波只是它主要的功能,它还起到消除干扰的作用。
如下面的未消抖按钮中断代码:InterruptIn button(PC_13);DigitalOut led1(D13);void toggle() {led1=!led1;}int main() {    button.rise(&toggle);}该代码其实前面已经应用过,如果我们在这里多按几次,你就会发现偶尔工作不正常的情况,这是因为管脚输入有波动,为此,我们需要延迟判定用户按下的效果,这可以简单地通过Timer来实现,改进后的代码如下,实际测试后会发现效果好很多。InterruptIn button(PC_13);DigitalOut led1(D13);Timer debounce;//消抖定时器void toggle() {    if (debounce.read_ms()>10) //消抖延时10ms                         led1=!led1;    debounce.reset(); //重置定时器}int main() {    debounce.start();     button.rise(&toggle);}


anywill 发表于 2016-10-16 17:02:22

占楼备用

xyx365 发表于 2016-10-16 19:09:17

本帖最后由 xyx365 于 2016-10-16 19:12 编辑

不错的教程



anywill 发表于 2016-10-16 20:35:33

大概100us?

zengyi703-16313 发表于 2016-10-17 08:09:23

谢谢分享

高二毛 发表于 2016-10-17 11:30:35

很不错,感谢分享。

ynwscfsfi 发表于 2016-10-20 11:51:22

感谢分享

andypanfan 发表于 2016-10-23 00:14:30

感谢谢!!!!!:lol:lol:lol
页: [1]
查看完整版本: ARM®mbed OS入门开发(三 D)GPIO 之 按键消抖