可处理多按键同时按下的mcu键盘电路及其实现方法

文档序号:6633506阅读:672来源:国知局
可处理多按键同时按下的mcu键盘电路及其实现方法
【专利摘要】本发明提供了一种可处理多按键同时按下的MCU键盘电及其实现方法。其中的键盘电路包括MCU,M个按键S1~SM,M个电阻R1~RM,公共电阻,电压/频率转换器,施密特触发器,或非门;Ri的一端连接至VCC电源、另一端连接至按键Si的一端(1≤i≤M),全部按键的另一端均连接于A点并通过公共电阻接地;A点与电压/频率转换器的输入端和施密特触发器的输入端分别连接;电压/频率转换器的输出端连接到或非门的一输入端,施密特触发器的输出端连接到或非门的另一输入端,或非门的输出端连接至MCU的/INT1引脚。本发明大大节省了MCU的硬件资源和多键同时按下时的处理时间,具有简单、有效、可靠等优点。
【专利说明】可处理多按键同时按下的MCU键盘电路及其实现方法
[0001]

【技术领域】
[0002]本发明涉及键盘【技术领域】,尤其涉及一种简单、高效、特别节省MCU硬件资源的可处理多按键同时按下的MCU键盘电路及其实现方法。
[0003]

【背景技术】
[0004]通常MCU的键盘电路的实现方法如下:
(I)独立键盘法
一般地,当按键个数不大于8时,可以采用这种方法,每个按键连接一根MCU的I/O线,这样,有几个按键就需要占用几根MCU的I/O线,这种方法占用MCU硬件资源较多,当多键同时按下时,需要用软件对多键值进行处理,会占用CPU更多的时间。
[0005](2)矩阵键盘法
一般地,当按键个数大于8时,多采用此法,将按键排列成矩阵形式,将矩阵的行列连接到MCU的I/O线,所占用MCU的I/O线数为该矩阵的行数与列数之和,此时,当有多个键同时按下时,也需要通过软件处理分析被同时按下的键值,程序较复杂,占用CPU时间较多。
[0006]上述两种键盘电路的实现方法,所占用的MCU的I/O线较多,这样就给需要连接较多外设的MCU系统带来了 I/O资源不足的麻烦,同时上述方法中在处理多个按键被同时按下时,都是采用软件的方法实现,这样会占用CPU更多的时间,降低系统效率。
[0007]


【发明内容】

