一种矩阵键盘的按键识别方法及系统

文档序号:1190371 发布日期:2020-08-28 浏览:12次 >En<

阅读说明:本技术 一种矩阵键盘的按键识别方法及系统 (Key identification method and system of matrix keyboard ) 是由 刘奎奎 张良吉 于 2020-07-27 设计创作,主要内容包括:本发明提出一种矩阵键盘的按键识别方法和系统,包括:键盘上电后该键盘的主控芯片进入低功耗模式,按键按下后会触发并接通按键所在的行和列,行IO产生电平突变信号,该电平突变信号通过输入IO唤醒该主控芯片并触发IO中断;该主控芯片对按键位置进行定位得到按键触发信号,并对按键触发信号进行抖动检测判断其是否为有效触发,若是,则将该按键位置的按键动作作为按键识别结果,否则按键识别失败,该主控芯片进入低功耗模式。本发明可实现超低功耗、IO中断不够的情况也能实现矩阵的多按键唤醒检测以及支持对组合键的识别。(The invention provides a key identification method and a key identification system of a matrix keyboard, which comprise the following steps: after the keyboard is powered on, a main control chip of the keyboard enters a low power consumption mode, a key is pressed down and then a row and a column where the key is located are triggered and connected, a row IO generates a level jump signal, and the level jump signal wakes up the main control chip through an input IO and triggers IO interruption; the main control chip positions the key position to obtain a key trigger signal, and carries out jitter detection on the key trigger signal to judge whether the key trigger signal is effectively triggered, if so, the key action of the key position is taken as a key identification result, otherwise, the key identification fails, and the main control chip enters a low power consumption mode. The invention can realize the condition of ultra-low power consumption and insufficient IO interruption, and can also realize the multi-key awakening detection of the matrix and support the identification of the combination key.)

一种矩阵键盘的按键识别方法及系统

技术领域

本发明涉及嵌入式开发领域,并特别涉及一种矩阵键盘的防抖方法及系统。

背景技术

常见的按键结构电路分为独立按键和行列式按键,独立式按键即每个按键占用一根I/O线,直接用I/O口结构成单个按键电路,但占用口线较多,只适合数量不多的应用。行列式键盘I/O是采用口线构成行列结构,按键设置在行列的交点上。在按键较多时可节省I/O口线。但当键盘数目较多时,也需占用较多的单片机口线。而且这两种方式都不能直接得出扫描码,必须通过计算才行。

目前,按键是最常用的输入方式,常见的按键电路有一对一的直接连接和动态扫描的矩阵式连接两种。

一对一的直接连接即一个按键对应一个CPU输入口,当CPU输入口的常态为高电平时,则按下某一个按键时为低电平。一对一的直接连接的按键电路连接简单,但是当按键数量较少输入口数量较多时可以直接使用,当按键数量较多时,输入口数量可能不够用,则需要使用矩阵式的按键电路。

矩阵式的按键电路为将按键按行列矩阵的方式排列,每一行共用一根扫描线,每一列共用一根中断线,若9个按键,则仅需6个端口即可。假设按键按下的有效电平是低电平,那按键抬起后的有效电平就是高电平,当检测到中断线的电平为低电平时,认为按键是按下了,否则认为是按键抬起。然而,由于按键机械层面或者外部环境的抖动,可能导致按键扫描算法抗干扰性较差,无法精准的检测出按键是否按下或者抬起,甚至根本检测不到低电平。且现有技术中键扫是由外设的键扫模块去检测按键功能,列和行布局排线有局限性,需要按照键扫模块设计去实现IO布局,耗电量较大且降低了电路设计的灵活度。

另外,由于系统休眠后需要依靠按键唤醒系统的特殊需求的矩阵按键电路,在常用矩阵按键电路上的扫描线下串接一个下拉电阻,当按键按下后,中断线的电平被拉低后由于串接的下拉电阻导致中断线的电平永远为低电平,导致通用的按键扫描算法移植性差,无法用于检测特殊需求的矩阵按键电路。

以往技术存在的问题包括:

1.无键扫模块和IO中断缺失无法实现组合按键;

2.资源不够的时候无法实现按键功能;

3.按键大部分时间是静止无操作状态,键扫模块会一直耗电;

4.组合按键布局受限于键扫模块的设计;

5.去抖过程依赖硬件。

发明内容

针对现有技术的不足,本发明提出了一种基于芯片可高精度检测按键操作的方法,可解决芯片在检测大量按键响应IO中断不足的技术问题以及去抖过程依赖硬件键扫模块,实现灵活方便的键盘设计方案。

具体来说,本发明提出一种矩阵键盘的按键识别方法,其中包括:

