独立式按键和矩阵式按键相对,是指一个按键占用一个GPIO口的情况,主要用在按键数比较少的场合,用作按键输入实现产品的人机交互。比如洗衣机的面板按键、电饭煲的按键等。
按键一般都是通过机械式按键来实现的,根据是否自锁可以分为自锁按键和非自锁按键。自锁按键,导通和断开需要两次按键动作,第一次按下时处于导通/断开状态,松手后保持该状态,第二次按下后实现复位。而非自锁按键,松手后即复位,如果要状态保持,需要持续按压。机械式按键是通过簧片接触和断开实现开关动作的,所以在按下和弹起的时候都会出现抖动的情况。如果不处理抖动就会出现误动作。所以,机械式按键的消抖处理是必须的。如下图所示。
抖动发生在按下和弹起时,一般抖动持续5-10ms,程序在按键检测时,如果不进行滤波则会出现按键多次的误触发。那么消抖程序该如何设计呢?
在学习单片机初期,很多例程都告诉我们采用延时的方法去抖动,思路如下:当检测到按键动作时,先延时10ms,在进行一次按键检测,如果还是检测到按键动作,则再延时10ms,如果还能检测到按键动作则认为按键发生了。这种方法最容易理解,但是非常浪费资源。不建议使用。
在设计产品时,一般使用如下两种方式。第一种方式,定义一个按键计数变量和标志位,当检测到按键时,让按键计数变量自加,判断按键计数器的值如果大于一定值,则标志位置1,否则标志位清零。
第二种方式。采用定时器中断,设置10ms定时变量,当按键发生时启动定时器,10ms后进入中断再次检测按键事件,如果依然检测到按键发生则代表按键有效。
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!