矩阵式键盘部分连击的处理
2011-07-13鲁庆宾
鲁庆宾
(南阳理工学院 计算机科学与技术系,河南 南阳 473004)
键盘是一组按键的集合,是最常用的微机输入设备。操作员可以通过键盘输入数据或指令,实现简单的人机通信[1]。连击是键盘操作中常用的方法,可以在很大程度上提高键盘的使用效率[2]。
在下文中,短击是指短暂按下某键,时间小于500 ms,长击是指长时间按住某键不放,时间超过1 s。比如,在手机键盘中,短击“*”键则可以在输入框中输入该符号,长击则锁定键盘或解锁;短击向下箭头则执行一次下移操作,长击超过一定时间则可以执行连续的下移操作。
笔者以 STC89C51的P1口设计的4×4式键盘为例[3],介绍在一个键盘中存在的以下3情况:一是该键按下只执行单一功能;二是该键按下时短击执行该键第一功能,长击执行第二功能;三是该键按下时短击执行第一功能,长击则每隔一个较短的时间连续执行该键的功能。该方法在Keil C下编译通过。
1 矩阵式键盘的扫描法识别原理
矩阵式键盘的结构如图1所示[4]。从键盘的行线送出全0,读取列线的值,如果键盘中有键按下,则相应的列线必然被拉为低电平,即读取到列线的值不全为1,否则,当键盘中无键按下时,读取到列线的值全为1。于是,当判断键盘中无键按下时键盘扫描函数直接返回-1;有键按下时,需要判断是哪一个按键按下,步骤为:从第0行送0,其他行送1,读取列线的值,若读取到的列线值不全为1,则所按下的键必在该行,否则,所按下的键不在该行,从下一行送0,其他行送1,直到最后一行。当判断所按下按键在该行时,只要找到列线中输入为0的列,行列位置即确定,对该位置进行编码,此编码即为插入图1键值[5]。
图1 图4×4矩阵键盘接口Fig.1 Keyboard interface of 4×4 matrix
扫描得到键值[的函数如下:
2 键的处理
键的处理流程图如图2所示。
图2 按键处理流程图Fig.2 Flow chart of keys processing
在以下的方法中,定义了两个全局变量:
1)KeyStatus:按键按下后的状态。程序中置了3状态:①时去抖状态,程序中使用状态0;②击状态,程序中使用状态1;③击后连续执行某一功能状态,程序中使用状态2。
2)在按键状态0时,时间达到15 ms,去抖完成,执行按键的第一功能,进入状态1。当状态1时间达到1 000 s,需要执行第二功能的按键执行第二功能,需要连续执行某一功能的按键再次执行一次第一功能,转让状态2。当状态2时间每到一次100 s,需要连续执行某一功能的按键再次执行一次第一功能。
按键执行第一功能和连续执行的函数假定为void KeyFirstFunction(unsigned char);执行第二功能的函数假定为void KeySecondFunction(unsigned char);定时器 0 中断服务程序为void T0IntServe();假定振荡频率为 12 MHz,定时时间为1 ms,程序代码如下:
3 结 论
该方法的特点:
1)按键的处理只是在每次循环时扫描一下有没有键按下,根据按键按下的时间确定当前按键的状态。既没有常规按键处理中的使用延时去抖,也没有在等待按键释放过程中的循环处理,避免了CPU在延时过程中什么事情也不干的问题,提高了CPU的使用效率。
2)根据按键按下的时间和各按键的功能设置其执行的指令,巧妙解决了多个按键在连击时处理方法复杂的问题,结构简单、条理清晰。
经过在多个项目中的实际证明,用这种方法不但可以快速有效地处理按键功能,而且程序稍加调整后,可以在定时中断中扫描按键,另外定时器也可以作为时基产生器产生程序运行所需的时标。
[1]吴国经.单片机应用技术[M].北京:中国电力出版社,2004.
[2]李全利,迟荣强.单片机原理及接口技术[M].北京:高等教育出版社,2004.
[3]许泳龙.单片机原理及应用[M].北京:机械工业出版社,2005.
[4]张毅刚.MCS-计[M].哈尔滨:哈工大出版社,2004.
[5]李朝青.单片机原理及接口技术[M].北京:北京航空航天大学出版社,2006.
[6]周国运.单片机原理及应用[M].C语言版.北京:中国水利水电出版社,2009.