CN1953334A - 一种扫描键盘的方法和系统 - Google Patents
一种扫描键盘的方法和系统 Download PDFInfo
- Publication number
- CN1953334A CN1953334A CN 200610114619 CN200610114619A CN1953334A CN 1953334 A CN1953334 A CN 1953334A CN 200610114619 CN200610114619 CN 200610114619 CN 200610114619 A CN200610114619 A CN 200610114619A CN 1953334 A CN1953334 A CN 1953334A
- Authority
- CN
- China
- Prior art keywords
- button
- current
- state
- variable condition
- shake
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 25
- 230000008859 change Effects 0.000 claims abstract description 35
- 206010044565 Tremor Diseases 0.000 claims description 37
- 230000004044 response Effects 0.000 claims description 36
- 238000004321 preservation Methods 0.000 claims description 32
- 238000012545 processing Methods 0.000 claims description 25
- 238000010586 diagram Methods 0.000 description 6
- 239000011159 matrix material Substances 0.000 description 5
- 238000007599 discharging Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 239000011800 void material Substances 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
Images
Landscapes
- Input From Keyboards Or The Like (AREA)
Abstract
本发明公开了一种扫描键盘的方法,该方法包括:A.按照设定的顺序,一个扫描周期扫描一次键盘,根据扫描获得的键值,确定按键当前的状态;B.根据所述按键当前的状态、保存的按键前次去除抖动后的状态和保存的按键前次的变化状态,确定按键当前去除抖动后的状态。通过本发明解决了现有技术中存在的在确定按键状态时,需要占用MCU大量资源的问题。本发明同时公开了一种扫描键盘的系统。
Description
技术领域
本发明涉及电子技术领域,特别涉及一种扫描键盘的方法和系统。
背景技术
随着电子技术的发展,越来越多的人开始使用电子设备,比如:MP3,MP4等等。在这些电子设备中,键盘是实现人机交互最常用的手段。键盘有两种电路实现方式:直接连接方式和矩阵方式。直接连接方式就是将按键的一端直接连接到微程序控制器(MCU)的输入引脚。矩阵式键盘是将所有的按键按照矩阵方式进行排列,键盘的行输入连接到MCU的输出引脚,键盘的列输出连接到MCU的输入引脚。
图1为4×4键盘矩阵电路示意图。如图1所示,图中共有16个按键,4个键盘的输入引脚,4个键盘的输出引脚。如果采用直接连接方式的键盘,16个按键需要16个引脚,而采用矩阵式键盘,16个按键只需要8个引脚,所以,在键盘设计时,大多采用矩阵实现方式。
扫描键盘是得到键盘上按键状态的变化过程。因为按键是用户输入设备,并且按键是机械装置,所以在按键按下和释放的过程中,会有抖动,这就需要过滤掉抖动的过程,才能得到准确的按键状态的变化过程。
图2为现有技术输出的按键状态为按下的扫描键盘流程示意图。如图2所示,现有技术输出的按键状态为按下的扫描键盘包括下列步骤:
步骤200、MCU每隔一个设定的时间,对键盘第一行进行扫描。
步骤201、MCU扫描完一行后,获得该行的键值,查看是否扫描完所有行,如果是,则执行步骤202;否则,返回步骤201。
步骤202、MCU读取按键的状态,如果没有按键按下,则执行步骤203;
否则,执行步骤204。
步骤203、结束扫描。
步骤204、MCU延时一段时间,等待按键的抖动结束。
步骤205、MCU行对键盘进行扫描。
步骤206、MCU扫描完一行后,获得该行的键值,查看是否扫描完所有行,如果是,则执行步骤207;否则,执行步骤205。
步骤207、MCU读取按键的状态,如果没有按键按下,则执行步骤203;否则,执行步骤208。
步骤208、MCU输出按键状态是按下的按键的键值。
图3为现有技术输出的按键状态为释放的扫描键盘流程示意图。如图3所示,现有技术输出的按键状态为释放的扫描键盘包括下列步骤:
步骤300、MCU每隔一个设定的时间,对键盘第一行进行扫描。。
步骤301、MCU扫描完一行后,获得该行的键值,查看是否扫描完所有行,如果是,则执行步骤302;否则,返回步骤301。
步骤302、MCU读取按键的状态,如果没有按键按下,则执行步骤303;否则,执行步骤304。
步骤303、MCU输出所有按键的键值。
步骤304、MCU延时一段时间,等待按键的抖动结束。
步骤305、MCU对键盘进行扫描。
步骤306、MCU扫描完一行后,获得该行的键值,查看是否扫描完所有行,如果是,则执行步骤307;否则,执行步骤305。
步骤307、MCU读取该行按键的状态,如果没有按键按下,则执行步骤303;否则,执行步骤308。
步骤308、MCU输出按键状态是释放的按键的键值。
步骤309、结束扫描。
综上所述,现有技术在确定按键状态时,需要在一个扫描周期内对键盘进行一次扫描后,延时一段时间去除抖动,再进行一次扫描,并且为了获得按键按下和释放的不同状态,需要两套不同的扫描程序,从而降低了MCU对按键键值的处理速度,占用了MCU大量的资源。
发明内容
本发明提供一种扫描键盘的方法,用以解决现有技术中存在的在确定按键状态时,需要占用MCU大量资源的问题。
本发明方法包括:
A、按照设定的顺序,一个扫描周期扫描一次键盘,根据扫描获得的键值,确定按键当前的状态;
B、根据所述按键当前的状态、保存的按键前次去除抖动后的状态和保存的按键前次的变化状态,确定按键当前去除抖动后的状态。
步骤B包括:
B1、根据所述按键当前的状态和保存的按键前次去除抖动后的状态,确定按键当前的变化状态;
B2、根据步骤B1中确定的按键当前的变化状态和保存的按键前次的变化状态,确定按键当前去除抖动后的变化状态;
B3、根据步骤B2中确定的按键当前去除抖动后的变化状态,确定按键当前去除抖动后的状态。
在步骤B1中,确定按键当前的变化状态的步骤包括:
如果所述按键当前的状态和保存的按键前次去除抖动后的状态相同,则确定所述按键当前的变化状态为无变化;否则,确定所述按键当前的变化状态为有变化。
在步骤B2中,确定按键当前去除抖动后的变化状态的步骤包括:
如果所述按键当前的变化状态和保存的按键前次的变化状态为有变化,则确定所述按键当前去除抖动后的变化状态为有变化;否则,确定所述按键当前去除抖动后的变化状态为无变化。
在步骤B3中,确定按键当前去除抖动后的状态的步骤包括:
如果所述按键当前去除抖动后的变化状态为有变化,则确定所述按键当前去除抖动后的状态为所述按键当前的状态;否则,确定所述按键当前去除抖动后的状态为保存的按键前次去除抖动后的状态。
在步骤B3之后,该方法还包括:
C、根据所述按键当前去除抖动后的变化状态和所述按键当前去除抖动后的状态,确定按键当前的响应事件。
步骤C中,所述按键当前去除抖动后的状态包括:按下和释放,所述按键的响应事件包括:按下事件和释放事件,则步骤C包括:
如果所述按键当前去除抖动后的状态为释放,并且所述按键当前去除抖动后的变化状态为有变化,则确定所述按键当前的响应事件为按健释放事件;如果所述按键当前去除抖动后的状态为按下,并且所述按键当前去除抖动后的变化状态为有变化,则确定所述按键当前的响应事件为按键按下事件。
步骤C中,所述按键的响应事件还包括:长按事件,则步骤C包括:
在按键状态为按下时,开始计时,如果在设定的时间内该按键去除抖动后的状态全都为按下,则确定该按键当前的响应事件为按键长按事件,在该按键去抖后的变化状态为有变化时,停止计时并归零。
一种扫描键盘的系统,该系统包括:
扫描模块,用于按照设定的顺序,一个扫描周期扫描一次键盘,根据扫描获得的键值,确定按键当前的状态,并根据所述按键当前的状态、保存的按键前次去除抖动后的状态和保存的按键前次的变化状态,确定按键当前去除抖动后的状态。
扫描模块包括:
按键状态扫描模块,用于按照设定的顺序,周期对键盘进行扫描,获得按键的键值,确定按键当前的状态;
按键变化状态模块,用于根据按键状态扫描模块确定的按键当前的状态和保存的按键前次去除抖动后的状态,确定按键当前的变化状态;
按键去抖变化状态模块,用于根据按键变化状态模块中确定的按键当前的变化状态和保存的按键前次的变化状态,确定按键当前去除抖动后的变化状态;
按键抖动模块,用于保存按键变化状态模块中确定的按键的变化状态;
按键去抖状态模块,用于根据按键去抖变化状态模块中确定的按键当前去除抖动后的变化状态,确定按键当前去除抖动后的状态。
所述按键变化状态模块在所述按键当前的状态和保存的按键前次去除抖动后的状态相同时,确定按键当前的变化状态为无变化;在所述按键当前的状态和保存的按键前次去除抖动后的状态不相同时,确定按键当前的变化状态为有变化。
所述按键去抖变化状态模块在所述按键当前的变化状态和保存的按键前次的变化状态为有变化时,确定按键当前去除抖动后的变化状态为有变化;在所述按键当前的变化状态和保存的按键前次的变化状态为无变化,或者只有一个变化状态为有变化时,确定按键当前去除抖动后的变化状态为无变化。
所述按键去抖状态模块在所述按键当前去除抖动后的变化状态为有变化时,确定所述按键当前去除抖动后的状态为所述按键当前的状态;在所述按键当前去除抖动后的变化状态为无变化时,确定所述按键当前去除抖动后的状态为保存的按键前次去除抖动后的状态。
本发明的系统还包括:
处理模块,用于根据扫描模块确定的按键当前去除抖动后的变化状态和按键当前去除抖动后的状态,确定按键当前的响应事件。
所述按键去抖后的状态包括:按下和释放,所述按键的响应事件包括:按下事件和释放事件,则处理模块在所述按键当前去除抖动后的变化状态为有变化,并且所述按键当前去除抖动后的状态为释放时,确定所述按键当前的响应事件为按键释放事件;在按键当前去除抖动后的变化状态为有变化,并且按键当前去除抖动后的状态为按下时,确定按键当前的响应事件为按键按下事件。所述按键的响应事件还包括:长按事件,则所述处理模块包括:
计时模块,用于在按键状态为按下时,开始计时,如果在设定的时间内该按键去除抖动后的状态全都为按下,则确定该按键当前的响应事件为按键长按事件,在该按键去抖后的变化状态为有变化时,停止计时并归零。
本发明按照设定的顺序,一个扫描周期扫描一次键盘,根据扫描获得的键值,确定按键当前的状态,根据按键当前的状态、按键前次去除抖动后的状态和按键前次的变化状态,确定按键当前去除抖动后的状态,实现了一个扫描周期只需要扫描一次,就可以确定按键的状态,并且可以同时输出按键释放和按下两种状态,从而加快了MCU对键值的处理速度,节省了MCU的资源。
附图说明
图1为4×4键盘矩阵电路示意图;
图2为现有技术输出的按键状态为按下的扫描键盘流程示意图;
图3为现有技术输出的按键状态为释放的扫描键盘流程示意图;
图4为本发明扫描键盘的系统结构示意图;
图5为本发明扫描模块结构示意图;
图6为本发明扫描一个按键的状态变化示意图;
图7为实现本发明方法的流程示意图;
图8为本发明实施例的流程示意图。
具体实施方式
针对目前在确定按键状态时,需要占用MCU大量资源的问题,本发明按照设定的顺序,一个扫描周期扫描一次键盘,根据扫描获得的键值,确定按键当前的状态,根据按键当前的状态、按键前次去除抖动后的状态和按键前次的变化状态,确定按键当前去除抖动后的状态,从而解决了上述问题。
图4为本发明扫描键盘的系统结构示意图。如图4所示,本发明包括:扫描模块10和处理模块20。
扫描模块10,与处理模块20连接,用于按照设定的顺序,一个扫描周期扫描一次按键,根据扫描获得的键值,确定按键当前的状态,并根据按键当前的状态、按键前次去除抖动后的状态和按键前次的变化状态,确定按键当前去除抖动后的变化状态和按键当前去除抖动后的状态,并按照设定的顺序保存并发送按键当前去除抖动后的变化状态和按键当前去除抖动后的状态。
处理模块20,与扫描模块10连接,用于根据收到的来自状态模块的按键当前去除抖动后的状态和按键当前去除抖动后的变化状态,确定相同位置对应的按键当前的响应事件。
按键当前去除抖动后的状态包括:按下和释放,按键的响应事件包括:按下事件,释放事件和长按事件。
如果按键当前去除抖动后的状态为释放,按键当前去除抖动后的状态有变化,则确定按键当前的响应事件是按健释放事件;如果按键当前去除抖动后的状态为按下,按键当前去除抖动后的状态有变化,则确定按键当前的响应事件为按键按下事件。
其中,处理模块20还包括:计时模块200。
计时模块200,用于在按键状态为按下时,开始计时,如果在设定的时间内该按键去除抖动后的状态全为按下,则确定该按键当前的响应事件为按键长按事件,在该按键去抖后的变化状态为有变化时,停止计时并归零。
扫描模块10可以通过软件实现自身的功能,也可以通过硬件实现自身的功能。
图5为本发明扫描模块结构示意图。如图5所示,本发明扫描模块10包括:按键状态扫描模块100、按键变化状态模块101、按键去抖变化状态模块102、按键抖动模块103和按键去抖状态模块104。
按键状态扫描模块100,与按键变化状态模块101、按键去抖变化状态模块102和按键去抖状态模块104连接,用于按照设定的顺序,一个扫描周期扫描一次按键,获得按键的键值,确定按键当前的状态,并按照设定的顺序将保存的按键前次的状态替换成按键当前的状态,将按键当前的状态发送给按键变化状态模块101。
按键变化状态模块101,与按键状态扫描模块100、按键去抖变化状态模块102和按键去抖状态模块104连接,用于收到按键当前的状态后,从按键去抖状态模块140中获取保存的按键前次去除抖动后的状态,根据相同位置的按键当前的状态和按键前次去除抖动后的状态,确定该位置对应的按键当前的变化状态,并按照设定的顺序将保存的按键前次的变化状态替换成按键当前的变化状态,将按键当前的变化状态发送给按键去抖变化状态模块102。
如果按键当前的状态和按键前次去除抖动后的状态相同,则确定按键当前的变化状态为无变化;否则,确定按键当前的变化状态为有变化。
按键去抖变化状态模块102,与处理模块10、按键变化状态模块101、按键抖动模块103和按键去抖状态模块104连接,用于收到按键当前的变化状态后,从按键抖动模块103中获取保存的按键前次的变化状态,根据相同位置的按键当前的变化状态和按键前次的变化状态,确定该位置对应的按键当前去除抖动后的变化状态,并按照设定的顺序将保存的按键前次去除抖动后的变化状态替换成按键当前去除抖动后的变化状态,向按键抖动模块103发送替换消息,分别向按键去抖状态模块104和处理模块10发送按键当前去除抖动后的变化状态。
如果按键当前的变化状态和按键前次的变化状态为有变化,则按键当前去除抖动后的变化状态为有变化,表明按键的状态不是由于抖动引起的;否则,按键当前去除抖动后的变化状态为无变化,表明按键的状态是由于抖动引起的。
按键抖动模块103,与按键变化状态模块101和按键去抖变化状态模块102连接,用于保存按键的变化状态,在收到替换消息后,按照设定的顺序将保存的按键前次的变化状态替换成获取的按键变化状态模块101中保存的按键当前的变化状态。
按键去抖状态模块104,与处理模块10、按键状态扫描模块100、按键变化状态模块101和按键去抖变化状态模块102连接,用于根据收到的按键当前去除抖动后的变化状态,确定相同位置对应的按键当前去除抖动后的状态,并按照设定的顺序将保存的按键前次去除抖动后的状态替换成按键当前去除抖动后的状态,向处理模块10发送按键当前去除抖动后的状态。
如果按键当前去除抖动后的变化状态为有变化,则确定按键当前去除抖动后的状态为按键当前的状态;否则,确定按键当前去除抖动后的状态为按键前次去除抖动后的状态。
如果按键去抖变化状态模块102,按照设定的顺序保存按键当前去除抖动后的变化状态,则处理模块10在确定按键当前的响应事件后,删除去抖变化模块中保存的按键当前去除抖动后的变化状态。
图6为本发明扫描一个按键的状态变化示意图。如图6所示,设定扫描键盘的周期是10ms,按键按下为1,释放为0。
KEY_INPUT表示扫描获得的按键的状态,0表示按键释放,1表示按键按下。
CHANGE表示按键的变化状态,0表示按键变化状态为无变化,1表示按键变化状态为有变化。
KEY_CHANGE表示按键去除抖动后的变化状态,0表示按键去除抖动后的变化状态为无变化,1表示按键去除抖动后的变化状态为有变化。
KEY_JITTER表示按键前次的变化状态,0表示按键前次变化状态为无变化,1表示按键前次变化状态为有变化。
KEY_STATUS表示按键去除抖动后的状态,0表示按键释放,1表示按键按下。
其中,KEY_INPUT、CHANGE和KEY_JITTER为临时变量。
从图6中可以看出,按键的状态为0。在20mS的时候按键发生抖动,是按键的误动作,到34mS抖动结束。在54mS的时候按键开始按下,到122mS的时候按键状态稳定。在按键保持按下的过程中,从122mS到132按键发生了一次抖动。在166mS按键开始释放,到176mS按键完全释放。此后一直处于释放状态。
如果预先设定的时间是60ms,在第5次扫描时,确定按键的状态是按下后,开始计时,第6次扫描确定按键的状态是按下,第7次扫描确定按键的状态是按下,则认为该按键是长按,第8次和第9次扫描确定按键的状态都是长按,第10次扫描确定按键的状态是释放后,计时器归零,等待下一次确定按键的状态是按下后,开始计时。
按键状态变化表 | ||||||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
KEY_INPUT | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 |
CHANGE | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 |
KEY_CHANGE | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
KEY_JITTER | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
KEY_STATUS | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
扫描后获得的KEY_INPUT是根据下面语句得到按键的状态:
CHANGE=KEY_INPUT^KEY_STATUS
KEY_CHANGE=KEY_JITTER & CHANGE
KEY_JITTER=~KEY_JITTER & CHANGE
KEY_STATUS=(KEY_CHANGE & KEY_INPUT)|(~KEY_CHANGE &KEY_STATUS)。
扫描模块在软件中的程序:
volatile unsigned int key_status;
volatile unsigned int key_change;
volatile unsigned int key_jitter;
void timer_out_handle(void)
{
unsigned int key_input;
unsigned int change;
key_input=get_key_input(); /扫描当前时刻/
change=key_input^key_old_status; /获得按键的变化状态/
key_change=key_jitter & change; /按键去抖后的变化状态/
key_jitter=~key_jitter & change; /当前按键的变化状态/
key_status=(key_change & key_inPut)|(~key_change & key_status);
/按键去抖后的状态/
}
扫描模块在硬件中的程序:
reg change,key_change,key_jitter,key_status;
always@(posedge CLK)
begin
change<=key_input^key_old_status;
/扫描当前时刻获得按键的变化状态/
key_change<=(key_jitter & change)|key_change;
/按键去抖后的变化状态/
key_jitter<=~key_jitter & change; /当前按键的变化状态/
key_status<=(key_change & key_input)|(~key_change & key_status);
/按键去抖后的状态/
end;
处理模块在软件中的程序:
int get_key_number(void)
{
unsigned int key_down;
unsigned int key_up;
key_down=key_change & key_status;
if(key_down)
key_change=0;/如果按键的响应事件是按键按下事件则返回1/
return1;
key_up=key_change &(~key_status);
if(key_up)
key_change=0;/如果按键的响应事件是按键释放事件则返回2/
return2;
if(key_status) /如果按键的响应事件是按键长按事件则返回3/
return3;
return0; /如果没有按键按下则返回0/
}
其中,0、1、2和3分别代表按键的4种不同的处理方式,根据按键的不同应用环境,处理方式不相同。
图7为实现本发明方法的流程示意图,如图7所示,本发明方法包括下列步骤:
步骤700、扫描模块按照设定的顺序,一个扫描周期扫描一次键盘,根据扫描获得的键值,确定按键当前的状态。
步骤701、扫描模块根据按键当前的状态、按键前次去除抖动后的状态和按键前次的变化状态,确定相同位置对应的按键当前去除抖动后的状态和当前去除抖动后的变化状态,并按照设定的顺序保存并发送按键当前去除抖动后的状态和按键当前去除抖动后的变化状态。
步骤702、处理模块根据收到的扫描模块发送的按键当前去除抖动后的状态和按键当前去除抖动后的变化状态,确定相同位置对应的按键当前的响应事件。
图8为本发明实施例的流程示意图。如图8所示,本实施例包括下列步骤:
步骤800、扫描模块按照设定的顺序,每隔一个设定的时间,对键盘第一行进行扫描。
步骤801、扫描模块扫描完一行后,输出按键的键值。
步骤802、扫描模块查看是否扫描完所有行,如果是,则执行步骤803;否则,返回步骤801。
步骤803、扫描模块根据按键的键值,确定按键当前的状态,并按照设定的顺序将保存的按键前次的状态替换成按键当前的状态。
步骤804、扫描模块根据保存的相同位置的按键当前的状态和按键前次去除抖动后的状态,确定该位置对应的按键当前的变化状态,并按照设定的顺序将保存的按键前次的变化状态替换成按键当前的变化状态。
步骤805、扫描模块根据保存的相同位置的按键当前的变化状态和按键前次的变化状态,确定该位置对应的按键当前去除抖动后的变化状态,并按照设定的顺序将保存的按键前次去除抖动后的变化状态替换成按键当前去除抖动后的变化状态,将按键当前去除抖动后的变化状态发送给处理模块。
步骤806、扫描模块按照设定的顺序将保存的按键前次的变化状态替换成按键当前的变化状态。
步骤807、扫描模块根据保存的按键当前去除抖动后的变化状态,确定相同位置对应的按键当前去除抖动后的状态,并按照设定的顺序将保存的按键前次去除抖动后的状态替换成按键当前去除抖动后的状态,将按键当前去除抖动后的状态发送给处理模块。
步骤808、处理模块根据收到的相同位置对应的按键当前去除抖动后的状态和按键当前去除抖动后的变化状态,确定该位置对应的按键当前的响应事件。
如果步骤805中的扫描模块是按照设定的顺序保存按键当前去除抖动后的变化状态,则步骤808中的处理模块在确定了按键当前的响应事件后,删除扫描模块中保存的按键当前去除抖动后的变化状态。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (16)
1、一种扫描键盘的方法,其特征在于,该方法包括:
A、按照设定的顺序,一个扫描周期扫描一次键盘,根据扫描获得的键值,确定按键当前的状态;
B、根据所述按键当前的状态、保存的按键前次去除抖动后的状态和保存的按键前次的变化状态,确定按键当前去除抖动后的状态。
2、如权利要求1所述的方法,其特征在于,步骤B包括:
B1、根据所述按键当前的状态和保存的按键前次去除抖动后的状态,确定按键当前的变化状态;
B2、根据步骤B1中确定的按键当前的变化状态和保存的按键前次的变化状态,确定按键当前去除抖动后的变化状态;
B3、根据步骤B2中确定的按键当前去除抖动后的变化状态,确定按键当前去除抖动后的状态。
3、如权利要求2所述的方法,其特征在于,在步骤B1中,确定按键当前的变化状态的步骤包括:
如果所述按键当前的状态和保存的按键前次去除抖动后的状态相同,则确定所述按键当前的变化状态为无变化;否则,确定所述按键当前的变化状态为有变化。
4、如权利要求2所述的方法,其特征在于,在步骤B2中,确定按键当前去除抖动后的变化状态的步骤包括:
如果所述按键当前的变化状态和保存的按键前次的变化状态为有变化,则确定所述按键当前去除抖动后的变化状态为有变化;否则,确定所述按键当前去除抖动后的变化状态为无变化。
5、如权利要求2所述的方法,其特征在于,在步骤B3中,确定按键当前去除抖动后的状态的步骤包括:
如果所述按键当前去除抖动后的变化状态为有变化,则确定所述按键当前去除抖动后的状态为所述按键当前的状态;否则,确定所述按键当前去除抖动后的状态为保存的按键前次去除抖动后的状态。
6、如权利要求2所述的方法,其特征在于,在步骤B3之后,该方法还包括:
C、根据所述按键当前去除抖动后的变化状态和所述按键当前去除抖动后的状态,确定按键当前的响应事件。
7、如权利要求6所述的方法,其特征在于,步骤C中,所述按键当前去除抖动后的状态包括:按下和释放,所述按键的响应事件包括:按下事件和释放事件,则步骤C包括:
如果所述按键当前去除抖动后的状态为释放,并且所述按键当前去除抖动后的变化状态为有变化,则确定所述按键当前的响应事件为按健释放事件;如果所述按键当前去除抖动后的状态为按下,并且所述按键当前去除抖动后的变化状态为有变化,则确定所述按键当前的响应事件为按键按下事件。
8、如权利要求7所述的方法,其特征在于,步骤C中,所述按键的响应事件还包括:长按事件,则步骤C包括:
在按键状态为按下时,开始计时,如果在设定的时间内该按键去除抖动后的状态全都为按下,则确定该按键当前的响应事件为按键长按事件,在该按键去抖后的变化状态为有变化时,停止计时并归零。
9、一种扫描键盘的系统,其特征在于,该系统包括:
扫描模块,用于按照设定的顺序,一个扫描周期扫描一次键盘,根据扫描获得的键值,确定按键当前的状态,并根据所述按键当前的状态、保存的按键前次去除抖动后的状态和保存的按键前次的变化状态,确定按键当前去除抖动后的状态。
10、如权利要求9所述的系统,其特征在于,所述扫描模块包括:
按键状态扫描模块,用于按照设定的顺序,周期对键盘进行扫描,获得按键的键值,确定按键当前的状态;
按键变化状态模块,用于根据按键状态扫描模块确定的按键当前的状态和保存的按键前次去除抖动后的状态,确定按键当前的变化状态;
按键去抖变化状态模块,用于根据按键变化状态模块中确定的按键当前的变化状态和保存的按键前次的变化状态,确定按键当前去除抖动后的变化状态;
按键抖动模块,用于保存按键变化状态模块中确定的按键的变化状态;
按键去抖状态模块,用于根据按键去抖变化状态模块中确定的按键当前去除抖动后的变化状态,确定按键当前去除抖动后的状态。
11、如权利要求10所述的系统,其特征在于,所述按键变化状态模块在所述按键当前的状态和保存的按键前次去除抖动后的状态相同时,确定按键当前的变化状态为无变化;在所述按键当前的状态和保存的按键前次去除抖动后的状态不相同时,确定按键当前的变化状态为有变化。
12、如权利要求10所述的系统,其特征在于,所述按键去抖变化状态模块在所述按键当前的变化状态和保存的按键前次的变化状态为有变化时,确定按键当前去除抖动后的变化状态为有变化;在所述按键当前的变化状态和保存的按键前次的变化状态为无变化,或者只有一个变化状态为有变化时,确定按键当前去除抖动后的变化状态为无变化。
13、如权利要求10所述的系统,其特征在于,所述按键去抖状态模块在所述按键当前去除抖动后的变化状态为有变化时,确定所述按键当前去除抖动后的状态为所述按键当前的状态;在所述按键当前去除抖动后的变化状态为无变化时,确定所述按键当前去除抖动后的状态为保存的按键前次去除抖动后的状态。
14、如权利要求10所述的系统,其特征在于,该系统还包括:
处理模块,用于根据扫描模块确定的按键当前去除抖动后的变化状态和按键当前去除抖动后的状态,确定按键当前的响应事件。
15、如权利要求14所述的系统,其特征在于,所述按键去抖后的状态包括:按下和释放,所述按键的响应事件包括:按下事件和释放事件,则处理模块在所述按键当前去除抖动后的变化状态为有变化,并且所述按键当前去除抖动后的状态为释放时,确定所述按键当前的响应事件为按键释放事件;在按键当前去除抖动后的变化状态为有变化,并且按键当前去除抖动后的状态为按下时,确定按键当前的响应事件为按键按下事件。
16、如权利要求15所述的系统,其特征在于,所述按键的响应事件还包括:长按事件,则所述处理模块包括:
计时模块,用于在按键状态为按下时,开始计时,如果在设定的时间内该按键去除抖动后的状态全都为按下,则确定该按键当前的响应事件为按键长按事件,在该按键去抖后的变化状态为有变化时,停止计时并归零。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101146190A CN100492918C (zh) | 2006-11-17 | 2006-11-17 | 一种扫描键盘的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101146190A CN100492918C (zh) | 2006-11-17 | 2006-11-17 | 一种扫描键盘的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1953334A true CN1953334A (zh) | 2007-04-25 |
CN100492918C CN100492918C (zh) | 2009-05-27 |
Family
ID=38059493
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006101146190A Expired - Fee Related CN100492918C (zh) | 2006-11-17 | 2006-11-17 | 一种扫描键盘的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100492918C (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101807927A (zh) * | 2010-03-19 | 2010-08-18 | 青岛海信电器股份有限公司 | 一种触摸按键扫描方法及系统 |
CN102025937A (zh) * | 2010-12-02 | 2011-04-20 | 深圳Tcl新技术有限公司 | 电视遥控器灵敏度调节装置及方法 |
CN103546165A (zh) * | 2013-10-15 | 2014-01-29 | 深圳市凌启电子有限公司 | 按键采样方法、系统和相关设备 |
CN103677282A (zh) * | 2012-09-24 | 2014-03-26 | 中国航天科工集团第二研究院二O七所 | 一种基于堆栈的去除键抖动的软件实现方法 |
CN104124978A (zh) * | 2014-07-31 | 2014-10-29 | 成都易默生汽车技术有限公司 | 一种基于状态机的新型多功能按键检测方法 |
CN101741394B (zh) * | 2009-11-03 | 2015-01-21 | 北京中星微电子有限公司 | 检测按键输入的方法和装置 |
CN105071816A (zh) * | 2015-08-12 | 2015-11-18 | 长沙市博巨兴电子科技有限公司 | 一种高效率快速按键扫描方法 |
CN105634503A (zh) * | 2015-12-28 | 2016-06-01 | 北京锦鸿希电信息技术股份有限公司 | 检测键盘键值的方法及装置 |
CN106972863A (zh) * | 2016-10-31 | 2017-07-21 | 成都乐创自动化技术股份有限公司 | 一种按键驱动方法及装置 |
CN107861844A (zh) * | 2017-09-30 | 2018-03-30 | 杭州天马时控科技股份有限公司 | 一种高效率按键检测方法 |
CN111381686A (zh) * | 2018-12-29 | 2020-07-07 | 龙芯中科技术有限公司 | 按键处理方法、装置、设备和存储介质 |
CN111880447A (zh) * | 2020-07-22 | 2020-11-03 | 深圳和而泰智能控制股份有限公司 | 基于状态机的多按键状态扫描方法、装置及计算设备 |
-
2006
- 2006-11-17 CN CNB2006101146190A patent/CN100492918C/zh not_active Expired - Fee Related
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101741394B (zh) * | 2009-11-03 | 2015-01-21 | 北京中星微电子有限公司 | 检测按键输入的方法和装置 |
CN101807927B (zh) * | 2010-03-19 | 2013-01-09 | 青岛海信电器股份有限公司 | 一种触摸按键扫描方法及系统 |
CN101807927A (zh) * | 2010-03-19 | 2010-08-18 | 青岛海信电器股份有限公司 | 一种触摸按键扫描方法及系统 |
CN102025937A (zh) * | 2010-12-02 | 2011-04-20 | 深圳Tcl新技术有限公司 | 电视遥控器灵敏度调节装置及方法 |
CN103677282B (zh) * | 2012-09-24 | 2016-08-31 | 中国航天科工集团第二研究院二O七所 | 一种基于堆栈的去除键抖动的软件实现方法 |
CN103677282A (zh) * | 2012-09-24 | 2014-03-26 | 中国航天科工集团第二研究院二O七所 | 一种基于堆栈的去除键抖动的软件实现方法 |
CN103546165B (zh) * | 2013-10-15 | 2016-05-25 | 深圳市凌启电子有限公司 | 按键采样方法、系统和相关设备 |
CN103546165A (zh) * | 2013-10-15 | 2014-01-29 | 深圳市凌启电子有限公司 | 按键采样方法、系统和相关设备 |
CN104124978A (zh) * | 2014-07-31 | 2014-10-29 | 成都易默生汽车技术有限公司 | 一种基于状态机的新型多功能按键检测方法 |
CN104124978B (zh) * | 2014-07-31 | 2017-09-26 | 成都易默生汽车技术有限公司 | 一种基于状态机的多功能按键检测方法 |
CN105071816A (zh) * | 2015-08-12 | 2015-11-18 | 长沙市博巨兴电子科技有限公司 | 一种高效率快速按键扫描方法 |
CN105071816B (zh) * | 2015-08-12 | 2018-04-20 | 长沙市博巨兴电子科技有限公司 | 一种高效率快速按键扫描方法 |
CN105634503A (zh) * | 2015-12-28 | 2016-06-01 | 北京锦鸿希电信息技术股份有限公司 | 检测键盘键值的方法及装置 |
CN105634503B (zh) * | 2015-12-28 | 2018-07-31 | 北京锦鸿希电信息技术股份有限公司 | 检测键盘键值的方法及装置 |
CN106972863A (zh) * | 2016-10-31 | 2017-07-21 | 成都乐创自动化技术股份有限公司 | 一种按键驱动方法及装置 |
CN107861844A (zh) * | 2017-09-30 | 2018-03-30 | 杭州天马时控科技股份有限公司 | 一种高效率按键检测方法 |
CN111381686A (zh) * | 2018-12-29 | 2020-07-07 | 龙芯中科技术有限公司 | 按键处理方法、装置、设备和存储介质 |
CN111880447A (zh) * | 2020-07-22 | 2020-11-03 | 深圳和而泰智能控制股份有限公司 | 基于状态机的多按键状态扫描方法、装置及计算设备 |
CN111880447B (zh) * | 2020-07-22 | 2021-12-21 | 深圳和而泰智能控制股份有限公司 | 基于状态机的多按键状态扫描方法、装置及计算设备 |
Also Published As
Publication number | Publication date |
---|---|
CN100492918C (zh) | 2009-05-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100492918C (zh) | 一种扫描键盘的方法和系统 | |
CN110908879A (zh) | 埋点数据的上报方法、装置、终端和存储介质 | |
CN102034083B (zh) | 辨识条形码的方法 | |
CN105739786A (zh) | 灭屏状态下开启应用程序的方法及装置 | |
CN111913884A (zh) | 分布式测试方法、装置、设备、系统和可读存储介质 | |
CN103024200B (zh) | 应用于智能终端的拍摄方法及拍摄装置 | |
CN101452403B (zh) | 拖拽支持方法和装置 | |
CN104572046A (zh) | 一种堆栈还原方法和计算机系统 | |
CN104951329A (zh) | 一种应用程序模板的配置、启动方法和移动终端 | |
CN103297680A (zh) | 电子装置及其影像处理方法 | |
CN106919377B (zh) | 确定应用程序的展示界面是否是白屏的方法及装置 | |
CN203761447U (zh) | 控制组件及移动终端 | |
WO2011070055A1 (en) | Entropy extraction in a virtualized computing environment | |
TW201617777A (zh) | 電子裝置及其喚醒方法 | |
CN102055623B (zh) | 实现嵌入式浏览器自动测试的方法及系统 | |
CN103648047A (zh) | 智能电视资源搜索方法及系统 | |
RU2566966C2 (ru) | Способ и устройство ускорения нажатия кнопок | |
CN106982268B (zh) | 一种信息处理方法和服务器 | |
CN113127425B (zh) | 图片处理方法、装置及电子设备 | |
US9983699B2 (en) | Input device adaptable to use habit and adapting method therefor | |
CN104866303B (zh) | 一种信息处理的方法及移动终端 | |
CN105260097A (zh) | 操作事件处理方法、系统及电子设备 | |
CN107169133B (zh) | 一种快照抓取方法、装置、服务器及系统 | |
CN101727264A (zh) | 切换显示器解析度的方法 | |
CN118100956A (zh) | 一种按键状态确定方法、装置、设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090527 Termination date: 20121117 |