当前位置:首页 > 嵌入式 > 玩转嵌入式
[导读]独立式按键和矩阵式按键相对,是指一个按键占用一个GPIO口的情况,主要用在按键数比较少的场合,用作按键输入实现产品的人机交互。比如洗衣机的面板按键、电饭煲的按键等。

独立式按键和矩阵式按键相对,是指一个按键占用一个GPIO口的情况,主要用在按键数比较少的场合,用作按键输入实现产品的人机交互。比如洗衣机的面板按键、电饭煲的按键等。

按键一般都是通过机械式按键来实现的,根据是否自锁可以分为自锁按键和非自锁按键。自锁按键,导通和断开需要两次按键动作,第一次按下时处于导通/断开状态,松手后保持该状态,第二次按下后实现复位。而非自锁按键,松手后即复位,如果要状态保持,需要持续按压。机械式按键是通过簧片接触和断开实现开关动作的,所以在按下和弹起的时候都会出现抖动的情况。如果不处理抖动就会出现误动作。所以,机械式按键的消抖处理是必须的。如下图所示。

抖动发生在按下和弹起时,一般抖动持续5-10ms,程序在按键检测时,如果不进行滤波则会出现按键多次的误触发。那么消抖程序该如何设计呢?
在学习单片机初期,很多例程都告诉我们采用延时的方法去抖动,思路如下:当检测到按键动作时,先延时10ms,在进行一次按键检测,如果还是检测到按键动作,则再延时10ms,如果还能检测到按键动作则认为按键发生了。这种方法最容易理解,但是非常浪费资源。不建议使用。
在设计产品时,一般使用如下两种方式。第一种方式,定义一个按键计数变量和标志位,当检测到按键时,让按键计数变量自加,判断按键计数器的值如果大于一定值,则标志位置1,否则标志位清零。

第二种方式。采用定时器中断,设置10ms定时变量,当按键发生时启动定时器,10ms后进入中断再次检测按键事件,如果依然检测到按键发生则代表按键有效。
以上消抖方案可以根据实际情况进行优化。

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