步骤1、键盘上电后该键盘的主控芯片进入低功耗模式,按键按下后会触发并接通按键所在的行和列,行IO产生电平突变信号,该电平突变信号通过输入IO唤醒该主控芯片并触发IO中断;

步骤2、该主控芯片对按键位置进行定位得到按键触发信号,并对按键触发信号进行抖动检测判断其是否为有效触发,若是,则将该按键位置的按键动作作为按键识别结果,否则按键识别失败,该主控芯片进入低功耗模式。

所述的矩阵键盘的按键识别方法,其中该步骤1包括:

步骤11、将主控芯片没有配置到唤醒源和IO中断的行IO分别接一个二极管的输入端,将每一个二极管的输出端汇总为一路后接到另一个指定IO上,当该主控芯片的行IO具有高电平输入时,高电平同时通过二极管进入到配置成唤醒源的指定IO,唤醒该主控芯片进行工作并触发IO中断。

所述的矩阵键盘的按键识别方法,其中该抖动检测具体包括:

当检测到有IO中断触发时,开启计时器以定时扫描按键的行和列,每次扫描得到的按下按键的行和列结果均一致,则判定该按键触发信号为有效触发,否则判定为按键抖动,将该键触发信号作为无效触发。

所述的矩阵键盘的按键识别方法,其中该低功耗模式为只保留作为唤醒源的GPIO工作。

所述的矩阵键盘的按键识别方法,其中该步骤2包括:通过该电平突变信号得到发生电平突变的行号,控制该键盘所有列IO轮询输出预设电平,当该行号的行IO具有该预设电平输入时,保存当前输出预设电平的列号,保存该行号和列号作为该按键触发信号。

本发明还提出一种矩阵键盘的按键识别系统,其中包括:

主控唤醒模块,用于键盘上电后使该键盘的主控芯片进入低功耗模式,按键按下后会触发并接通按键所在的行和列,行IO产生电平突变信号,该电平突变信号通过输入IO唤醒该主控芯片并触发IO中断;

按键识别模块,用于通过该主控芯片对按键位置进行定位,得到按键触发信号,并对按键触发信号进行抖动检测判断其是否为有效触发,若是,则将该按键位置的按键动作作为按键识别结果,否则按键识别失败,该主控芯片进入低功耗模式。

所述的矩阵键盘的按键识别系统,其中该主控唤醒模块包括:

主控唤醒子模块,用于将主控芯片没有配置到唤醒源和IO中断的行IO分别接一个二极管的输入端,将每一个二极管的输出端汇总为一路后接到另一个指定IO上,当该主控芯片的行IO具有高电平输入时,高电平同时通过二极管进入到配置成唤醒源的指定IO,唤醒该主控芯片进行工作并触发IO中断。

所述的矩阵键盘的按键识别系统,其中该抖动检测具体包括:

当检测到有IO中断触发时,开启计时器以定时扫描按键的行和列,每次扫描得到的按下按键的行和列结果均一致,则判定该按键触发信号为有效触发,否则判定为按键抖动,将该键触发信号作为无效触发。

所述的矩阵键盘的按键识别系统,其中该低功耗模式为只保留作为唤醒源的GPIO工作。

所述的矩阵键盘的按键识别系统,其中该按键识别模块包括:通过该电平突变信号得到发生电平突变的行号,控制该键盘所有列IO轮询输出预设电平,当该行号的行IO具有该预设电平输入时,保存当前输出预设电平的列号,保存该行号和列号作为该按键触发信号。

由以上方案可知,本发明的优点在于:

1.超低功耗,只保留IO唤醒功能,灵活并且使芯片进入最低功耗;

2.IO中断不够的情况也能顺利解决矩阵的多按键唤醒检测;

3.单列和组合按键都能灵活支持,支持多个组合键按下,支持对组合键的识别;

4.芯片只要支持IO唤醒就能实现此按键唤醒功能,由于代码复用性高,只需要功能初始化时对矩阵的行和列做对应的IO配置后,就能使用里面参数灵活可配,满足所有唤醒时间不同芯片的适用性,去抖效果可以配置到很好的性能;

5.本发明矩阵键盘基于GPIO,可通过软件实现防抖,省去了传统的硬件 键扫模块,进一步起到减少功耗,缩小电路面积的技术效果。

附图说明

图1为本发明电路图;

图2为本发明检测按键操作的流程图;

图3为本发明系统框图。

具体实施方式

