黄小华 长江工程职业技术学院 430200
【文章摘要】
本文分析探讨了几种处理单片机按键的方法, 并且对这几种方法的优缺点进行了对比,指出了它们合适的应用场合和使用中要注意的地方。
【参考文献】
单片机;按键;抖动
0 引言
键盘是单片机中最基本的输入设备,其响应是否可靠和高效直接关系到整个程序或者产品的质量,因此必须对按键的处理加以重视。在按键的处理中,有两个基本的问题:一是可靠地检测到有按键输入,二是对按键次数等进行确认,防止误操作。在程序的设计上,首先要能可靠地检测到按键,其次要消除按键抖动,确认按键的性质。
1 按键检测
1.1 根据单片机的实际键盘电路,常用的有专用键盘芯片,如8279 等
这样的电路程序设计比较简单,而且键盘电路稳定可靠,减轻了单片机对按键输入检测的压力,对于按键要求比较高的情况可以考虑。当然,成本会增加很多,电路更加复杂,产品体积也会增大。
1.2 接在普通的I/O 口上,形成独立键盘或者矩阵键盘
对于与普通的I/O 口连接的按键,可以将多个按键进行逻辑或之后接入中断, 这种方法对于键盘的检测可以快速响应, 不过要用掉一个宝贵的外部中断源。该方式可以用于一般的键盘输入。
2 消除按键抖动
检测到按键以后,对于一般的机械键盘都会有一个抖动的过程,包括前沿抖动和后沿抖动,这个抖动的时间一般是5ms 到10ms 左右。不同的开关具有不同的抖动时间,因此在进行软件设计之前,最好进行一下测试,以确认合适的抖动时间,给编程以依据。
2.1 软件延时消除抖动
下面以检测到有某个按键为例,假定延时10ms,使用软件延时的程序流程图如图1 所示。
上述方法程序设计比较简单,但是会白白消耗单片机的时间,执行效率低下,特别是在按键较多时更加明显,甚至可能不能正确检测出按键。
2.2 定时扫描方式
针对单片机利用软件延时的缺点,提出利用定时每隔一段时间产生定时中断,在单片机作出响应后对键盘进行扫描。这种方法只在定时中断中对键盘进行检测, 避免了单片机一直对按键进行检测和空延时去抖动。定时控制扫描方式首先应该设置合适的定时间隔时间,也应该注意定时时间不能太长,中断程序也应该尽快退出,否则会影响对按键输入响应的及时性。这种方式大大提高了单片机的使用效率,但是在大型程序中,特别是单片机负荷比较重的时候,如果定时时间间隔小于中断之外的主程序,则会影响到程序的流畅性,可能产生迟滞和顿挫感,因此要注意使用场合。定时中断程序流程图如图2 所示。
对于定时中断按键处理程序,也还有可以改进的地方。在图2 当中,将按键释放的判断放在了执行程序功能之后,这样可以避免等待过多的时间,可以尽快执行按键的响应程序,但是为了消除前言抖动,这里还是做了延时处理。如果不想延时这么长时间的话,可以每个较短时间定时检测按键一次,如每隔1ms 检测一次, 当连续检测到有按键按下时则表示确定有按键按下,这个检测到按键的次数应该根据实际情况进行设定,如20 次,然后当连续检测到有按键释放时,则表示按键稳定的释放了,这种处理方式更加高效。总之,就是以多次检测或者称为采样,来确定按键的按下和确定按键已经稳定释放,在面对实际的按键场合,应该对间隔时间和检测次数进行试验,以求得到可靠的按键相关参数。改进的定时采样程序流程图如图3 所示。
2.3 状态机
以上的方法有一个共同点,就是不容易检测出长按键、短按键、连击等灵活的键盘操作方式。但是使用状态机的设计思想,将会产生良好的效果,一是基本没有延时,不会白白消耗单片机无效操作的时间,二是可以检测出长按键、短按键、连击等灵活的按键操作,适用于更加复杂的按键输入。根据一个按键从按键按下到释放的整个过程,可以将按键划分为4 个状态, 即
S0 :没有键按下,
S1 :确认有键按下,
S2 :按键稳定按下,
S3 :按键释放。
假设按键按下为低电平,则按键的状态转换可以如图4 所示。
由于按键的输入是随机的,我们可以设计一个定时中断来检测按键的状态。按键一般都要进行消除抖动的处理,这个时间大概是10ms 左右,因此我们可以把定时中断的时间设置为10ms, 每隔10ms 进入中断检测一次按键的状态,根据状态转换图判定按键的状态,这样可以做到延时为零,并且可以非常方便的检测出复杂一点的按键状态,如长按、双击等,只需要在实际测试按键的过程中改变按键计数的次数就可以改变实际的按键效果,适合比较复杂和较多按键的情况。
通过以上各种处理按键方法的比较,在实际选用哪一种方案时应该根据产品的使用场合来选择,并且为了提高按键的体验效果,如可靠性、迟滞等,应该通过多次试验以取得比较合适的参数。
【参考文献】
[1] 陈晓丽,按键的多种状态检测及消抖处理方法,家电科技,2013 年第04 期。
[2] 王效东,按键消抖的软件处理新法. 自动化与仪表,2000 第02 期。
图3 定时采样程序流程图
图1 延时去抖动程序流程图
图2 定时中断程序流程图
图4 按键状态转换图