一种可检测多个任意组合按键的扫描检测电路及方法技术

技术编号:17617738 阅读:100 留言:0更新日期:2018-04-04 08:26
一种可检测多个任意组合按键的扫描检测电路及方法,软件上,在扫描检测环节上,采取了对半递归分组的方式进行检测扫描;如果其中一半对应的按键没有按下,则对这一半的按键扫描直接退出;因此,该方式更好的适应了按键在绝大部分的时间里大多处于弹起的实际应用场合,从而提高了MCU的工作效率。在硬件上,在矩阵按键对应的所有行端口均采取二极管或逻辑电路,其逻辑输出端口作为外部中断信号源给到MCU中断引脚,结合软件中数据分析处理环节方式,可实现无任何按键按下的情况下,MCU可处理其它任务,直到响应新的外部中断信号;因此,该处理方式也极大提高了MCU的工作效率。

A scan detection circuit and method for detecting multiple arbitrary combination keys

A software can detect multiple arbitrary combination of the scan detection circuit and method, in the scanning process, take on the recursive way to detect packet scanning; if one half of the corresponding button on the scan button is not pressed, the half of the direct return; therefore, the way to better adapt to the the keys are mostly in practical applications up in most of the time, so as to improve the work efficiency of MCU. In the hardware, adopts diode or logic circuit in all port matrix keys corresponding to the logic output port as external interrupt signal source to the MCU interrupt pin, combined with software in data processing link, can be realized without any key pressed the case, MCU can handle other tasks, until the new external response therefore, the interrupt signal; processing mode will greatly enhance the work efficiency of MCU.

