一种扫描键盘的方法和系统的制作方法

文档序号:7539219阅读:104来源:国知局
专利名称:一种扫描键盘的方法和系统的制作方法
技术领域
本发明涉及电子技术领域,特别涉及一种扫描键盘的方法和系统。
背景技术
随着电子技术的发展,越来越多的人开始使用电子设备,比如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次扫描确定按键的状态是释放后,计时器归零,等待下一次确定按键的状态是按下后,开始计时。

扫描后获得的KEY_INPUT是根据下面语句得到按键的状态CHANGE=KEY_INPUT^KEY_STATUSKEY_CHANGE=KEY_JITTER & CHANGEKEY_JITTER=~KEY_JITTER & CHANGEKEY_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)beginchange<=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中的处理模块在确定了按键当前的响应事件后,删除扫描模块中保存的按键当前去除抖动后的变化状态。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
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所述的系统,其特征在于,所述按键的响应事件还包括长按事件,则所述处理模块包括计时模块,用于在按键状态为按下时,开始计时,如果在设定的时间内该按键去除抖动后的状态全都为按下,则确定该按键当前的响应事件为按键长按事件,在该按键去抖后的变化状态为有变化时,停止计时并归零。
全文摘要
本发明公开了一种扫描键盘的方法,该方法包括A.按照设定的顺序,一个扫描周期扫描一次键盘,根据扫描获得的键值,确定按键当前的状态;B.根据所述按键当前的状态、保存的按键前次去除抖动后的状态和保存的按键前次的变化状态,确定按键当前去除抖动后的状态。通过本发明解决了现有技术中存在的在确定按键状态时,需要占用MCU大量资源的问题。本发明同时公开了一种扫描键盘的系统。
文档编号H03M11/00GK1953334SQ200610114619
公开日2007年4月25日 申请日期2006年11月17日 优先权日2006年11月17日
发明者邓乃利 申请人:北京中星微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1