本发明技术主要用于矩阵按键检测功能,方案采用的是按键触发IO中断后定时扫描检测矩阵IO的方式,进行按键去抖检测操作,方案中设有:扫描间隔、总扫描次数,扫描判断有效次数,键盘的行IO和列IO、中断触发个IO等多个可变条件,使方案具有灵活调试,方便使用,适用范围广的特点。方案设计比较突出的优点在于当IO中断不够按键检测使用时,在外部硬件加入二极管设计,可使多个IO通过一个IO中断检测使用,很大程度解决了很多芯片因为IO中断不够导致检测不了大量按键的局限性。

为让本发明的上述特征和效果能阐述的更明确易懂,下文特举实施例,并配合说明书附图作详细说明如下。

如图1所示,本发明电路包括:D2-D5:二极管、PD7:输入GPIO中断触发引脚、PD3-PD6:为按键行输入,用于MCU的GPIO中断不够处理,PD0-PD2按键行输入,可分别配置对应唤醒源和IO中断,PC0-PC2为按键列(输出高)。

程序中会控制矩阵键盘的列IO全部输出高电平,当有按键按下时,会接通按键所在的行和列,此时行IO有高电平输入,会触发IO中断,检测程序即可通过内部查询逻辑判断出是哪个按键按下,此时会出现最大的弊端就是矩阵键盘的行和列都比较多,芯片的IO中断或唤醒源不够一一对应行IO,这种情况是无法满足矩阵的大量按键检测工作,解决方法:在没有配置到唤醒源和IO中断的行IO上加上二极管,在将这些二极管接到另一个指定IO(如图1中PD7)上,当这些行IO有高电平输入时,同时会将高电平通过二极管输入到指定IO,这个IO只需要一路IO中断和唤醒源对应就可,这样就可以解决芯片的IO中断或唤醒源不够的问题,进行后续的程序检测工作。

例当芯片的IO中断和唤醒源分别有4个,但是需要检测10行n列的矩阵键盘,满足10行的矩阵键盘程序里要想检测到IO触发,每一行就必须配置一路IO中断。将其中前3行IO配置成对应的3个IO中断和唤醒源,剩下6行只有1路IO中断和唤醒源可使用,这样的情况下,将这6行IO分别相连一个二极管,再将每个二极管输出汇总为一路接到指定另外IO上,这个IO就可以配置剩下的一路IO中断和唤醒源了。这样硬件配置加上软件的内部处理,4路IO中断和唤醒源就可以满足10路的IO使用需求。指定IO指图片中的PD7,本发明用到的IO均属于一个主控芯片,即将PD7配置最后一路唤醒源和IO中断,用作触发中断,且这里的对应IO脚可根据主控芯片的不同而进行配置。

如图2所示,本发明程序流程包括:按键初始化后,系统进入休眠状态,当有按键触发时可唤醒系统进入GPIO中断处理,触发后进行按键扫描,检测按键位置,定时检测去抖操作,如符合按键处理要求,说明按键检测成功并上报键位,否则按键识别失败。

去抖操作过程包括判断触发按键的触发信号是否为抖动,若是则将此触发信号作为无效信号,抛弃此触发信号,否则将其作为有效信号,进行后续的信号处理。具体包括,当检测到有IO中断触发时,说明有按键按下或抬起,此时会开启timer,定时扫描这个IO的信号,在多次扫描后,指定检测次数结果一致,则确定为IO按键按下或抬起,否则视为按键抖动,后续不做操作。

如图3所示,本发明系统包括:Mcu操作系统包括(休眠机制和其它机制),休眠机制包括(按键休眠唤醒功能和其它功能),按键休眠唤醒包括(硬件和软件俩部分),硬件如图1IO矩阵电路,软件包括(按键检测,按键去抖,按键上报)如图2程序流程图。

具体来说,本发明实施详细步骤如下:

1、硬件接法和软件初始配置

主控芯片进入休眠状态时会配置矩阵键盘的所有行(PD0-PD6)和特殊IO(PD7)对应的主控芯片IO为输入下拉模式,也就是输入低电平。这里PD0-PD2可使用3路唤醒源和3路IO中断,如果主控芯片只有4个唤醒源和4个IO中断,剩余没有配置的行PD3-PD6可分别接一个二极管,在将这些二极管接到PD7上,PD7可使用1路唤醒源和1路IO中断。然后矩阵键盘所有列(PC0-PC3)对应的主控芯片IO为输出高电平模式。

2、工作执行流程

(1)按键触发阶段

当有按键按下时,会接通按键所在的行和列,此时列IO的输出高电平就会输入到对应行IO上,行IO由输入低电平变成了高电平,产生上升沿,这样就会通过输入IO唤醒休眠的主控芯片,唤醒芯片同时还会触发IO中断,这里重点说明行PD0-PD2有自己配置的唤醒源和IO中断,而PD3-PD6的高电平不仅会输入自己的IO还会经过二极管输入到PD7触发芯片IO中断和唤醒,当程序检测到IO中断触发了,就会进入软件识别键位模式。