【技术实现步骤摘要】
一种可检测多个任意组合按键的扫描检测电路及方法
本专利技术涉及组合按键检测,尤其是一种可检测多个任意组合按键的扫描检测电路及方法。
技术介绍
键盘是很多电子产品的必须的输入设备。通常,大规模键盘有三种设计方法,第一种是采用专用键盘编码芯片,按键按照行和列输入,编码后的数据以USB接口输出。此方法需要专用键盘编码芯片并设计USB接口,增加了设计复杂性。第二种是将按键分别接入CPLD的IO脚,利用CPLD的IO引脚多的优势分别对每一个按键状态进行判断并将结果输出到处理单元,此方法需要增加CPLD芯片,增加了硬件成本。第三种是采用MCU设计的通用矩阵键盘,让按键接入到矩阵相应的行和列,此方法具有成本低廉、占用硬件资源少等优点。采用MCU设计的矩阵键盘能实现单个按键和简单组合按键的功能,但难以实现一些复杂组合按键的功能,因此极大地限制了采用MCU设计的矩阵键盘在需要组合逻辑按键场合的应用。针对现有技术中在矩阵键盘中难以实现复杂组合按键的功能,目前尚未提出有效的解决方案。
技术实现思路
本专利技术所要解决的技术问题是提供一种可检测多个任意组合按键的扫描检测电路及方法,电路结构简单,可实现规模较大的矩阵按键的稳定可靠检测,可实现任意数量、任意按键的组合功能,解决键位冲突问题。为解决上述技术问题,本专利技术的技术方案是:一种可检测多个任意组合按键的扫描检测电路,包括:MCU,所述MCU一共设有M+N+1个IO引脚,其中一个IO引脚带外部中断功能;矩阵按键电路,所述矩阵按键电路包括M条横向支路和N条纵向支路。横向支路与纵向支路交叉处形成一个键位,M条横向支路与N条纵向支路相交形成M×N个矩阵分布的键位;每个键位对应一个二极管、一个电容和一个接触开关,二极管的阳极与横向支路连接,二极管的阴极通过陶瓷电容与纵向支路连接,接触开关与电容并联;每个按键代表唯一一个键码;在横向支路的第一端形成M个横向IO端口,在纵向支路的第一端形成N个纵向IO端口,所述横向IO端口和纵向IO端口均与MCU的IO引脚连接;纵向支路的第二端通过上拉电阻后与电源VCC连接,当没有任何按键按下时,所有横向IO端口被电源VCC上拉到高电平;横向支路的第二端通过第一电阻后与电源VCC连接,第一电阻起到电平传递以及按键按下时防止对应的横向IO端口和纵向IO端口短路;或逻辑电路,包括M个二极管、电源VCC和电阻R113,每个二极管对应一个横向IO端口,该二极管、电源VCC和电阻R113组成所有的横向IO端口,电源VCC通过电阻R113与二极管阳极连接,电源VCC通过电阻R113输出至端口INT,端口INT与MCU外部中断功能的IO引脚连接。作为改进,所述上拉电阻的阻值为10KΩ。作为改进,所述第一电阻的阻值为100Ω。本专利技术可检测多个任意组合按键的扫描检测方法,包括以下步骤:(1)MCU上电后,马上初始化所有的IO口状态;(2)如果MCU响应外部中断,则进入按键的扫描检测过程;所述扫描检测过程包括两个环节:(2.1)扫描检测环节:对所有矩阵按键的检测,需要经过一轮又一轮的重复扫描过程;(2.2)数据分析处理环节,数据分析处理环节需要以下几个步骤:①在当前扫描结束后,所有的按键状态数据存放到Buf内存缓冲区中;将所有按下的按键全部找出来,将这类按键键值,逐个地与空键集合进行匹配,如果匹配发现有按下的按键为空键,则退出当前一轮扫描,等待下一轮,同时,MCU向上一层应用函数返回报错数值;②将当前一轮与前一轮、前二轮的按键扫描结果进行对比;如果连续3轮的扫描结果一致,则将当前一轮的Buf中的数据与前一个保存前一次同样也是满足连续3轮检测结果一致的BufPrev缓冲区数据进行对比,如果不一致,则结束当前一轮扫描,等待下一轮;③如果Buf与BufPrev对比的结果是一致的,说明没有任何按键按下或者弹起,直接进入到以下第⑤个步骤;反之,如果不一致,则对比并且找到Buf与BufPrev中每一个不同比特的数据;通过该不同比特的数据所处的位置,可定位唯一1个有发生变化的按键及其键码;而通过比特的变化,得知该按键是弹起还是按下;④在③的基础上,逐个初步判断某个已经按下的按键是否为刚按下,如果初步确认按键为弹起,则将对应按键的释放时间设置为0;反之,如果初步确认按键为按下,将初步确认为按下的按键对应的数据添加到Buf2中;⑤利用内部定时器定时中断的功能,逐个更新Buf2中的所有按键的按下时间和释放时间;⑥逐个判断单个按键是否最终确认为弹起,即判断以下3个条件:A)Buf2中存在这个按键数据;B)ReleaseTime>=T释放阈值;C)KeyStatus为弹起;如果满足以上3个条件,则在Buf2中清除该释放按键的数据,并且向上层函数发送单按键释放的消息;否则,跳到步骤⑦;⑦逐个判断单个按键是否最终确认为按下,即判断以下3个条件:A)Buf2中存在这个按键数据;B)ReleaseTime>=T按下阈值;C)KeyStatus为按下;如果满足以上3个条件,则并且向上层函数发送单按键按下的消息;否则,跳到步骤⑧;⑧逐个判断组合按键是否最终确认为按下,判断所有组成的按键同时满足以下3个条件:A)Buf2同时存在所有所需按键数据;B)ReleaseTime>=T按下阈值;C)KeyStatus为按下;如果满足以上3个条件,则将该组合键的相关数据放到Buf3中;将Buf3中该组合键的标志位flag标志为1,证明该组合按键成立;并且向上层函数发送组合键按下消息;否则,跳到步骤⑨;⑨逐个判断组合按键是否最终确认为释放,即判断所有组成按键满足以下3个条件:A)Buf3存在该组合键的数据;B)Buf3该组合键数据中的flag位置为成立;C)在第⑧步骤提到的3个条件不再同时满足(即任意一个条件不成立即可);如果满足以上3个条件,则向上层函数发送组合键释放消息,并且将Buf3中该组合键的数据删除掉;否则,跳到步骤⑩;⑩将Buf数据替换BufPrev的数据;利用内部定时器定时中断的功能,更新TimerBuf2定时器;判断Buf2中的按键数据是否为空且TimerBuf2超时,如果是,退出按键扫描任务,直到响应下一次外部中断;否则,直接退出,等待下一轮按键扫描。作为改进,所述步骤(1)中,具体的初始化任务包括:1)将纵向IO端口设置为输出,且输出低电平;2)将横向IO端口设置为输入;3)将中断引脚INT设置为下降沿外部中断,并使能外部中断;4)开启定时器(该定时器用于记录某个被按下的按键所持续的时间t)。作为改进,所述扫描检测环节中,每一轮的全过程扫描,又细分log2(N)个阶段,无论在哪一个阶段的哪一次扫描检测,MCU都进行了以下相同的扫描检测过程:1)MUC根据当前所处的阶段,设置指定某纵向IO端口的电平为低,其余为高;2)MCU读取所有横向IO端口高低电平,并记录电平状态;3)将2)得到的状态,与一个临时缓冲区BufTmp的数据逐一进行对比,如果该状态已存在,则对应同一个状态的次数累计加1;反之,在BufTmp中增加该状态的数据,并将该状态的次数初始化为1;4)延时若干纳秒;5)重复2)~4)相同的操作共10次,并检测BufTmp中累计次数最多的那些数据,是否仅有唯本文档来自技高网...
一种可检测多个任意组合按键的扫描检测电路及方法