[0008]本发明的目的在于提供一种可处理多按键同时按下的MCU键盘电路及其实现方法,解决现有技术中MCU系统的I/O资源不足的问题;
本发明的另一目的在于提供一种可处理多按键同时按下的MCU键盘电路及其实现方法,克服现有技术中在处理分析被同时按下的多个按键时占用过多CPU时间的缺陷。
[0009]本发明的目的是通过以下技术方案实现的。
[0010]一种可处理多按键同时按下的MCU键盘电路,包括MCU和M个按键SI?SM,还包括:与按键一一对应的M个电阻Rl?RM、公共电阻、电压/频率转换器,施密特触发器,或非门;
其中,Ri的一端连接至VCC电源、另一端连接至按键Si的一端(I彡i彡M),按键SI?SM的另一端均通过公共电阻接地;
所述按键SI?SM的与公共电阻连接的连接端均连接于A点,A点与电压/频率转换器的输入端和施密特触发器的输入端分别连接;
电压/频率转换器的输出端连接到或非门的一个输入端,施密特触发器的输出端连接到或非门的另一个输入端,或非门的输出端连接至MCU的/INTl引脚;
当无按键按下时,A点电压为低,施密特触发器输出为高电平,或非门输出为低电平,MCU中断信号/INTl无效;当有按键被按下时,A点产生一定的电压值,施密特触发器的输入端产生由零电压向正电压上的变化,MCU中断信号/INTl有效,MCU根据电压/频率转换器输出信号的脉宽值识别当前被按下的一个或者多个按键。
[0011]其中,所述MCU中包含有计数器,该计数器在所述/INTl引脚为高电平时开始计数、在所述/INTl引脚为低电平时停止计数,用于测量所述电压/频率转换器输出信号的脉宽值。
[0012]其中,所述A点还通过电容Cl接地。
[0013]一种如上所述的可处理多按键同时按下的MCU键盘电路的实现方法,包括:初始化步骤,以及在有一个或者多个按键被同时按下时的按键识别方法;
所述初始化步骤包括:定义按键标志位并置初值零;设置脉宽缓冲区并清零;开1(^外部中断并设置为下降沿有效;将不同按键或多个按键同时被按下时的各种按键信息与V/F输出信号的脉宽值的映射关系表存入指定缓冲区;
所述按键识别方法包括:
在按键标志位被置位时,测量电压/频率转换器输出信号的脉宽值,并通过MCU外部中断读取脉宽值,存入脉宽缓冲区;
在主程序的按键处理函数中,根据所述脉宽值和所述映射关系表识别当前被按下的一个或者多个按键。
[0014]其中,通过MCU中的计数器来测量V/F输出脉冲的脉宽值,所述计数器在所述/INTl引脚为高电平时开始计数、在所述/INTl引脚为低电平时停止计数。
[0015]其中,在根据所述脉宽值和所述映射关系表识别当前按键信息时,去除当前按键信息对应的第一个脉宽值数据和最后一个脉宽值数据,对其他脉宽值数据求平均值后作为识别依据。
[0016]其中,还包括:在识别出当前按键信息并进行处理后,将所述按键标志位清零。
[0017]与现有技术相比,本发明的有益效果在于:
(1)采用电阻网络和电压/频率转换器结合法实现键盘电路,简单、高效、特别节省MCU资源、可以处理多键同时按下;
(2)采用一根MCU的I/O线启动MCU计数器记录脉宽值,并通过中断法读取脉宽值,最后通过脉宽值识别键值的方法,特别节省CPU的硬件资源和时间;
(3)通过电容与施密特触发器的配合,提升了系统的有效性、可靠性。
[0018]

【专利附图】

【附图说明】
[0019]图1是本发明实施例中MCU键盘电路原理图;
图2是本发明实施例中MCU键盘电路的实现方法流程图。
[0020]图3是本发明实施例中MCU中计数器的工作原理图;
图4是图1中B、C、D三点的波形示意图。
[0021]

【具体实施方式】
[0022]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0023]请参阅图1,本发明提出的MCU键盘电路包括:M个按键S1、S2.....SM,以及与按键一一对应的M个电阻Rl、R2.....RM,公共电阻,电容,电压/频率转换器(V/F),施密特触发器,或非门,MCU。本实施例中,M的值为8,即包括了 8个按键以及8个电阻R。
[0024]其中,Ri的一端连接至VCC电源、另一端连接至按键Si的一端(I ( i彡M),所有按键S的另一端同时通过公共电阻R9接地。另外,全部按键S的与公共电阻R9连接的连接端连接于一点(本实施例中设为A点),A点与V/F的输入端和施密特触发器的输入端分别连接。V/F的输出端连接到或非门的一个输入端,施密特触发器的输出端连接到或非门的另一个输入端,或非门的输出端连接至MCU的/INTl引脚。另外,A点还通过电容Cl接地,其目的为:一是稳定V/F的输入;二是当有小毛刺过来时,它与施密特触发器一起滤掉毛刺的干扰,保证中断的有效性。
[0025]上述MCU键盘电路中,当无按键按下时,A点电压为低,施密特触发器输出为高电平,或非门输出为低电平,MCU中断信号/INTl无效;当有按键被按下时,A点产生一定的电压值,施密特触发器的输入端产生由零电压向正电压上的变化,MCU中断信号/INTl有效,MCU根据电压/频率转换器输出信号的脉宽值识别当前被按下的一个或者多个按键。
[0026]请参阅图2所示,本实施例中MCU键盘电路的实现方法包括:
201、初始化步骤。
[0027]具体包括:定义按键标志位并置初值零;设置脉宽缓冲区并清零JtMCU计数器进行初始化;开MCU外部中断并设置为下降沿有效;将不同按键或多个按键同时被按下时与V/F输出信号的脉宽值的对应关系数据存入指定缓冲区。
[0028]其中,计数器如图3所示,其初始化方法具体为:将计数器的C/T位置O即定时方式,TRl置1,GATE置0,加I计数器初值THl、TLl都置为0,可见,只有/INTl引脚为高电平,计数器才开始工作,当/INTl引脚变为低电平时,加I计数器就停止计数,此时加I计数器(THl和TLl)的值与机器周期(12倍的晶振周期)相乘就对应于图1中D点脉冲的宽度(如T)。当/INTl引脚由高电平变为低电平时,产生外部中断,在中断函数中读取加I计数器的值,即脉宽值,并存入脉宽缓冲区,并将THl和TLl清零。
[0029]步骤202、在发现有按键被按下时,置位按键标志位。
[0030]步骤203、通过MCU的计数器测量电压/频率转换器输出信号的脉宽值,并通过MCU外部中断读取脉宽值,存入脉宽缓冲区。
[0031 ] V/F的输出波形如图4中B点的波形,当不同的按键被按下或多个按键被同时按下时,A点都将产生不同的电压,则V/F也会相应地输出不同频率的脉冲信号,也就是说,不同的单个按键被按下或多个不同的按键被同时按下时均对应于B点不同的脉宽值,因而本实施例读取脉宽值作为后续按键识别的判断依据。
[0032]本实施例中,图1中B、C、D各点的波形示意图如图4所示,B点脉冲信号的脉宽随着按键的不同而不同;当没有键被按下时,C点为高电平,当有键被按下时,C点变为低电平;B、C经过或非门后产生D点,D点连接MCU的/INT1,它有两个作用:一是高电平时启动计数器,使得计数器开始计数,二是其下降沿时使MCU产生外部中断,并停止计数器工作。由图4可见,当有按键按下时,D点为高电平时,启动计数器,D点下降沿时,产生/INTl中断,同时停止计数器工作,在中断程序中,读取计数器的THl和TLl的值,即脉宽值,存入脉宽缓冲区。
[0033]步骤204、在主程序的按键处理函数中,根据所述脉宽值和预存的映射关系表识别当前被按下的一个或者多个按键信息。
[0034]本步骤中,按键处理函数读取与当前按键相关的脉宽值并进行处理时,优选地去除当前按键对应的第一个脉宽值数据和最后一个脉宽值数据,其他数据求平均值。
[0035]205、将按键标志位清零。由于已识别出当前被按下的按键值,所以此时需要将按键标志清零,返回步骤201,待下一次有按键被按下时,再次产生中断及进行后续的按键识别。
[0036]综上所述,(I)本发明采用电阻网络和电压/频率转换法,使得不同单个按键按下或多个键同时按下时,其对应于V/F的输出信号的脉冲宽度不同,通过获取V/F的输出信号的脉宽值,识别被按下的按键是哪一个或哪几个。
[0037](2)这种读取键值的方法,占用MCU的硬件资源少(只需用到MCU的一个计数器和一个外部中断,一根I/O线),占用CPU的时间也很少(主要通过中断完成)。
[0038](3)可以识别某单个按键或某几个按键同时被按下,根据不同情况下对应的V/F输出信号的脉宽值不同而识别。
[0039](4)采用电容与施密特触发器组合的方法,使得键盘在没有键被按下或受到环境干扰时,计数器不动作,不记录V/F输出信号的脉宽,也不产生MCU中断;当按键被按下时,计数器I才开始记录V/F输出信号的脉宽,当一个脉宽的时间结束后,外部中断I就会被触发。
[0040](5)进入外部中断I中断程序后,置按键标志,读取计数器I中加I计数器的值,即脉宽值,并存入脉宽数据缓冲区。
[0041]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种可处理多按键同时按下的MCU键盘电路,包括MCU和M个按键SI?SM,其特征在于,还包括:与按键一一对应的M个电阻Rl?RM,公共电阻,电压/频率转换器,施密特触发器,或非门; 其中,Ri的一端连接至VCC电源、另一端连接至按键Si的一端(I彡i彡M),按键SI?SM的另一端均通过公共电阻接地; 所述按键SI?SM的与公共电阻连接的连接端均连接于A点,A点与电压/频率转换器的输入端和施密特触发器的输入端分别连接; 电压/频率转换器的输出端连接到或非门的一个输入端,施密特触发器的输出端连接到或非门的另一个输入端,或非门的输出端连接至MCU的/INTl引脚; 当无按键按下时,A点电压为低,施密特触发器输出为高电平,或非门输出为低电平,MCU中断信号/INTl无效;当有按键被按下时,A点产生一定的电压值,施密特触发器的输入端产生由零电压向正电压上的变化,MCU中断信号/INTl有效,MCU根据电压/频率转换器输出信号的脉宽值识别当前被按下的一个或者多个按键。
2.如权利要求1所述的可处理多按键同时按下的MCU键盘电路,其特征在于,所述MCU中包含有计数器,该计数器在所述/INTl引脚为高电平时开始计数、在所述/INTl引脚为低电平时停止计数,用于测量所述电压/频率转换器输出信号的脉宽值。
3.如权利要求2所述的可处理多按键同时按下的MCU键盘电路,其特征在于,所述A点还通过电容Cl接地。
4.如权利要求1至3任一所述的可处理多按键同时按下的MCU键盘电路的实现方法,其特征在于,包括:初始化步骤,以及在有一个或者多个按键被同时按下时的按键识别方法; 所述初始化步骤包括:定义按键标志位并置初值零;设置脉宽缓冲区并清零;开1(^外部中断并设置为下降沿有效;将不同按键或多个按键同时被按下时的各种按键信息与V/F输出信号的脉宽值的映射关系表存入指定缓冲区; 所述按键识别方法包括: 在按键标志位被置位时,测量电压/频率转换器输出信号的脉宽值,并通过MCU外部中断读取脉宽值,存入脉宽缓冲区; 在主程序的按键处理函数中,根据所述脉宽值和所述映射关系表识别当前被按下的一个或者多个按键。
5.如权利要求4所述的可处理多按键同时按下的MCU键盘电路的实现方法,其特征在于,该方法中,通过MCU中的计数器来测量V/F输出脉冲的脉宽值,所述计数器在所述/INTl引脚为高电平时开始计数、在所述/INTl引脚为低电平时停止计数。
6.如权利要求4所述的可处理多按键同时按下的MCU键盘电路的实现方法,其特征在于,该方法中,在根据所述脉宽值和所述映射关系表识别当前按键信息时,去除当前按键信息对应的第一个脉宽值数据和最后一个脉宽值数据,对其他脉宽值数据求平均值后作为识别依据。
7.如权利要求4所述的可处理多按键同时按下的MCU键盘电路的实现方法,其特征在于,该方法还包括:在识别出当前按键信息并进行处理后,将所述按键标志位清零。
【文档编号】G06F3/02GK104461035SQ201410626425
【公开日】2015年3月25日 申请日期:2014年11月10日 优先权日:2014年11月10日
【发明者】刘均, 邓芳鸿, 李剑锋 申请人:深圳市元征科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1