CN106972863A - 一种按键驱动方法及装置 - Google Patents
一种按键驱动方法及装置 Download PDFInfo
- Publication number
- CN106972863A CN106972863A CN201610973237.7A CN201610973237A CN106972863A CN 106972863 A CN106972863 A CN 106972863A CN 201610973237 A CN201610973237 A CN 201610973237A CN 106972863 A CN106972863 A CN 106972863A
- Authority
- CN
- China
- Prior art keywords
- key assignments
- key
- sequence
- button
- press event
- 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
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M11/00—Coding in connection with keyboards or like devices, i.e. coding of the position of operated keys
- H03M11/20—Dynamic coding, i.e. by key scanning
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Input From Keyboards Or The Like (AREA)
Abstract
本发明公开了一种按键驱动方法。包括:按键驱动装置周期性读取输入端接口电平信号,得到键值序列,并将所述键值序列依次存入缓冲区中;再将相邻的两个所述键值序列进行对比,得到按键事件值序列,并依次存入循环存储队列中;按键驱动装置周期性调用所述循环存储队列中的按键事件值序列,并根据所述按键事件值序列驱动对应的函数做出相应的响应。
Description
技术领域
本发明涉及按键驱动领域,特别是涉及一种按键驱动方法及装置。
背景技术
现有的按键驱动方法,通常为周期性扫描并读取输入端的输入输出接口电平信号,并经延时消斗后得到输入端中各个按键的键值,从而得到键值序列并存入缓冲区中,当下一周期扫描按键时,得到的新的键值序列存入缓冲区中并对应覆盖上一次键值序列,应用程序再周期性地读取调用该缓冲区中的键值,根据调用的键值读取相关的函数作出相应的响应。
很显然,在应用程序读取调用该缓冲区中键值的周期内,已扫描到的有效按键在应用程序读取调用前就可能已经消失了,尤其是在多个按键同时按下而应用程序需要响应所有按键的按下或抬起时,在应用程序读取调用键值的周期内,已扫描到的有效按键在应用程序读取调用前可能消失的更多,由于有效按键在应用程序处理前消失,则应用程序处理的按键值存在漏洞,从而导致最后作出的响应存在错误,而这种错误将会对工业生产造成巨大的损失。
发明内容
为解决上述技术问题,本发明一方面提供一种按键驱动方法,包括:
按键驱动装置周期性读取输入端接口电平信号,得到键值序列,并将所述键值序列依次存入缓冲区中;
所述按键驱动装置将每相邻的两个所述键值序列进行对比,得到按键事件值序列,并依次存入循环存储队列中;
所述按键驱动装置周期性调用所述循环存储队列中的按键事件值序列,并根据所述按键事件值序列驱动对应的函数做出相应的响应。
进一步地,所述输入端为行列矩阵键盘。
进一步地,所述将每相邻的两个所述键值序列进行对比后还包括:
周期性更新所述缓冲区中的键值序列。
进一步地,所述周期性更新所述缓冲区中的键值序列具体为:
当所述缓冲区中的键值序列的个数等于3时,依次丢弃最早获得的键值序列。
进一步地,所述将相邻的两个所述键值序列进行对比,得到按键事件值序列,并依次存入循环存储队列中具体为:
将相邻的两个所述键值序列中按序依次进行对比;
当相邻的两个所述键值序列中相同位置处的键值不同时,则判断为所述位置对应的按键弹起或按下;
将所述按键弹起或按下记为按键事件,得到按键事件值序列,并依次存入循环存储队列中。
进一步地,所述循环存储队列的容量为所述输入端中的按键个数的两倍及以上。
进一步地,所述周期性读取的周期时间为1ms~10ms。
进一步地,所述周期性调用的周期时间为1ms~200ms。
本发明另一方面提供一种按键驱动装置,包括:
数据读取和存储单元,用于周期性读取输入端接口电平信号,得到键值序列,并将所述键值序列依次存入缓冲区中;
以及将相邻的两个所述键值序列进行对比,得到按键事件值序列,并依次存入循环存储队列中;
按键驱动单元,用于周期性调用所述按键事件值序列,并根据所述按键事件值序列驱动对应的函数做出相应的响应。
进一步地,所述按键驱动单元,还用于所述并将所述键值序列依次存入缓冲区中后,周期性更新所述缓冲区中的键值序列。
有益效果
本发明提供的一种按键驱动方法及装置,通过周期性地读取输入端接口电平信号而获得键值序列,并将该键值序列依次存入缓冲区中,然后周期性地对相邻的两个键值序列按序进行对比,得到按键事件序列,再将该按键事件序列依次存入到循环存储队列中,通过周期性调用该按键事件序列,应用程序根据该按键事件序列驱动对应的函数作出相应的响应。与现有技术中直接调用缓冲区中的键值相比,本方法可以做到不漏按键状态改变值,保证了物理键盘使用的稳定性。
附图说明
图1为本发明实施例提供的一种按键驱动方法流程图。
图2为本发明实施例提供的一种按键驱动装置示意图。
图3为本发明实施例提供的一种按键驱动方法部分图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
图1为本发明提供的一种按键驱动方法流程图,包括:
步骤101:按键驱动装置周期性读取输入端接口电平信号,得到键值序列,并将所述键值序列依次存入缓冲区中;
其中,输入端可为行列矩阵键盘,键值序列均按照输入端中的按键编号依次排列构成,且由于周期性读取入端接口电平信号,则得到周期性的键值序列,并依次存入缓存区中,其中每一键值序列中的值都存入缓存区中对应位置。具体地,可按照按键编号从大到小或从小到大的顺序排列构成键值序列;电平信号为高电平信号(通常由1表示)时按键处于抬起状态,低电平信号(通常由0表示)时按键处于按下状态。
需要指出的是,由于输入端按键在按下或抬起的一瞬间,机械特性决定了这一瞬间会产生电平波动,即此时电平是不稳定的,需要等待电平达到稳定值时,才能正确读取输入端接口,为此,在输入端接口刚检测到电平变化时,马上读取该电平信号是不准确的,需要从此刻开始,等待几毫秒的消抖时间(消抖时间长短取决于按键特性,例如,普通薄膜按键消抖时间10ms即可),从而读取到可信的电平信号。
步骤102:所述按键驱动装置将每相邻的两个所述键值序列进行对比,得到按键事件值序列,并依次存入循环存储队列中;
具体地,将相邻的两个所述键值序列中按序依次进行对比,即可从上到下或者从下到上依次对比;当相邻的两个所述键值序列中相同位置处的键值不同时,例如,相邻键值序列中任一相同位置处的键值不一致时,则判断为所述位置对应的按键弹起或按下。按以下方式判断抬起或按下:
当上一次键值为1,当前键值为0时,则表明该位置出的按键按下;当上一次键值为0,当前键值为1时,则表明该位置出的按键抬起。
并将按键弹起或按下记为按键事件,得到按键事件值序列,依次存入循环存储队列中,同时并记录相应的按键编号以便应用程序调用。
步骤103:所述按键驱动装置周期性调用所述循环存储队列中的按键事件值序列,并根据所述按键事件值序列驱动对应的函数做出相应的响应。
本发明在另一实施例中,为了减少缓存区的内存量,将每相邻的两个所述键值序列进行对比后还包括:
周期性更新缓冲区中的键值序列。
具体地,如图3所示,以一个按键值为例,当缓冲区中的键值序列的个数等于3时,从左至右依次为最新键值、前一次键值和最早一次键值,当前一次键值和最早一次键值对比之后,依次丢弃最早获得的键值序列,且前一次键值移动至最早一次键值处,最新键值移动至前一次键值处,下一周期扫描的新的键值存入最新键值处,此时前一次键值就成为了最早键值,将最新键值、前一次键值又进行对比,对比之后丢次最早键值,以此类推,持续进行更新。
需要说明的是,当首次获得2个键值序列时,将首次获得的键值序列和第二次获得的键值序列进行一一对比,即是相同位置处进行对比,当获得第三键值时,将第三键值与第二键值进行对比,对比之后将最早获得的键值序列丢弃,并将键值序列依次向右移动。
为了更清楚的描述上述提供的一种按键驱动方法,举个例子,周期性扫描获得某一个按键的前三次(第一次、第二次和第三次)键值分别为1、1、0,获得前两次键值1、1时,将前两次键值进行对比,则该按键没有变化为抬起状态,获得第三次键值0时,将第二次键值1与第三次键值0进行对比,此时键值发生变化,从高电平变成了低电平,则该按键为按下状态,并将变化的状态作为一个按键事件,同理,判断其他按键的变化状态,当电平信号改变时,则为按键事件,每一个周期形成一个按键事件队列,将该按键事件队列依次存入循环队列中,供按键驱动装置根据按键事件值序列驱动对应的函数做出相应的响应。以此类推,继续获得新的键值,第四、第五及其他键值,将第四键值与第三键值进行对比,第五键值与第四键值进行对比,并将对比后的按键事件队列存入循环存储队列中,供按键驱动装置根据按键事件值序列驱动对应的函数做出相应的响应。
优选地,在将第二次键值1与第三次键值0进行对比后,将第一次获得的键值丢弃,并将键值依次向右移动一个位置,即第二键值位于第一键值处,第三键值位于第二键值处,将获得新的键值时,假定第四次键值为0时,位于第三键值处,即是保证缓存区中只有三个键值,可节约缓存区的空间,将第四键值0与第三键值0进行对比,则该按键没有变化,仍然处于按下状态,再丢弃第二次获得的按键,依次类推,获得第五、第六及其他按键,并进行对应的对比,得到按键事件队列,并将按键事件队列存入循环存储队列中,与此同时,依次丢弃最早获得的键值,供按键驱动装置根据按键事件值序列驱动对应的函数做出相应的响应。
应当说明的是,本发明提供的一种按键驱动方法也可以是获得四个按键、五个按键及其以上个数的按键值对比后再丢弃最早获得的键值,上述的最早是相对于缓存区中的键值而言,最右边的键值即为最早的键值!
特别地,循环存储队列的容量可为输入端中的按键个数的两倍及以上。
优选地,所述周期性读取的周期时间为1ms~10ms。
优选地,所述周期性调用的周期时间为1ms~200ms。
对应于本发明提供的一种按键驱动方法,本发明还提供一种按键驱动装置,如图2所示包括:
数据读取和存储单元201,用于周期性读取输入端接口电平信号,得到键值序列,并将所述键值序列依次存入缓冲区中;以及将相邻的两个所述键值序列进行对比,得到按键事件值序列,并依次存入循环存储队列中;
其中,输入端可为行列矩阵键盘,键值序列均按照输入端中的按键编号依次排列构成。具体地,可按照按键编号从大到小或从小到大的顺序排列构成键值序列;电平信号为高电平信号(通常由1表示)时按键处于抬起状态,低电平信号(通常由0表示)时按键处于按下状态。
具体地,数据读取和存储单元201读取输入端接口电平信号,并按序得到键值序列,由于周期性读取则得到周期性的键值序列。
将相邻的两个所述键值序列中按序依次进行对比,即可从上到下或者从下到上依次对比;当相邻的两个所述键值序列中相同位置处的键值不同时,例如,相邻键值序列中任一相同位置处的键值不一致时,则判断为所述位置对应的按键弹起或按下。按以下方式判断抬起或按下:
当上一次键值为1,当前键值为0时,则表明该位置出的按键按下;当上一次键值为0,当前键值为1时,则表明该位置出的按键抬起。
并将按键弹起或按下记为按键事件,得到按键事件值序列,依次存入循环存储队列中,同时并记录相应的按键编号以便应用程序调用。
按键驱动单元202,用于周期性调用所述按键事件值序列,并根据所述按键事件值序列驱动对应的函数做出相应的响应。
对应于本发明的另一实施例,为了减少缓存区的内存量,将键值序列依次存入缓冲区中后还包括:按键驱动单元202还用于周期性更新缓冲区中的键值序列。
具体地,如图3所示,以一个按键值为例,当缓冲区中的键值序列的个数等于3时,从左至右依次为最新键值、前一次键值和最早一次键值,当前一次键值和最早一次键值对比之后,依次丢弃最早获得的键值序列,且前一次键值移动至最早一次键值处,最新键值移动至前一次键值处,下一周期扫描的新的键值存入最新键值处,此时前一次键值就成为了最早键值,将最新键值、前一次键值又进行对比,对比之后丢次最早键值,以此类推,持续进行更新。
由此可以看出,对所有数值按键序列都进行了对比,然后再存入循环存储队列中,不会漏掉每一次扫描后的所有按键的物理键值,也就不会漏掉由物理键值转换成的数值键值,通过扫描循环存储队列中的状态变化值序列,即可完成对硬件键盘上的所有按键进行相应的驱动操作,保证了该硬件键盘使用的稳定性。
以上是对本发明所提供的一种按键驱动方法及装置进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
Claims (10)
1.一种按键驱动方法,其特征在于,所述方法包括:
按键驱动装置周期性读取输入端接口电平信号,得到键值序列,并将所述键值序列依次存入缓冲区中;
所述按键驱动装置将每相邻的两个所述键值序列进行对比,得到按键事件值序列,并依次存入循环存储队列中;
所述按键驱动装置周期性调用所述循环存储队列中的按键事件值序列,并根据所述按键事件值序列驱动对应的函数做出相应的响应。
2.根据权利要求1所述的按键驱动方法,其特征在于,所述输入端为行列矩阵键盘。
3.根据权利要求1所述的按键驱动方法,其特征在于,所述将每相邻的两个所述键值序列进行对比后还包括:
周期性更新所述缓冲区中的键值序列。
4.根据权利要求3所述的按键驱动方法,其特征在于,所述周期性更新所述缓冲区中的键值序列具体为:
当所述缓冲区中的键值序列的个数等于3时,依次丢弃最早获得的键值序列。
5.根据权利要求1所述的按键驱动方法,其特征在于,所述将相邻的两个所述键值序列进行对比,得到按键事件值序列,并依次存入循环存储队列中具体为:
将相邻的两个所述键值序列中按序依次进行对比;
当相邻的两个所述键值序列中相同位置处的键值不同时,则判断为所述位置对应的按键弹起或按下;
将所述按键弹起或按下记为按键事件,得到按键事件值序列,并依次存入循环存储队列中。
6.根据权利要求1所述的按键驱动方法,其特征在于,所述循环存储队列的容量为所述输入端中的按键个数的两倍及以上。
7.根据权利要求1所述的按键驱动方法,其特征在于,所述周期性读取的重复时间为1ms~10ms。
8.根据权利要求1所述的按键驱动方法,其特征在于,所述周期性调用的重复时间为1ms~200ms。
9.一种按键驱动装置,其特征在于,包括:
数据读取和存储单元,用于周期性读取输入端接口电平信号,得到键值序列,并将所述键值序列依次存入缓冲区中;
以及将相邻的两个所述键值序列进行对比,得到按键事件值序列,并依次存入循环存储队列中;
按键驱动单元,用于周期性调用所述按键事件值序列,并根据所述按键事件值序列驱动对应的函数做出相应的响应。
10.根据权利要求9所述的按键驱动装置,其特征在于,所述按键驱动单元,还用于所述并将所述键值序列依次存入缓冲区中后,周期性更新所述缓冲区中的键值序列。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610973237.7A CN106972863A (zh) | 2016-10-31 | 2016-10-31 | 一种按键驱动方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610973237.7A CN106972863A (zh) | 2016-10-31 | 2016-10-31 | 一种按键驱动方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106972863A true CN106972863A (zh) | 2017-07-21 |
Family
ID=59334306
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610973237.7A Pending CN106972863A (zh) | 2016-10-31 | 2016-10-31 | 一种按键驱动方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106972863A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109814735A (zh) * | 2019-01-25 | 2019-05-28 | 山东超越数控电子股份有限公司 | 按键弹起后的键值发送处理方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS62144220A (ja) * | 1985-12-18 | 1987-06-27 | Matsushita Electric Ind Co Ltd | 静電容量式キ−ボ−ドスイツチ |
CN1547691A (zh) * | 2001-07-27 | 2004-11-17 | 数字无线有限责任公司 | 具有单独的和组合的按键输出的键盘 |
CN1953334A (zh) * | 2006-11-17 | 2007-04-25 | 北京中星微电子有限公司 | 一种扫描键盘的方法和系统 |
CN105071816A (zh) * | 2015-08-12 | 2015-11-18 | 长沙市博巨兴电子科技有限公司 | 一种高效率快速按键扫描方法 |
CN205490496U (zh) * | 2016-01-05 | 2016-08-17 | 湖南工业大学 | 一种矩阵式键盘操作识别及编码电路 |
-
2016
- 2016-10-31 CN CN201610973237.7A patent/CN106972863A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS62144220A (ja) * | 1985-12-18 | 1987-06-27 | Matsushita Electric Ind Co Ltd | 静電容量式キ−ボ−ドスイツチ |
CN1547691A (zh) * | 2001-07-27 | 2004-11-17 | 数字无线有限责任公司 | 具有单独的和组合的按键输出的键盘 |
CN1953334A (zh) * | 2006-11-17 | 2007-04-25 | 北京中星微电子有限公司 | 一种扫描键盘的方法和系统 |
CN105071816A (zh) * | 2015-08-12 | 2015-11-18 | 长沙市博巨兴电子科技有限公司 | 一种高效率快速按键扫描方法 |
CN205490496U (zh) * | 2016-01-05 | 2016-08-17 | 湖南工业大学 | 一种矩阵式键盘操作识别及编码电路 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109814735A (zh) * | 2019-01-25 | 2019-05-28 | 山东超越数控电子股份有限公司 | 按键弹起后的键值发送处理方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101840268B (zh) | 一种矩阵键盘的快速扫描定位方法 | |
CN1266914C (zh) | 蜂窝电话机 | |
DE112011103202T5 (de) | Tragbare elektronische Vorrichtung und Verfahren zu deren Steuerung | |
CN103488400A (zh) | 一种虚拟键盘的构建方法及装置 | |
DE112007000122T5 (de) | Tastaturen für tragbare elektronische Vorrichtungen | |
KR20150082384A (ko) | 제스처 중복 키들이 제거된 키보드 | |
CN102498674A (zh) | 便携式终端的输入方法和输入设备 | |
US20040135823A1 (en) | User input device | |
CN101923546A (zh) | 对文件夹内的图像文件进行播放的方法及系统 | |
CN106972863A (zh) | 一种按键驱动方法及装置 | |
CN102135808B (zh) | 一种输入方式的切换方法及装置 | |
US20110239152A1 (en) | Direction-based data entry system | |
CN103677596A (zh) | 图形使用者界面的显示方法及使用该方法的电子装置 | |
CN110502165B (zh) | 快速移动多个app图标的方法 | |
JP4885817B2 (ja) | 文字入力装置 | |
CN1795661B (zh) | 利用小型键盘输入字母的设备和方法 | |
CN102118494B (zh) | 一种虚拟键盘显示的手机 | |
CN112306330B (zh) | 一种应用于起重机操作手柄的多级菜单操作系统的构建 | |
CA2791589C (en) | Keyboards and method of manufacturing same | |
KR101096655B1 (ko) | 터치스크린을 이용한 영문자 입력방법 | |
CN104267852A (zh) | 用户接口设备及其控制方法 | |
KR20100128164A (ko) | 단축기능 사용자 인터페이스를 제공하는 방법, 단말기 및 기록매체 | |
CN106406717A (zh) | 一种屏幕调整方法及装置 | |
JP4735266B2 (ja) | 円形入力デバイスを利用した文字入力装置、方法、プログラム及び携帯電話機 | |
CN113407292B (zh) | Ui数据处理系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170721 |