【技术保护点】
一种可检测多个任意组合按键的扫描检测电路,其特征在于,包括:MCU,所述MCU一共设有M+N+1个IO引脚,其中一个IO引脚带外部中断功能;矩阵按键电路,所述矩阵按键电路包括M条横向支路和N条纵向支路,横向支路与纵向支路交叉处形成一个键位,M条横向支路与N条纵向支路相交形成M×N个矩阵分布的键位;每个键位对应一个二极管、一个电容和一个接触开关,二极管的阳极与横向支路连接,二极管的阴极通过陶瓷电容与纵向支路连接,接触开关与电容并联;每个按键代表唯一一个键码;在横向支路的第一端形成M个横向IO端口,在纵向支路的第一端形成N个纵向IO端口,所述横向IO端口和纵向IO端口均与MCU的IO引脚连接;纵向支路的第二端通过上拉电阻后与电源VCC连接,当没有任何按键按下时,所有横向IO端口被电源VCC上拉到高电平;横向支路的第二端通过保护电阻后与电源VCC连接,保护电阻起到电平传递以及按键按下时防止对应的横向IO端口和纵向IO端口短路;或逻辑电路,包括M个二极管、电源VCC和电阻R113,每个二极管对应一个横向IO端口,该二极管、电源VCC和电阻R113组成所有的横向IO端口,电源VCC通过电阻R113与二极管阳极连接,电源VCC通过电阻R113输出至端口INT,端口INT与MCU外部中断功能的IO引脚连接。...

【技术特征摘要】
1.一种可检测多个任意组合按键的扫描检测电路,其特征在于,包括:MCU,所述MCU一共设有M+N+1个IO引脚,其中一个IO引脚带外部中断功能;矩阵按键电路,所述矩阵按键电路包括M条横向支路和N条纵向支路,横向支路与纵向支路交叉处形成一个键位,M条横向支路与N条纵向支路相交形成M×N个矩阵分布的键位;每个键位对应一个二极管、一个电容和一个接触开关,二极管的阳极与横向支路连接,二极管的阴极通过陶瓷电容与纵向支路连接,接触开关与电容并联;每个按键代表唯一一个键码;在横向支路的第一端形成M个横向IO端口,在纵向支路的第一端形成N个纵向IO端口,所述横向IO端口和纵向IO端口均与MCU的IO引脚连接;纵向支路的第二端通过上拉电阻后与电源VCC连接,当没有任何按键按下时,所有横向IO端口被电源VCC上拉到高电平;横向支路的第二端通过保护电阻后与电源VCC连接,保护电阻起到电平传递以及按键按下时防止对应的横向IO端口和纵向IO端口短路;或逻辑电路,包括M个二极管、电源VCC和电阻R113,每个二极管对应一个横向IO端口,该二极管、电源VCC和电阻R113组成所有的横向IO端口,电源VCC通过电阻R113与二极管阳极连接,电源VCC通过电阻R113输出至端口INT,端口INT与MCU外部中断功能的IO引脚连接。2.根据权利要求1所述的可检测多个任意组合按键的扫描检测电路,其特征在于:所述上拉电阻的阻值为10KΩ。3.根据权利要求1所述的可检测多个任意组合按键的扫描检测电路,其特征在于:所述保护电阻的阻值为100Ω。4.一种如权利要求1可检测多个任意组合按键的扫描检测电路的方法,其特征在于,包括以下步骤:(1)MCU上电后,马上初始化所有的IO口状态,(2)如果MCU响应外部中断,则进入按键的扫描检测过程;所述扫描检测过程包括两个环节:(2.1)扫描检测环节:对所有矩阵按键的检测,需要经过一轮又一轮的重复扫描过程;(2.2)数据分析处理环节,数据分析处理环节需要以下几个步骤:①在当前扫描结束后,所有的按键状态数据存放到Buf内存缓冲区中;将所有按下的按键全部找出来,将这类按键键值,逐个地与空键集合进行匹配,如果匹配发现有按下的按键为空键,则退出当前一轮扫描,等待下一轮,同时,MCU向上一层应用函数返回报错数值;②将当前一轮与前一轮、前二轮的按键扫描结果进行对比;如果连续3轮的扫描结果一致,则将当前一轮的Buf中的数据与前一个保存前一次也是满足连续3轮检测结果一致的BufPrev缓冲区数据进行对比,如果不一致,则结束当前一轮扫描,等待下一轮;③如果Buf与BufPrev对比的结果是一致的,说明没有任何按键按下或者弹起,直接进入到以下第⑤个步骤;反之,如果不一致,则对比并且找到Buf与BufPrev中每一个不同比特的数据;通过该不同比特的数据所处的位置,可定位唯一1个有发生变化的按键及其键码;而通过比特的变化,得知该按键是弹起还是按下;④在③的基础上,逐个初步判断某个已经按下的按键是否为刚按下,如果初步确认按键为弹起,则将对应按键的释放时间设置为0;反之,如果初步确认按键为按下,将初步确认为按下的按键对应的数据添加到Buf2中;⑤利用内部定时器定时中断的功能,逐个更新Buf2中的所有按键的按下时间和释放时间;...

【专利技术属性】
技术研发人员:何伟峰何欢潮罗立辉舒兆风罗超良
申请(专利权)人:广州飞达音响股份有限公司广州星光影音文化科技有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1