CN1770637B - 带按键去反跳功能的按键检测方法和系统 - Google Patents
带按键去反跳功能的按键检测方法和系统 Download PDFInfo
- Publication number
- CN1770637B CN1770637B CN200510108923.XA CN200510108923A CN1770637B CN 1770637 B CN1770637 B CN 1770637B CN 200510108923 A CN200510108923 A CN 200510108923A CN 1770637 B CN1770637 B CN 1770637B
- Authority
- CN
- China
- Prior art keywords
- button
- user
- key
- exciting
- definable
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims description 40
- 238000001514 detection method Methods 0.000 title claims description 23
- 238000012360 testing method Methods 0.000 claims abstract description 46
- 230000004913 activation Effects 0.000 claims abstract description 14
- 238000003860 storage Methods 0.000 claims description 4
- 238000007689 inspection Methods 0.000 claims description 3
- 239000011159 matrix material Substances 0.000 description 17
- 238000010586 diagram Methods 0.000 description 15
- 238000003825 pressing Methods 0.000 description 8
- 238000006243 chemical reaction Methods 0.000 description 6
- 230000007704 transition Effects 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 238000001914 filtration Methods 0.000 description 4
- 206010047571 Visual impairment Diseases 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 230000000994 depressogenic effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000005096 rolling process Methods 0.000 description 2
- 239000013078 crystal Substances 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
Images
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/02—Input arrangements using manually operated switches, e.g. using keyboards or dials
- G06F3/023—Arrangements for converting discrete items of information into a coded form, e.g. arrangements for interpreting keyboard generated codes as alphanumeric codes, operand codes or instruction codes
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Input From Keyboards Or The Like (AREA)
Abstract
一种带按键去反跳功能的按键检测系统,包括用于检测按键激活的电路;与所述电路连接的第一计数器和时钟,用于在第一用户可定义数量的时钟周期内测试所述按键激活;按键去反跳缓冲器,用于在第一用户可定义数量的时钟周期数内所述按键激活为有效时存储识别已激活按键用的按键索引;第二计数器,用于在第一用户可定义数量的硬件按键扫描周期内测试被识别的已激活按键;按键事件缓冲器,用于在第一用户可定义硬件扫描周期内所述按键激活为有效时存储按键激活事件。
Description
技术领域
本发明总地涉及电子电路,更具体地涉及一种高性能按键去反跳校正方法和系统。
背景技术
含有机械按键的用户输入设备经常遇到由于按键去反跳引起的错误。按键去反跳通常由按键的机械反跳引起,它会在按键信号中产生干扰,这样下去可能导致按键的错误检测。例如,只按下一次的按键可能会产生按键去反跳,这可能导致键盘控制器以为相同的键按了两次。另一种情况就是,按键去反跳可能导致键盘控制器以为该键根本没有按下。
按键去反跳校正电路能够阻止键盘中按下的按键反跳时出现的不希望有的两次输入(或者缺少输入)。但是,传统的按键去反跳系统是在固件中实现的,并且它们依赖于处理器的指令周期。这些系统相对比较慢,并且可能会占用处理器的执行时间。此外,由于现有的系统依赖于处理器的指令周期,其时限无法统一且不可预测。
因此,就需要一种基于硬件的高性能的按键去反跳校正方法和系统。
发明内容
本发明提供一种高性能的按键去反跳校正方法和系统。
一个实施例中,本发明提供了一种带按键去反跳功能的按键检测方法,所述方法包括:检测按键激活;在用户可定义数量的时钟周期内测试所述按键激活;若在用户可定义数量的时钟周期内所述按键激活是有效的,存储能识别已激活按键的按键索引至一缓冲器中;在用户可定义数量的硬件按键扫描周期内测试被识别的已激活按键;若在用户可定义数量的硬件按键扫描周期内所述按键激活是有效的,建立一按键激活事件。
一个实施例中,本发明提供了一种带按键去反跳功能的按键检测系统,所述系统包括:用于检测按键激活的电路;与所述电路连接的第一计数器和时钟,用于在第一用户可定义数量的时钟周期内测试所述按键激活;按键去反跳缓冲器,用于在第一用户可定义数量的时钟周期内所述按键激活为有效时存储识别已激活按键用的按键索引;第二计数器,用于在第一用户可定义数量的硬件按键扫描周期内测试被识别的已激活按键;按键事件缓冲器,用于在第一用户可定义硬件扫描周期内所述按键激活为有效时存储按键激活事件。
一个实施例中,本发明提供了一种检测按键的系统,所述系统包括:检测按键激活的装置;在用户可定义数量的时钟周期内测试所述按键激活的装置;在用户可定义数量的时钟周期内所述按键激活为有效时,在用户可定义数量的硬件按键扫描周期内测试已测试的激活按键的装置;在用户可定义数量的硬件按键扫描周期内所述按键激活为有效时建立按键激活事件的装置。
根据本发明的一个方面,提供了一种带按键去反跳功能的按键检测方法,所述方法包括:
检测按键激活;
在用户可定义数量的时钟周期内测试所述按键激活;
若在用户可定义数量的时钟周期内所述按键激活是有效的,存储能识别已激活按键的按键索引至一缓冲器中;
在用户可定义数量的硬件按键扫描周期内测试被识别的已激活按键;
若在用户可定义数量的硬件按键扫描周期内所述按键激活是有效的,建立一按键激活事件。
优选地,所述方法进一步包括:
检测按键释放;
在用户可定义数量的时钟周期内测试所述按键释放;
若在用户可定义数量的时钟周期内所述按键激活是有效的,在用户可定义数量的硬件按键扫描周期内测试所述按键释放;
若在用户可定义数量的硬件按键扫描周期内所述按键释放是有效的,建立一按键释放事件。
优选地,所述方法进一步包括:对每个硬件按键扫描周期增加一个用户可定义时间延迟。
优选地,所述时钟周期与系统时钟周期有关。
优选地,所述按键激活是键盘上按下的按键、鼠标的移动、操纵杆的移动以及感应事件中的一个或者多个。
优选地,所述用于测试按键激活的用户可定义数量的硬件按键扫描周期与用于按键释放的用户可定义数量的硬件按键扫描周期相同。
优选地,所述用于测试按键激活的用户可定义数量的硬件按键扫描周期与用于按键释放的用户可定义数量的硬件按键扫描周期不同。
根据本发明的一个方面,提供了一种带按键去反跳功能的按键检测系统,所述系统包括:
用于检测按键激活的电路;
与所述电路连接的第一计数器和时钟,用于在用户可定义数量的第一时钟周期内测试所述按键激活;
按键去反跳缓冲器,用于在用户可定义数量的第一时钟周期内所述按键激活为有效时存储识别已激活按键用的按键索引;
第二计数器,用于在用户可定义数量的第一硬件按键扫描周期内测试被识别的已激活按键;
按键事件缓冲器,用于在用户可定义数量的第二硬件按键扫描周期内所述按键激活为有效时存储按键激活事件。
优选地,所述电路检测按键释放;所述第一计数器在用户可定义数量的第二时钟周期内测试所述按键释放;在用户可定义数量的第二时钟周期内所述按键激活为有效时,所述第二计数器在用户可定义数量的第二硬件按键扫描周期内测试所述按键释放;在用户可定义数量的第二硬件按键扫描周期内所述按键释放为有效时,所述按键事件缓冲器存储按键释放事件。
优选地,所述按键检测系统对每个硬件按键扫描周期增加一个用户可定义时间延迟。
优选地,所述时钟周期与系统时钟周期有关。
优选地,所述按键激活是键盘上按下的按键、鼠标的移动、操纵杆的移动以及感应事件中的一个或者多个。
优选地,所述用于测试按键激活的第一和第二用户可定义数量的硬件按键扫描周期与用于按键释放的第一和第二用户可定义数量的硬件按键扫描周期相同。
优选地,所述用于测试按键激活的第一和第二用户可定义数量的硬件按键扫描周期与用于按键释放的第一和第二用户可定义数量的硬件按键扫描周期不同。
优选地,所述第一计数器是加/减计数器。
优选地,所述第二计数器是加/减计数器。
根据本发明的一个方面,提供了一种检测按键的系统,所述系统包括:
检测按键激活的装置;
在用户可定义数量的时钟周期内测试所述按键激活的装置;
在用户可定义数量的时钟周期内所述按键激活为有效时,在用户可定义数量的硬件按键扫描周期内测试被按键索引识别的已激活按键的装置;
在用户可定义数量的硬件按键扫描周期内所述按键激活为有效时建立按键激活事件的装置。
优选地,所述系统进一步包括:
检测按键释放的装置;
在用户可定义数量的时钟周期内测试所述按键释放的装置;
在用户可定义数量的时钟周期内所述按键激活为有效时,在用户可定义数量的硬件按键扫描周期内测试所述按键释放的装置;
在用户可定义数量的硬件按键扫描周期内所述按键释放为有效时建立按键释放事件的装置。
优选地,所述系统进一步包括对每个硬件按键扫描周期增加一个用户可定义时钟延迟的装置。
优选地,所述时钟周期与系统时钟周期有关。
附图说明
图1是一台个人计算机和一个输入设备组成的系统的示意图;
图2是根据本发明一个实施例的键盘矩阵的结构方框示意图;
图3是根据本发明一个实施例与按键矩阵扫描电路相连的键盘开关矩阵的示意图;
图4是根据本发明一个实施例的键盘扫描电路的时序示意图;
图5是分别对应中止屏蔽(break-masking)法、开始屏蔽(make-masking)法和混合方法的时序示意图;
图6A是根据本发明一个实施例的微去反跳操作的时序示意图;
图6B是根据本发明一个实施例的微去反跳按键检测的时序示意图;
图7是根据本发明一个实施例的去反跳缓冲器的示意图;
图8是根据本发明一个实施例的按键事件缓冲器的示意图。
具体实施方式
一个实施例中,本发明提供了一种用于硬件实现的开关去反跳电路校正按键机械反跳的方法和装置。所述去反跳电路提供了有效的功率/性能设计,甚至适用于无线输入设备。一个实施例中,所述按键去反跳分为两个操作:微去反跳(micro-debounce)和大规模去反跳(macro-debounce)。微去反跳是按键按下事件中的一个初级滤波机制。该操作将按键下按过程中可能发生的短期事件滤除。一旦按键激活被检测,在随后的几个周期中,基于寄存器中的一个确定值,该按键激活被再次测试。一旦符合微去反跳条件,按键状态被移到按键缓冲器中,以便进行大规模去反跳操作。大规模去反跳在(用户可定义的)多个硬件按键扫描周期内检查按键是否满足去反跳的要求。
虽然本说明利用键盘和鼠标作为输入设备,但下面描述的实施例并不限于键盘和鼠标。包括有机械按键的其他输入设备,比如头戴式耳机、游戏控制器、麦克风、传感器等,都属于本发明的范围。本申请中,术语“按键”一般用做由用户激活的输入设备。例如,如果是鼠标或者游戏控制器的话,按键激活则是鼠标或者操纵杆的移动。如果为头戴式耳机、麦克风或者传感器,按键激活则是声音或者感应到的事件。
图1是根据本发明一个实施例的个人计算机(PC)主机106和输入设备(例如键盘108)组成的系统的示意图,其包括有无线或者有线(或者二者都有)接口和检测装置。
图2是根据本发明一个实施例与一个接口设备(如集成电路202)配合的键盘矩阵203的结构示意图。如图2所示,接口设备202为按键扫描矩阵203服务,提供来自键盘的输入。接口设备202和晶振206、EEPROM 208及天线216相连。指示器205包括有数字、大写字母和滚动光,显示在键盘上。接口设备202包括一个处理器,通过键盘矩阵203检测和控制按键。
图3是与按键矩阵扫描电路302相连的键盘开关矩阵1102的示意图。键盘矩阵1102包含多个列1108和多个行1106。在图3中所示的具体实施例中,多个列1108包含C0-C5六列,多个行1106包含R0-R3四行。为简便起见,图3的实施例中仅显示了实际键盘矩阵的很小一部分。本领域的一般技术人员可知,行和列的数目可根据具体的应用而增加或者减少。
当用户按下相应的按键时,多个开关1110连接对应的行和列。在本实施例中,当开关1110按下时,开关1110连接行R0和列C0。虽然没有为每个开关给出标示数字,应该可以理解图3中总共有24个开关1110连接彼此相交的行和列。为了便于讨论,将图3中所示的24个开关1110表示为开关1、开关2……和开关24。当某一特定行内对应的开关全部打开时,该行被与Vdd相连的电阻1112拉为“高”。行R0-R3为按键矩阵扫描电路302中的行解码器1120提供输入,这一点将在下面进行详细的论述。
按键矩阵扫描电路302包括列/行控制逻辑1114和驱动逻辑1115,产生适当的信号以控制相应列和行的状态.驱动逻辑1115包含一个三态驱动器1116和一个缓冲器1118.列/行控制逻辑1114产生合适的“高”和“低”信号,并将这些信号提供给三态驱动器1116的输入端.列/行控制逻辑能产生合适的“使能”信号改变特定行或列的状态,以控制控制逻辑1115中的三态驱动器1116的操作.
例如,如果三态驱动器1116的输入为“高”,产生的使能信号致使三态驱动器1116输出“高”信号,以驱动列或者行为“高”。相反的,如果输入给三态驱动器1116的信号为“低”,产生的使能信号致使三态驱动器将列或者行驱动为“低”。该使能信号可为全局使能信号,为所有行启动三态驱动器,例如ENB_R,或者为所有列启动三态驱动器,例如ENB_C。该使能信号还可以为特定的行启动三态驱动器,例如ENB_R1,或者为特定的列启动三态驱动器,例如ENB_C3。
按键矩阵扫描电路302还包含行解码器1120和列解码器1122,对从键盘矩阵1102中对应的行和列接收的输出信号进行解码。来自行解码器1120和列解码器1122中的解码输出信号提供给扫描逻辑1124,以生成数据流指示不同开关(按键)1110的状态。
按键矩阵扫描电路302还包括一个开关转换检测电路1126,接收来自行解码器1120和列解码器1122的输出信号。开关转换检测电路1126与如下所述扫描各行和列的扫描逻辑1124通信连接。此外,开关转换检测电路1126生成一“输入/输出有效(I/O Active)”信号,并提供给输入/输出单元306(图3中所示),以使系统转换到如上所述的“忙”模式。一个实施例中,开关转换检测电路1126包括有一个硬件开关去反跳电路,用于校正按键的机械反跳。该去反跳电路提供了有效的功率/性能设计,甚至适用于无线输入设备。
键盘扫描电路的操作可以参照图4的时序图来进行理解。参照图4,所有行和列的初始状态的分析从“就绪(ready)”参考线开始。处理开始时,提供向“就绪”参考线左方的转换,以分清行和列的“高”或者“低”状态。从“准备”参考点开始,ENB_C为高(有效),所有的列都被三态驱动器1116驱动为低,而所有的行都被图3中所示的电阻1112拉为高。
例如,若开关(按键)#9被按下,R0从“高”变为“低”,这一转换被用作触发信号以锁存(存储)所有列的值。这一转换还促使ENB_C从“高”转为“低”。由于ENB_C为“低”,所有的列不再被驱动,因此,R0变回“高”。列C2的线电容和电阻1112的电阻电容乘积(RC)常数使得R0回到“高”的实际转换被稍微延迟。由于开关#9还仍处于按下状态,列C2变为“高”。列C2从“低”到“高”的转换被用作触发信号以锁存所有列的值。列的值被锁存后,ENB_C从“低”变为“高”,列C2从“高”变为“低”。所有其他的列仍保持在“低”状态,因为ENB_C目前为高(有效)。
在图4所示的实施例中,有一个高的锁存列值(C2)和一个低的锁存行值(R0)。一个锁存列和一个锁存行唯一地确定一个按键开关(开关#9),因此,没必要进入对其他的行和列的“扫描”。因而在整个周期中扫描信号一直保持“低”。列/行控制逻辑1114结合驱动器逻辑1115产生控制上述的状态转换所需的所有信号。
此外,开关转换检测电路1126可根据接收自行解码器1120和/或列解码器1122的输出信号,为输入/输出单元(图中没有示出)即时生成一个“输入/输出有效”信号,指出一个开关被激活。在本实施例中,所述的“输入/输入有效”信号由开关转换检测电路1126直接根据对因开关行#9被激活而导致的R0从“高”到“低”转换的检测即时生成。
一个实施例中,硬件开关去反跳电路校正按键的机械反跳。有多种途径来实现去反跳的性能,包括:中止屏蔽(break-masking),开始屏蔽(make-masking)和两种途径的混合。图5描述的是上述各种去反跳方法的时序图。
图5中的符号定义如下:
TDB=去反跳间隔
TFPM=第一按键按下开始的时间
TLPM=最后按键按下开始的时间
TFRB=第一按键释放中止的时间
TLRB=最后按键释放中止的时间
如图所示,采用中止屏蔽方法时,如果按下某个按键(即“开始(make)”被检测),即马上注册为一个有效的按键按下。如果机械反跳导致短期间内开关是打开的(即“中止(break)”的情况),去反跳算法将继续报告该开关在与TDB相等的期间内仍然是关闭的,从而“屏蔽”中止。然后,只要有屏蔽的情况出现,测量TDB的计时器(如计数器)都须复位。这种方法类似于很多微控制器的复位线中的电阻-电容方法,其中的TDB相当于电阻电容乘积时间常数。
这种方法中,在尽可能早的时间对按键关闭进行报告,报告的按键关闭总时长为(TLRB-TFPM)+TDB。
采用开始屏蔽方法时,如果有按键被按下,直到检测到周期大于TDB的一直持续的“开始”,才被注册为有效的按键按下。因此,持续期间内的任何小于TDB的“开始”期间都被屏蔽。按键释放时,第一中止导致该按键被报告为被释放,任何后续的小于TDB的“开始”都将被屏蔽。这种方法中,报告的按键关闭总时间为(TFRB-TLPM)-TDB,小于TDB的“开始”期间被完全屏蔽。
采用混合方法时,开始屏蔽方法用于检测键按下的开始。一旦检测到按键确实被按下,将使用中止屏蔽方法来确定按键是否被释放。按键压下检测和按键释放检测时将使用不同的TDB。这种方法中,在尽可能早的时间报告按键关闭,因而报告的按键关闭总时间是(TLRB+TDB2)-(TLPM+TDBI),小于TDB1的“开始”期间被完全屏蔽。
一般来说,中止屏蔽方法同时简化了去反跳和消重像的实现。由于及时的报告了“开始”,因而无需缓冲按键按下,为随后测定按键是否按下提供了足够的时间。此外,虽然中止屏蔽方法或者混合方法要求对按键进行缓冲和做时间标记,直到按键被按下足够长的时间,才进入重像检测算法,但是在所有行和列的每个完整扫描的末端,都能够及时地检测重像。
以下将介绍中止屏蔽方法中各元件的寄存器转换语言(RTL)描述。本领域的一般技术人员很容易理解并实现用于开始屏蔽方法和混合方法的寄存器转换语言描述。
注释:
+=Logical OR
*=Logical AND
SSM[1:0]=Scan State Machine
RTC[2:0]=Row terminal count-control register
CTC[4:0]=Column terminal count-control register
MKYVn[7:0]=Nth Modifier Key Value
S0=Idle State
S1=Scan State
S2=De-Ghost State
S3=Store-to-Buffer State
SEFF=Scan Enable Flip-Flop
KI=Key Index Counter
1)3-bit Row Counter(RC):to count 8 column inputs
Sync Reset:((SSM=S0)+(RC=RTC))
Increment:(SSM=S1)
2)5-bit Column Counter(CC):to count 19 row outputs
Sync Reset:(SSM=S0)
Increment:(RC=RTC)
3)8-bit″RowHit″register (RH):to record row-hits ascolumnsare scanned
For each Nth bit:
Sync Reset:(SSM=S0)-Unnecessary,as each bit is
set/cleared as column is scanned
Load:(RC=<Nth bit>)
Inputs:RH[N]+KSI(N]
4)8-bit″Single-Hit″register(SH):to record hits in columnswith only 1 key down
For each Nth bit:
Sync Reset:(SSM=S0)
Load:(RC=0)-note 1 cycle pipe-lining-SH takes RH onecycle later
Inputs:SH[N]+RH[N]
5)8-bit″Multi-Hit″register(MH):to record hits in columnswith 2 or more keys down
For each Nth bit:
Sync Reset:(SSM =S0)
Load:(RC=0)-note 1 cycle pipe-lining-MH takes RH onecycle later
Inputs:MH[N]+RH[N]
6)8-bit key-index counter(KI):incremented at each key-scan,for usage code lookup
Sync Reset:(SSM=S0)
Increment:(SSM=S1)
7)Scanning State Machine(SSM):
Async Reset:POR
Input(next state):
S0 if SEFF=0+(SSM=S3*RH!=0)
S1 If SSM=S0*SEFF=1
S2 if SSM=S1*(CC=CTC)*(RC=RTC)
S3 if SSM=S2
6-byte buffer
For each single-byte key buffer,KB[N]:
Sync Reset:(SSM=S0)(Reset to all 1′s)
Load:(NewKey!=KB[N]*NewKey!=MDKY[N])for all N
(Store NewKey to beginning of buffer if not already inbuffer)
Inputs:KB[N-1]for KB[N]where N>0;NewKey value forKB[0]
For each debounce count value,DBCV[N]:
Load:(NewKey!=KB[N]*NewKey!=MDKY[N])for all N OR
8)Scan-clock enable flip-flop-1-bit to enable low-poweroscillator
Async Set:Logical OR of pulse detects on each Wake signalfrom each periphera l
Async Reset:POR+(AND of all~BUSY signals fromperipherals)
Sync Reset:
9)KSO:Key scan outputs
KSI[N]=1 if SSM=S0+
KSI_OE[N]=SSM=S0*N!=RC
一个实施例中,本发明采用用于微去反跳按键检测的各种综合方法的硬件实现。也就是说,本发明的微去反跳方法对按键压下(在预定的时钟周期数内)和按键释放(在预定的时钟周期数内)事件均能检测。一旦微去反跳操作检测到某个按键被按下,就对该按键执行大规模去反跳,以确定该按键是否应识别为被激活的按键。
因此,本发明的按键去反跳操作被分为两步:微去反跳操作和大规模去反跳操作。微去反跳按键检测是对基于硬件系统时钟的按键按下(如向下)事件做的基于硬件的初级滤波,用于滤除比如在电子快速转换(EFT)事件中出现的短期事件。一旦检测到按键按下,在随后的几个时钟周期中,根据在u_debounce[1:0]寄存器中定义的值对按键按下再次进行测试。
图6A是微去反跳步骤的时序示意图。如图所示,当按键A在时刻td按下时,一个系统时钟(SCK)周期后将检测到按键的激活,如果u_debounce寄存器编程为具有值1,也就是在时刻t1。类似地,如果u_debounce寄存器编程设置值为2,两个系统时钟周期(t2)后,将检测到按键的激活。相反地,当在时刻tu释放按键A,一个(完整的)系统时钟周期后,也就是如果u_debounce寄存器编程设置值为1,在时刻t3,检测到按键的释放。可选择地,如果u_debounce寄存器编程设置值为2,两个系统时钟周期后,在时刻t4检测到按键的释放。一个实施例中,根据系统的要求,可使用两个u_debounce寄存器,具有不同的值分别用于按键按下和释放时的微去反跳操作。
一个实施例中,u_debounce寄存器被定义为:
u_debounce[1:0]=0->check key down(&up)for 1 cycle.
u_debounce[1:0]=1->check key down(&up)for 2 cycle.
u_debounoe[1:0]=2->check key down(&up)for 3 cycle.
u_debounce(1:0]=3->check key down(&up)for 4 cycle.
一旦满足微去反跳的条件,按键状态被存入按键去反跳缓冲器,以便进行基于硬件的大规模去反跳操作。大规模去反跳操作在多个(用户可定义的)硬件按键扫描周期内检查按键是否满足去反跳的要求。因此,大规模去反跳操作是基于硬件按键扫描周期的,而硬件按键扫描周期又是基于系统周期的。
一个实施例中,硬件按键扫描周期被定义为:
Time for scanning all(e.g.,8x20)keys+Time duration ofthe scancycle_timer[11:0]+(# of key pressed *u_debounce+1)/SCK
扫描所有按键(例如8×20)的时间+scancycle_timer[11:0]的持续时间+(按下键的号#×u_debounce+1)/SCK。
对高性能键盘来说,要求高速的按键检测,扫描周期计时器(scancycle_timer)可以设置为0,这样的话去反跳时间间隔定义如下:
u_debounce*total#of keys/128K
只有被检测到“按下”的按键才会在进行u_debounce次测试。这样,如果在该周期内按键被按下,则硬件按键扫描周期将更长一些。例如,对一个8×20的矩阵来说,u_debounce=2,扫描周期计时器=0,硬件去反跳时间间隔将为(8*20+3)/SCK=1.27ms,基于以上等式,SCK频率为128KHz。
在某些情况下,根据按键开关机械反跳的特性,单个的按键按下事件会被误认为多个按键按下事件。扫描周期计时器用于隔开硬件扫描活动,以便上述的错误情况将尽可能少发生。操作中,为了更有效地检测按键按下事件,扫描周期计时器可被编程为对每个硬件扫描周期增加一个额外的(用户可编程的)延时。
图6B是具有或者不具有扫描周期计时器的大规模去反跳按键检测的时序示意图。如图所示,若扫描周期计时器=0,三个硬件按键扫描周期(maD_debounce=3)后,大规模去反跳按键按下被检测。大规模去反跳按键弹起(释放)也在三个硬件按键扫描周期(maU_debounce=3)后被检测。maD_debounce和maU_debounce的值可以不同。如果扫描周期计时器=Δt,则在每个硬件按键扫描周期的末端都加上一个延时Δt。
图7是根据本发明一个实施例的去反跳缓冲器的示意图。已满足微去反跳按下条件的按键状态存储在(比如13x10)去反跳缓冲器中,以便进一步检测大规模去反跳。如图所示,去反跳缓冲器的每条记录都包括一个8位的按键索引、一个4位的加/减大规模去反跳计数器(macro_debounce_cntr)和一个用于指示存储在特定按键索引字段内的按键上是否在执行弹起和按下去反跳操作的数据位。
一个实施例中,去反跳缓冲器的每个记录定义如下:
bit 12:”0”key in down detection;”1”key in up detection;
bit 11-8:key macro-debounce counter;an up/down counter;
bit 7-0:key index.
无论是否有按键按下,在每个按键矩阵扫描期间,最好都对u_debounce缓冲器进行去反跳条件检查。
图8是根据本发明一个实施例的按键事件缓冲器的示意图.如图所示,按键索引“A”有两个记录.当按键“A”的大规模去反跳按键按下事件被检测时,存储在按键事件缓冲器内的按键索引在UP/DN字段为“0”.然后检测该按键的“高”转换,即按键释放检测.当满足按键释放的微去反跳检测条件后,执行微去反跳检测以检测按键“A”的释放.一旦满足按键释放的大规模去反跳检测后,按键索引再次存入按键事件缓冲器中,UP/DN字段值为“1”.
一个实施例中,在逐排硬件扫描周期中,当按键不能通过大规模去反跳条件时,大规模去反跳计数器复位为“0”。例如,如果maD_debounce[3:0]=3,检测到的按键操作为按下、按下、弹起、按下、按下、按下,则maD_debounce计数器中的值为:1,2,0,1,2,3。在计数到3时,按键值被复制到按键事件缓冲器。
一个实施例中,按键事件缓冲器的每个记录定义如下:
bit 8:set to 0 for the key down indication;1 for key up indication;
bit 7-0:key index
下面的实施例将说明按键去反跳操作是如何进行的。当有按键按下时,将执行微去反跳操作。经微去反跳操作限制后,将对按键进行由按键按下大规模去反跳寄存器(maD_debounce[3:0])所定义的大规模去反跳条件测试。如果在“maD_debounce”个连续的硬件扫描周期内检测到一个按键,则其将被移入(例如12×9)按键事件缓冲器中,以便输入设备固件(运行在如图2所示的接口设备202的处理器中)进行访问。如果被激活,还会对该固件产生硬件中断。
执行按键弹起的微去反跳操作时,一旦检测到按键被按下,去反跳缓冲器的第12位将设置为表示去反跳缓冲器中的按键准备好进行大规模去反跳按键弹起检测。该位还将去反跳计数器(如图7中所示)转换为降值计数的模式。一个实施例中,u_debounce的值也可用于按键弹起事件的检测。无论何时,只要去反跳缓冲器按键在“u_debounce”个连续周期内弹起,去反跳计数器计数减1。一个实施例中,可对按键弹起事件检测使用不同的u_debounce值。
执行按键弹起大规模去反跳操作时,该按键必须在“maU_debounce”个连续的硬件扫描周期内弹起,才会认为该按键被释放。释放后的按键复制到按键事件缓冲器中,第8位设置为“1”来表示一个弹起事件。
一个实施例中,本发明的系统包括以下用户可编程的寄存器,用于微去反跳和大规模去反跳操作中:
u_debounce[1:0]
maD_debounce[3:0]
maU_debounce[3:0]
scancycle_timer[11:0]
一个实施例中,按键事件缓冲器被映射到存储空间中。
本领域的一般技术人员可知,对本发明的上述或者其他实施方案进行的多种改变都没有超出本发明的范围。本发明并不仅限于上述公开的具体实施例或者方案,其覆盖了由本发明权利要求所确定的范围内的任何替换、修改或改进。
关联申请参考
本专利申请要求美国临时专利申请号为No.60/613,658、申请日为2004年9月28日、名称为“高性能按键去反跳的方法和装置”的专利申请的优先权,其全部内容在此作为参考。
Claims (10)
1.一种带按键去反跳功能的按键检测方法,所述方法包括:
检测按键激活;
在用户可定义数量的时钟周期内测试所述按键激活;
若在用户可定义数量的时钟周期内所述按键激活是有效的,存储能识别已激活按键的按键索引至一缓冲器中;
在用户可定义数量的硬件按键扫描周期内测试被识别的已激活按键;
若在用户可定义数量的硬件按键扫描周期内所述按键激活是有效的,建立一按键激活事件。
2.如权利要求1所述的按键检测方法,其特征在于,所述方法进一步包括:
检测按键释放;
在用户可定义数量的时钟周期内测试所述按键释放;
若在用户可定义数量的时钟周期内所述按键激活是有效的,在用户可定义数量的硬件按键扫描周期内测试所述按键释放;
若在用户可定义数量的硬件按键扫描周期内所述按键释放是有效的,建立一按键释放事件。
3.如权利要求1所述的按键检测方法,其特征在于,所述方法进一步包括:对每个硬件按键扫描周期增加一个用户可定义时间延迟。
4.如权利要求1所述的按键检测方法,其特征在于,所述时钟周期与系统时钟周期有关。
5.如权利要求1所述的按键检测方法,其特征在于,所述按键激活是键盘上按下的按键、鼠标的移动、操纵杆的移动以及感应事件中的一个或者多个。
6.一种带按键去反跳功能的按键检测系统,所述系统包括:
用于检测按键激活的电路;
与所述电路连接的第一计数器和时钟,用于在用户可定义数量的第一时钟周期内测试所述按键激活;
按键去反跳缓冲器,用于在用户可定义数量的第一时钟周期内所述按键激活为有效时存储识别已激活按键用的按键索引;
第二计数器,用于在用户可定义数量的第一硬件按键扫描周期内测试被识别的已激活按键;
按键事件缓冲器,用于在用户可定义数量的第一硬件按键扫描周期内所述按键激活为有效时存储按键激活事件。
7.如权利要求6所述的按键检测系统,其特征在于,所述电路检测按键释放;所述第一计数器在用户可定义数量的第二时钟周期内测试所述按键释放;在用户可定义数量的第二时钟周期内所述按键激活为有效时,所述第二计数器在用户可定义数量的第二硬件按键扫描周期内测试所述按键释放;在用户可定义数量的第二硬件按键扫描周期内所述按键释放为有效时,所述按键事件缓冲器存储按键释放事件。
8.如权利要求6所述的按键检测系统,其特征在于,所述按键检测系统对每个硬件按键扫描周期增加一个用户可定义时间延迟。
9.一种检测按键的系统,所述系统包括:
检测按键激活的装置;
在用户可定义数量的时钟周期内测试所述按键激活的装置;
在用户可定义数量的时钟周期内所述按键激活为有效时,在用户可定义数量的硬件按键扫描周期内测试被按键索引识别的已激活按键的装置;
在用户可定义数量的硬件按键扫描周期内所述按键激活为有效时建立按键激活事件的装置。
10.如权利要9所述的检测按键的系统,其特征在于,所述系统进一步包括:
检测按键释放的装置;
在用户可定义数量的时钟周期内测试所述按键释放的装置;
在用户可定义数量的时钟周期内所述按键激活为有效时,在用户可定义数量的硬件按键扫描周期内测试所述按键释放的装置;
在用户可定义数量的硬件按键扫描周期内所述按键释放为有效时建立按键释放事件的装置。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US61365804P | 2004-09-28 | 2004-09-28 | |
US60/613,658 | 2004-09-28 | ||
US11/087,524 US7230548B2 (en) | 2004-09-28 | 2005-03-23 | Method and apparatus for high performance key detection with key debounce |
US11/087,524 | 2005-03-23 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1770637A CN1770637A (zh) | 2006-05-10 |
CN1770637B true CN1770637B (zh) | 2010-05-05 |
Family
ID=34936356
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200510108923.XA Expired - Fee Related CN1770637B (zh) | 2004-09-28 | 2005-09-27 | 带按键去反跳功能的按键检测方法和系统 |
Country Status (4)
Country | Link |
---|---|
US (3) | US7230548B2 (zh) |
EP (1) | EP1643349A3 (zh) |
CN (1) | CN1770637B (zh) |
TW (1) | TWI312955B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7230548B2 (en) * | 2004-09-28 | 2007-06-12 | Broadcom Corporation | Method and apparatus for high performance key detection with key debounce |
JP4406622B2 (ja) * | 2005-07-29 | 2010-02-03 | アルプス電気株式会社 | 入力装置 |
JP4143632B2 (ja) * | 2005-09-09 | 2008-09-03 | Necソフト株式会社 | 組込みシステムおよびプログラム、並びに、キー割込み制御方法 |
US7446676B2 (en) * | 2005-12-28 | 2008-11-04 | Broadcom Corporation | Self-scan programmable keypad interface |
GB0614259D0 (en) * | 2006-07-18 | 2006-08-30 | Global Silicon Ltd | A debouncing circuit |
CN100592637C (zh) * | 2006-10-13 | 2010-02-24 | 鸿富锦精密工业(深圳)有限公司 | 键盘扫描电路及方法 |
US7809867B2 (en) * | 2007-11-14 | 2010-10-05 | Fluke Corporation | Keypad de-bouncing apparatus and method |
TW200925934A (en) * | 2007-12-06 | 2009-06-16 | Avision Inc | Key status detecting circuit |
EP2120338A1 (en) * | 2008-05-15 | 2009-11-18 | Thomson Licensing | Key press detecting circuit |
TW201007526A (en) * | 2008-08-13 | 2010-02-16 | Elan Microelectronics Corp | Signal processing method of multi-fingers touch apparatus having invisible physical button structure |
US20100064061A1 (en) * | 2008-09-05 | 2010-03-11 | Apple Inc. | Providing substantially immediate action in response to input event |
US9456272B2 (en) | 2012-03-30 | 2016-09-27 | Fairchild Semiconductor Corporation | Button-press detection and filtering |
DE102015226315A1 (de) * | 2015-12-21 | 2017-06-22 | Cherry Gmbh | Vorrichtung und Verfahren zur Erkennung einer Schalterbetätigung |
WO2018004451A1 (en) * | 2016-06-28 | 2018-01-04 | Razer (Asia-Pacific) Pte. Ltd. | Devices, methods for controlling a device, and computer-readable media |
WO2019078782A1 (en) * | 2017-10-20 | 2019-04-25 | Razer (Asia-Pacific) Pte. Ltd. | USER INPUT DEVICES AND METHODS OF USER INPUT IDENTIFICATION IN A USER INPUT DEVICE |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3973256A (en) * | 1975-07-14 | 1976-08-03 | Compucorp | Key detection system interconnecting keyboard and data processing system |
US4022098A (en) * | 1975-10-06 | 1977-05-10 | Ralph Deutsch | Keyboard switch detect and assignor |
US4621319A (en) * | 1982-09-27 | 1986-11-04 | Intel Corporation | Personal development system |
CN1310397A (zh) * | 2000-02-24 | 2001-08-29 | 英业达股份有限公司 | 计算机键盘检测方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3886543A (en) * | 1973-11-29 | 1975-05-27 | Teletype Corp | Debounce logic for keyboard |
US4100606A (en) * | 1977-02-09 | 1978-07-11 | Texas Instruments Incorporated | Key debounce system for electronic calculator or microprocessor |
US4581603A (en) * | 1983-03-11 | 1986-04-08 | The Maxi-Switch Company | Switch matrix key closure validation device and method |
JPS60258627A (ja) * | 1984-06-04 | 1985-12-20 | Omron Tateisi Electronics Co | マイクロコンピユ−タ装置 |
JPS6224315A (ja) * | 1985-07-24 | 1987-02-02 | Nec Corp | キ−ボ−ド |
US7230548B2 (en) | 2004-09-28 | 2007-06-12 | Broadcom Corporation | Method and apparatus for high performance key detection with key debounce |
-
2005
- 2005-03-23 US US11/087,524 patent/US7230548B2/en active Active
- 2005-05-10 EP EP05010164A patent/EP1643349A3/en not_active Withdrawn
- 2005-09-23 TW TW094132972A patent/TWI312955B/zh not_active IP Right Cessation
- 2005-09-27 CN CN200510108923.XA patent/CN1770637B/zh not_active Expired - Fee Related
-
2007
- 2007-05-15 US US11/803,735 patent/US7522070B2/en active Active
-
2009
- 2009-03-31 US US12/415,752 patent/US8031088B2/en not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3973256A (en) * | 1975-07-14 | 1976-08-03 | Compucorp | Key detection system interconnecting keyboard and data processing system |
US4022098A (en) * | 1975-10-06 | 1977-05-10 | Ralph Deutsch | Keyboard switch detect and assignor |
US4621319A (en) * | 1982-09-27 | 1986-11-04 | Intel Corporation | Personal development system |
CN1310397A (zh) * | 2000-02-24 | 2001-08-29 | 英业达股份有限公司 | 计算机键盘检测方法 |
Also Published As
Publication number | Publication date |
---|---|
TWI312955B (en) | 2009-08-01 |
US8031088B2 (en) | 2011-10-04 |
US7522070B2 (en) | 2009-04-21 |
US20070216543A1 (en) | 2007-09-20 |
EP1643349A3 (en) | 2010-07-07 |
US20060068771A1 (en) | 2006-03-30 |
CN1770637A (zh) | 2006-05-10 |
EP1643349A2 (en) | 2006-04-05 |
US7230548B2 (en) | 2007-06-12 |
TW200636542A (en) | 2006-10-16 |
US20090267809A1 (en) | 2009-10-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1770637B (zh) | 带按键去反跳功能的按键检测方法和系统 | |
CN1746824B (zh) | 确定下按键的方法、装置、和系统 | |
CN1043273C (zh) | 能选取多信息源中独立发生事件的总线监视器 | |
GB1562714A (en) | Electronic keyboard circuit | |
SE455650B (sv) | Dokumentpresentationsanordning ingaende i ett system for lagring av dokument med text- och rostkomponenter | |
US20100049882A1 (en) | Hotkey processing method and computer system | |
CN201655259U (zh) | 一种段码和键扫描输出复用的lcd驱动电路 | |
CN1612076A (zh) | 用于便携式电子设备的交互式开关装置 | |
US6040788A (en) | Cache based scan matrix keyboard controller | |
US20050188276A1 (en) | Processor bus for performance monitoring with digests | |
CN1968329B (zh) | 报警手机、报警系统及手机报警方法 | |
US4193038A (en) | Key input apparatus | |
CN101124620A (zh) | 使用一新鲜性状况的用户接口动作处理 | |
CN106527221A (zh) | 智能开关、具有智能开关的ZigBee模块及操作方法 | |
CN111552589A (zh) | 面向全键盘的按键卡死检测与功能维护方法及管理架构 | |
CN101552611A (zh) | 键盘扫描电路的扫描方法 | |
JPH0975537A (ja) | 遊技場用データ管理システム | |
CN205490496U (zh) | 一种矩阵式键盘操作识别及编码电路 | |
JP4365562B2 (ja) | 波形化プログラム及びパチンコ遊技機開発支援ツール | |
AU609448B2 (en) | Keyboard crosspoint encoder having pseudo-n-key rollover | |
JPS63111520A (ja) | キ−入力回路 | |
JP2524130Y2 (ja) | データ入力装置 | |
JP2008055199A (ja) | 波形化プログラム及びパチンコ遊技機開発支援ツール | |
CN105471439B (zh) | 独立式键盘扫描及编码电路 | |
JPH0334799Y2 (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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20180508 Address after: Singapore Singapore Patentee after: Avago Technologies Fiber IP Singapore Pte. Ltd. Address before: california Patentee before: Zyray Wireless Inc. |
|
TR01 | Transfer of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100505 Termination date: 20180927 |
|
CF01 | Termination of patent right due to non-payment of annual fee |