(2)软件识别键位阶段

按键触发IO中断后,程序即可通过具体哪行IO输入高电平,判断出按下的键位对应行,然后程序中会控制矩阵键盘的所有列IO轮询输出高电平,当确定的行IO再次有高电平输入,程序就会识别出具体哪列IO输出的高电平,这样按下的键位对应的列也知道了,知道了按下键位的行列,也就定位了键位值,得到包含该键位值的按键触发信号,然后会进入软件按键去抖阶段。

(3)软件按键去抖阶段

内部查询逻辑判断出是哪个按键按下后,程序会开启定时器,定时扫描检测按下按键的对应行IO(输入高)和列IO(输出高),扫描次数和时间都是可配置模式,用户可通过不同应用场合进行配置,如果在指定的次数和时间内扫描到的结果和最初的结果一致,则完成去抖,确定此扫描的按键确实按下了,程序就会上报键位值,否则为按键抖动,按键不为按下,程序不上报键位值。按键抬起去抖也是这样的操作。

(4)按键抬起检测阶段

按键检测到按下后,芯片一直处于唤醒状态,将IO中断配置成下降沿触发,当按下的按键抬起时,此按键对应行和列线路断开,对应行IO就会由高电平变为低电平,触发中断,经过去抖后确定按下,则芯片进入休眠。

这样设计的优点:

如上例使用,主控芯片只有4个唤醒源和4个IO中断矩阵按键的行PD0-PD2已经配置了3路唤醒源和IO中断,剩下的行PD3-PD6只有1路唤醒源和1路IO中断使用了,将这些剩余没有配置的行IO分别都接二极管,二极管再接指定一个IO上,这个IO配置成剩下一路唤醒源和IO中断,通过这样的形式就可以解决主控芯片在唤醒源和IO中断有数量限制的情况下,还可以使用多行列矩阵键盘的设计优点。

通过大量软件处理的方式,解决了某些主控芯片没有键扫外设就无法识别多按键的缺陷。

低功耗芯片在有键扫外设的使用下,硬件会不断的去扫描是否有按键按下,这样就会不停的唤醒芯片,产生了大量的功耗,使用本设计方案就可不必使用键扫外设,避免了使用键扫外设而产生的功耗

软件设计灵活性较高,使用性较简单,单列和组合按键都能灵活支持,用户可根据对应的应用设计,灵活配置软件使用,即可配置去抖扫描次数,还可配置组合键的个数,行和列对应的IO的引脚初始化也可通过简单配置即可使用。

应用性广,不仅键盘方案可使用这样的设计,只要设计到按键识别的应用方案都可使用,例如鼠标,遥控器等。

以下为与上述方法实施例对应的系统实施例,本实施方式可与上述实施方式互相配合实施。上述施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在上述实施方式中。

本发明还提出一种矩阵键盘的按键识别系统,其中包括:

主控唤醒模块,用于键盘上电后使该键盘的主控芯片进入低功耗模式,按键按下后会触发并接通按键所在的行和列,行IO产生电平突变信号,该电平突变信号通过输入IO唤醒该主控芯片并触发IO中断;

按键识别模块,用于通过该主控芯片对按键位置进行定位,得到按键触发信号,并对按键触发信号进行抖动检测判断其是否为有效触发,若是,则将该按键位置的按键动作作为按键识别结果,否则按键识别失败,该主控芯片进入低功耗模式。

所述的矩阵键盘的按键识别系统,其中该主控唤醒模块包括:

主控唤醒子模块,用于将主控芯片没有配置到唤醒源和IO中断的行IO分别接一个二极管的输入端,将每一个二极管的输出端汇总为一路后接到另一个指定IO上,当该主控芯片的行IO具有高电平输入时,高电平同时通过二极管进入到配置成唤醒源的指定IO,唤醒该主控芯片进行工作并触发IO中断。

所述的矩阵键盘的按键识别系统,其中该抖动检测具体包括:

当检测到有IO中断触发时,开启计时器以定时扫描按键的行和列,每次扫描得到的按下按键的行和列结果均一致,则判定该按键触发信号为有效触发,否则判定为按键抖动,将该键触发信号作为无效触发。

所述的矩阵键盘的按键识别系统,其中该低功耗模式为只保留作为唤醒源的GPIO工作。

所述的矩阵键盘的按键识别系统,其中该按键识别模块包括:通过该电平突变信号得到发生电平突变的行号,控制该键盘所有列IO轮询输出预设电平,当该行号的行IO具有该预设电平输入时,保存当前输出预设电平的列号,保存该行号和列号作为该按键触发信号。

11页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:电容式触控按键

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类