CN102508556A - 键盘扫描的实现方法 - Google Patents
键盘扫描的实现方法 Download PDFInfo
- Publication number
- CN102508556A CN102508556A CN2011103377595A CN201110337759A CN102508556A CN 102508556 A CN102508556 A CN 102508556A CN 2011103377595 A CN2011103377595 A CN 2011103377595A CN 201110337759 A CN201110337759 A CN 201110337759A CN 102508556 A CN102508556 A CN 102508556A
- Authority
- CN
- China
- Prior art keywords
- button
- message
- buttons
- low
- press
- 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.)
- Pending
Links
Images
Landscapes
- Input From Keyboards Or The Like (AREA)
Abstract
本发明提供一种键盘扫描的实现方法,其包括如下步骤:步骤1、按键处于空闲状态,如果信号线为高,继续保持空闲状态,如果信号线为低,切换到按键将按下状态;步骤2、按键处于将按下状态,如果信号线为高,切换到按键空闲状态,如果信号线为低,发送按键按下消息,并将该按键按下消息存入消息列队,切换到按键按下状态;步骤3、按键处于按下状态,如果信号线为低,保持按键按下状态,并对信号为低这一状态进行计数,如果信号线为高,切换到按键将释放状态;步骤4、按键处于将释放状态,如果信号为低,切换到按键按下状态,如果信号线为高,发送按键释放消息,并将该按键释放消息存入消息队列,切换到按键空闲状态,起工作稳定,占用资源少。
Description
技术领域
本发明涉及一种键盘扫描的实现方法,尤其涉及一种基于状态机的键盘扫描的实现方法。
背景技术
在编写单片机程序的过程中,键盘作为一种人机接口的实现方式,是很常用的。
而一般的实现方法有:
1、外接键盘扫描芯片(例如8279、7279等芯片),然后由该芯片来完成去抖、键值读取、中断请求等功能。然后单片机响应中断并读取键值,有的时候也可以采用轮训的方式。而这种方法需要专门的外围芯片,增加成本,且不容易检测按键的按下、释放以及长按键等一些事件。
2、如果按键数比较少,那么可以直接将按键接到单片机的IO口,然后各按键取逻辑或再送到单片机的中断管脚(对于51体系),单片机响应中断后再去读取IO口的数据。如果单片机的中断向量比较多(例如AVR系列的单片机,每个IO都可以作为中断),那么也可以直接把各个按键接到各个具有中断功能的IO上面。在中断处理程序中往往需要执行这样一个操作序列:延时一定时间来去抖,如果按键有效那么等待按键释放。而这种方法同样不容易检测按键的按下、释放以及长按键等一些事件。且采用软件延时的方式,浪费CPU资源。
键按下之后的理想波形如图1所示,按键处于空闲状态S1时,信号为高;按键处于将按下状态2时,信号垂直降为低;按键处于按下状态S3时,信号为低;按键处于将释放状态S4时,信号垂直升为高。而实际波形如图2所示,按键处于空闲状态S1时,信号为高;按键处于将按下状态S2时,信号出现一段时间的抖动,然后降为低;按键处于按下状态S3时,信号为低,按键处于将释放状态S4时,信号抖动一段时间后升为高。同时,在数据线为低或者为高的过程中,都有可能出现一些很窄的干扰信号。如果可以采用基于这种基于状态机的扫描式的方法来判断各种按键事件,则可有效的解决了上述方法中问题。
发明内容
本发明的目的在于提供一种键盘扫描的实现方法,其工作稳定,占用系统资源少,对各种按键事件响应及时。
为实现上述目的,本发明提供一种键盘扫描的实现方法,包括如下步骤:
步骤1、在按键处于空闲状态时,如果信号线为高,继续保持空闲状态,如果信号线为低,切换到按键将按下状态;
步骤2、在按键处于将按下状态时,如果信号线为高,切换到按键空闲状态,如果信号线为低,发送按键按下消息,并将该按键按下消息存入消息列队,切换到按键按下状态;
步骤3、在按键处于按下状态时,如果信号线为低,保持按键按下状态,并对信号为低这一状态进行计数,如果信号线为高,切换到按键将释放状态;
步骤4、在按键处于将释放状态时,如果信号为低,切换到按键按下状态,如果信号线为高,发送按键释放消息,并将该按键释放消息存入消息队列,切换到按键空闲状态。
所述步骤2中所发送的按键按下消息经过系统判断为不需要消息时,释放该按键按下消息。
所述步骤4中信号为低时,系统根据预设阈值对信号为低这一按键消息的计数进行判断,如果该计数的数值大于该预设阈值,该按键消息作为一长按键消息,小于该预设阈值,该按键消息作为一短按键消息。
所述步骤4中信号为高时,系统对所发送的按键释放消息进行判断,如该按键释放消息为不需要时,释放该按键释放消息。
本发明的有益效果:本发明所提供的键盘扫描的实现方法,使用状态机的模式设计键盘扫描程序,其工作稳定可靠,占用系统资源非常少,对各种按键事件响应及时,在现有的程序框架下还可以方便地扩展其它类型的按键事件。
为了能更进一步了解本发明的特征以及技术内容,请参阅以下有关本发明的详细说明与附图,然而附图仅提供参考与说明用,并非用来对本发明加以限制。
附图说明
下面结合附图,通过对本发明的具体实施方式详细描述,将使本发明的技术方案及其它有益效果显而易见。
附图中,
图1为按键过程的理想波形示意图;
图2为按键过程的实际波形示意图;
图3为本发明键盘扫描的实现方法的流程图。
具体实施方式
为更进一步阐述本发明所采取的技术手段及其效果,以下结合本发明的优选实施例及其附图进行详细描述。
请参阅图3,本发明提供一种键盘扫描的实现方法,其包括如下步骤:
步骤1、在按键处于空闲状态S1时,如果信号线为高,那么继续保持按键空闲状态S1,如果信号线为低,那么切换到按键将按下状态S2。
步骤2、在按键处于将按下状态S2时,如果信号线为高,那么切换到按键空闲状态S1,如果信号线为低,那么切换到按键按下状态S3,此时表示有了键按下的消息事件,把此事件存入消息队列,如果系统不需要此消息,此时可以不存入这个键按下事件。
步骤3、在按键处于按下状态S3时,如果信号线为低,那么保持按键按下状态S3,并对信号为低这一状态进行计数,如果信号线为高,那么切换到按键将释放状态S4。
步骤4、在按键处于释将放过态S4时,如果信号线为低,则切换到按键按下状态S3,如果信号线为高,那么切换到按键空闲状态S1,此时表示有了键释放的消息事件,把此消息存入消息队列,如果系统不需要此消息,此时可以不存入这个键按下事件,同时还需要对信号为低这一状态的计数进行判断,如果大于预设的阈值,那么表示之前是一个长按键消息事件,小于此阈值,则表示之前为一个短按键消息事件。
本发明所提供的键盘扫描的实现方法,使用状态机的模式设计键盘扫描程序,其工作稳定可靠,占用系统资源非常少,对各种按键事件响应及时,在现有的程序框架下还可以方便地扩展其它类型的按键事件。
以上所述,对于本领域的普通技术人员来说,可以根据本发明的技术方案和技术构思作出其他各种相应的改变和变形,而所有这些改变和变形都应属于本发明权利要求的保护范围。
Claims (4)
1.一种键盘扫描的实现方法,其特征在于,包括如下步骤:
步骤1、在按键处于空闲状态时,如果信号线为高,继续保持空闲状态,如果信号线为低,切换到按键将按下状态;
步骤2、在按键处于将按下状态时,如果信号线为高,切换到按键空闲状态,如果信号线为低,发送按键按下消息,并将该按键按下消息存入消息列队,切换到按键按下状态;
步骤3、在按键处于按下状态时,如果信号线为低,保持按键按下状态,并对信号为低这一状态进行计数,如果信号线为高,切换到按键将释放状态;
步骤4、在按键处于将释放状态时,如果信号为低,切换到按键按下状态,如果信号线为高,发送按键释放消息,并将该按键释放消息存入消息队列,切换到按键空闲状态。
2.如权利要求1所述的键盘扫描的实现方法,其特征在于,所述步骤2中所发送的按键按下消息经过系统判断为不需要消息时,释放该按键按下消息。
3.如权利要求1所述的键盘扫描的实现方法,其特征在于,所述步骤4中信号为低时,系统根据预设阈值对信号为低这一按键消息的计数进行判断,如果该计数的数值大于该预设阈值,该按键消息作为一长按键消息,小于该预设阈值,该按键消息作为一短按键消息。
4.如权利要求1所述的键盘扫描的实现方法,其特征在于,所述步骤4中信号为高时,系统对所发送的按键释放消息进行判断,如该按键释放消息为不需要时,释放该按键释放消息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011103377595A CN102508556A (zh) | 2011-10-31 | 2011-10-31 | 键盘扫描的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011103377595A CN102508556A (zh) | 2011-10-31 | 2011-10-31 | 键盘扫描的实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102508556A true CN102508556A (zh) | 2012-06-20 |
Family
ID=46220656
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011103377595A Pending CN102508556A (zh) | 2011-10-31 | 2011-10-31 | 键盘扫描的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102508556A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103199871A (zh) * | 2013-02-26 | 2013-07-10 | 无锡飞翎电子有限公司 | 一种控制按键的自适应功能替换的控制方法 |
CN105634503A (zh) * | 2015-12-28 | 2016-06-01 | 北京锦鸿希电信息技术股份有限公司 | 检测键盘键值的方法及装置 |
CN105897276A (zh) * | 2016-03-31 | 2016-08-24 | 上海林果实业股份有限公司 | 一种低功耗按键检测方法及电路 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1028532A1 (fr) * | 1999-02-11 | 2000-08-16 | Alcatel | Dispositif de gestion d'un clavier à touches |
CN101552611A (zh) * | 2006-11-01 | 2009-10-07 | 深圳市菉华半导体有限公司 | 键盘扫描电路的扫描方法 |
-
2011
- 2011-10-31 CN CN2011103377595A patent/CN102508556A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1028532A1 (fr) * | 1999-02-11 | 2000-08-16 | Alcatel | Dispositif de gestion d'un clavier à touches |
CN101552611A (zh) * | 2006-11-01 | 2009-10-07 | 深圳市菉华半导体有限公司 | 键盘扫描电路的扫描方法 |
Non-Patent Citations (3)
Title |
---|
侯继红: "基于VHDL 语言的按键消抖电路设计及仿真", 《现代电子技术》 * |
李晓锋等: "有限状态机在嵌入式系统中的实现及应用", 《广西轻工业》 * |
肖看等: "FPGA按键模式的研究与设计", 《电子技术应用》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103199871A (zh) * | 2013-02-26 | 2013-07-10 | 无锡飞翎电子有限公司 | 一种控制按键的自适应功能替换的控制方法 |
CN105634503A (zh) * | 2015-12-28 | 2016-06-01 | 北京锦鸿希电信息技术股份有限公司 | 检测键盘键值的方法及装置 |
CN105634503B (zh) * | 2015-12-28 | 2018-07-31 | 北京锦鸿希电信息技术股份有限公司 | 检测键盘键值的方法及装置 |
CN105897276A (zh) * | 2016-03-31 | 2016-08-24 | 上海林果实业股份有限公司 | 一种低功耗按键检测方法及电路 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107800546B (zh) | 一种广播消息的管理方法及装置 | |
US20190258514A1 (en) | I/O Request Scheduling Method and Apparatus | |
CN107273130B (zh) | 加速界面绘制的方法、装置和终端 | |
CN105634502A (zh) | 基于状态机的按键扫描的实现方法 | |
WO2019062460A1 (zh) | 应用控制方法、装置、存储介质以及电子设备 | |
CN105027081B (zh) | 一种轮询和中断的切换方法及装置 | |
CN102262434A (zh) | 基于加速计输出来修改电子设备的转换的方法和装置 | |
CN101840268A (zh) | 一种矩阵键盘的快速扫描定位方法 | |
CN102156584B (zh) | 触摸屏终端及其解决触摸屏死锁的方法 | |
CN102508556A (zh) | 键盘扫描的实现方法 | |
CN107302493B (zh) | 一种消息处理方法、消息处理装置及智能终端 | |
CN103838577A (zh) | 一种突发消息处理方法及终端 | |
CN103106040A (zh) | 移动终端操作方法和使用该方法的装置 | |
CN108833199A (zh) | 数据上报的方法、装置、设备及存储介质 | |
CN105634503B (zh) | 检测键盘键值的方法及装置 | |
CN107861855A (zh) | 一种降低异常耗电的方法、终端、系统及计算机可读存储介质 | |
CN104539557B (zh) | 报文统计上报cpu的方法及装置 | |
WO2011029351A1 (zh) | 嵌入式系统延迟响应解决方法及装置 | |
CN111124519B (zh) | 基于输入响应优化安卓应用程序启动速度的方法及系统 | |
CN101741394B (zh) | 检测按键输入的方法和装置 | |
CN107613090A (zh) | 一种提醒事项的记录方法、移动终端以及存储设备 | |
CN114885018B (zh) | 基于双队列的消息推送方法、装置、设备及存储介质 | |
CN101997777A (zh) | 中断处理方法、装置和网络设备 | |
CN101847132B (zh) | 一种实现串行flash存储器和开关复用i/o线的方法和密钥装置 | |
CN111552589B (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 | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20120620 |