[0028] 以下结合附图对本发明作进一步说明。
[0029] 图1是矩阵式键盘扫描及编码电路原理框图,由矩阵式键盘400、第一缓冲寄存器101、第二缓冲寄存器102、状态码寄存器200、编码器300、数据选择单元500组成。
[0030] 图2是本发明实施例的矩阵式键盘400的电路图,共有2行、2列,共4个按键,由按键S1、按键S2、按键S3、按键S4和连接至电源+VCC的上拉电阻R1、上拉电阻R2、上拉电阻R3、上拉电阻R4,以及行三态缓冲器401、列三态缓冲器402、行状态寄存器403、列状态寄存器404组成。行三态缓冲器401的2个输出端Y1、Y2分别连接至2根行线,列三态缓冲器402的2个输出端Y3、Y4分别连接至2根列线;行三态缓冲器401和列三态缓冲器402的所有输入端X1~X4连接至低电平。
[0031] 行状态寄存器403的2个输入端D41、D42分别连接至2根行线,列状态寄存器404的2个输入端D43、D44分别连接至2根列线;行状态寄存器403的2个输出端Q41、Q42输出行状态信号I1、I2,列状态寄存器404的2个输出端Q43、Q44输出列状态信号I3、I4;行状态寄存器403的2个输出端与列状态寄存器404的2个输出端共同组成4位键盘状态信号输出端,输出键盘状态信号I1、I2、I3、I4。
[0032] 实施例中,行三态缓冲器401的使能输入EN1低电平有效,列三态缓冲器402的使能输入EN2高电平有效;EN1和EN2均连接至振荡器的CK取样脉冲输出端。行状态寄存器403与列状态寄存器404的接收脉冲输入端CLK3、CLK4均连接至振荡器的CK取样脉冲输出端,行状态寄存器403在CK取样脉冲的下降沿进行数据锁存,列状态寄存器404在CK取样脉冲的上升沿进行数据锁存。
[0033] 当行三态缓冲器401和列三态缓冲器402使用同型号的三态缓冲器,例如,同时使用三态缓冲器74HC241时,74HC241的使能输入为高电平有效,因此,在CK取样脉冲输出端与行三态缓冲器401的使能输入端EN1之间,需要增加一个非门。同样地,当行状态寄存器403和列状态寄存器404使用同型号的数据寄存器,例如,行状态寄存器403和列状态寄存器404均使用双D触发器74HC74组成数据寄存器时,74HC74的触发输入为上升沿有效,因此,在CK取样脉冲输出端与行状态寄存器403的接收脉冲输入端CLK3之间,需要增加一个非门。
[0034] 图1中的第一缓冲寄存器101、第二缓冲寄存器102、状态码寄存器200、编码器300、数据选择单元500组成扫描定位电路,其实施例电路图如图3所示。实施例矩阵式键盘电路输出的状态信号有4位,因此,第一缓冲寄存器101、第二缓冲寄存器102都要求寄存4位二进制数据,第一缓冲寄存器101的4个数据输入端D10~D13依次连接至I1、I2、I3、I4,第二缓冲寄存器102的4个数据输入端D14~D17也依次连接至I1、I2、I3、I4。
[0035] 数据选择单元500用于实现两路输入数据的选择排序与组合。实施例中,两路输入数据中的1路是4位数据J,J中包括J3、J2、J1、J0;另外1路是4位数据K,K中包括K3、K2、K1、K0;1路8位的输出数据是L。数据选择单元500的功能是,8位输出数据L有两种排序组合,一种排序组合是4位数据J在前,4位数据K在后,即输出L7~L0依次为J3、J2、J1、J0、K3、K2、K1、K0;另外一种排序组合是4位数据K在前,4位数据J在后,即输出L7~L0依次为K3、K2、K1、K0、J3、J2、J1、J0;两种排序组合受数据选择信号S的控制。
[0036] 数据选择单元500可以采用数据选择器、三态缓冲器,或者是其他方式实现。图4为数据选择单元500实施例原理图,由2个四2选1数据选择器501、502组成,501、502的数据选择信号S均连接至CP2扫描脉冲。当CP2为低电平时,四2选1数据选择器501、502选择通道0,即L7~L0等于K3、K2、K1、K0、J3、J2、J1、J0;当CP2为高电平时,四2选1数据选择器501、502选择通道1,即L7~L0等于J3、J2、J1、J0、K3、K2、K1、K0。
[0037] 状态码寄存器200要求寄存8位二进制数据,其8位数据输入端D27~D20连接至数据选择单元500的8位数据输出端L7~L0;编码器300的8个输入端A7~A0连接至状态码寄存器200的8个数据输出端Q27~Q20。编码器300输出经过扫描定位确定的4位二进制键号。
[0038] 图3实施例中,第一缓冲寄存器101、第二缓冲寄存器102、状态码寄存器200均由边沿触发器组成,优选由边沿触发的D触发器组成,例如,由双D触发器74HC74、4D触发器74HC175、8D触发器74HC273组成。第一缓冲寄存器101中的4个边沿触发器的触发输入端连接在一起组成接收脉冲输入端,连接至CP2扫描脉冲,下降沿进行数据锁存;第二缓冲寄存器102中的4个边沿触发器的触发输入端连接在一起组成接收脉冲输入端,连接至CP2扫描脉冲,上升沿进行数据锁存;状态码寄存器200的8个边沿触发器的触发输入端连接在一起组成接收脉冲输入端,连接至CP1时钟脉冲,上升沿进行数据锁存。
[0039] 图3实施例中,第一缓冲寄存器101、第二缓冲寄存器102、状态码寄存器200均由上升沿触发的8D触发器74HC273,由于第一缓冲寄存器101要求下降沿进行数据锁存,因此,CP2扫描脉冲需要经过一个非门反相后,再连接至第一缓冲寄存器101的接收脉冲输入端;另外,要使所述74HC273的清零功能处于无效状态,保证第一缓冲寄存器101、第二缓冲寄存器102、状态码寄存器200只具有触发功能。
[0040] 图3实施例中,编码器300为只读存储器。只读存储器的地址输入端A7~A0为编码器300的输入端,只读存储器的数据输出端D3~D0为编码器300的编码输出端C3~C0。
[0041] 实施例未画出产生CP1时钟脉冲、CP2扫描脉冲、CK取样脉冲的振荡器,振荡器为多谐振荡器,输出CP1时钟脉冲、CP2扫描脉冲和CK取样脉冲,CP1时钟脉冲的周期为20~100ms,CP2扫描脉冲为CP1时钟脉冲的二分频信号,CP1、CP2的波形如图5所示。CP1时钟脉冲、CP2扫描脉冲和CK取样脉冲也可以由矩阵式键盘扫描及编码电路之外的电路或者装置提供。
[0042] 矩阵式键盘扫描及编码方法的工作原理如下:
[0043] 图2中,矩阵式键盘的4个按键以2×2的矩阵形式排列,所有的行线与列线都通过上拉电阻接至电源+VCC。矩阵式键盘由CK取样脉冲控制,采用反转法获取键盘状态信号I4、I3、I2、I1。例如,没有键按下的键盘状态信号是1111,S1按下的键盘状态信号是1010,S1、S2同时按下的键盘状态信号是0010。键盘状态信号的4位二进制码称为键值。
[0044] CK取样脉冲控制对矩阵式键盘进行采样读取键值的方法是:在CK取样脉冲的低电平,通过行三态缓冲器401控制所有行线输出低电平,列三态缓冲器402输出高阻态开放列线;在CK取样脉冲的上升沿由列状态寄存器404采样读取列线状态作为键值的高2位;在CK取样脉冲的高电平,通过列三态缓冲器402控制所有列线输出低电平,行三态缓冲器401输出高阻态开放行线;在CK取样脉冲的下降沿由行状态寄存器403采样读取行线状态作为键值的低2位;上述过程周而复始,列状态寄存器404、行状态寄存器403输出的4位键值始终为矩阵式键盘的最新状态。
[0045] 从CK取样脉冲控制对矩阵式键盘进行采样读取键值的方法可知,行三态缓冲器401在CK取样脉冲的低电平使能有效时,同时要求列状态寄存器404在CK取样脉冲的上升沿进行数据锁存、列三态缓冲器402在CK取样脉冲的高电平使能有效、行状态寄存器403在CK取样脉冲的下降沿进行数据锁存。反过来,如果行三态缓冲器401在CK取样脉冲的高电平使能有效时,同时要求列状态寄存器404在CK取样脉冲的下降沿进行数据锁存、列三态缓冲器
402在CK取样脉冲的低电平使能有效、行状态寄存器403在CK取样脉冲的上升沿进行数据锁存。
[0046] 在上述CK取样脉冲控制采样读取键值的过程中,行状态寄存器403、列状态寄存器404进行采样的时刻恰好是列三态缓冲器402与行三态缓冲器401进行状态反转的时刻,正常工作下的行状态寄存器403或列状态寄存器404能够正确采样。如果要求有一定时序上的裕量,则可以对连接至列三态缓冲器402与行三态缓冲器401的CK取样脉冲进行延迟,方法是令CK取样脉冲经过RC延迟电路再连接至行三态缓冲器401与列三态缓冲器402的EN1、EN2,延迟时间由RC延迟电路决定,确定RC延迟电路的延迟时间的原则是,延迟的CK取样脉冲相位不超过90°;或者是CK取样脉冲经过几个门电路的缓冲后再连接至行三态缓冲器401与列三态缓冲器402的EN1、EN2,此时的延迟时间为所述几个门电路的总时延时间。
[0047] 第一缓冲寄存器101、第二缓冲寄存器102在CP2扫描脉冲控制下,交替对矩阵式键盘输出的状态信号I1、I2、I3、I4进行数据锁存;将最新锁存数据的缓冲寄存器的输出称为现态键值,稍前锁存数据的缓冲寄存器的输出称为前态键值,因此,第一缓冲寄存器101、第二缓冲寄存器102在CP2扫描脉冲控制下,交替输出现态键值与前态键值。
[0048] 结合实施例的图3与图5,CP2扫描脉冲下降沿过后,在CP2扫描脉冲的低电平状态,第一缓冲寄存器101输出的现态键值连接至数据选择单元500的输入端J3、J2、J1、J0,第二缓冲寄存器102输出的前态键值连接至数据选择单元500的输入端K3、K2、K1、K0,而此时数据选择信号S连接至CP2扫描脉冲,为低电平,数据选择单元500的输出L7~L0等于K3、K2、K1、K0、J3、J2、J1、J0,即前态键值在前,现态键值在后;CP2扫描脉冲上升沿过后,在CP2扫描脉冲的高电平状态,第一缓冲寄存器101输出的前态键值连接至数据选择单元500的输入端J3、J2、J1、J0,第二缓冲寄存器102输出的现态键值连接至数据选择单元500的输入端K3、K2、K1、K0,而此时数据选择信号S连接至CP2扫描脉冲,为高电平,数据选择单元500的输出L7~L0等于J3、J2、J1、J0、K3、K2、K1、K0,同样是前态键值在前,现态键值在后。
[0049] CP2扫描脉冲在控制第一缓冲寄存器101、第二缓冲寄存器102交替锁存输出前态键值、现态键值,以及数据选择单元500进行数据选择排序与组合的时刻,会形成的短暂的不确定状态。状态码寄存器200的作用是消除该不确定状态的影响。
[0050] 状态码寄存器200的输入为数据选择单元500输出的前态键值与现态键值,输出同样为前态键值与现态键值。将状态码寄存器200进行数据锁存的时刻的CP1时钟脉冲的边沿称为状态锁存沿,实施例中为CP1的上升沿;CP2扫描脉冲为CP1时钟脉冲的二分频信号,将控制CP2扫描脉冲翻转的CP1时钟脉冲的有效触发边沿称为状态扫描沿;实施例中,状态扫描沿为CP1时钟脉冲的下降沿,即第一缓冲寄存器101、第二缓冲寄存器102、数据选择单元500锁存输出前态键值、现态键值的时刻在CP1时钟脉冲的下降沿,因此,在CP1时钟脉冲的上升沿,数据选择单元500输出的前态键值、现态键值已经进入稳态,消除了前述的不确定状态的影响。
[0051] 如果时钟脉冲CP1控制扫描脉冲CP2翻转的有效触发边沿为下降沿,则时钟脉冲CP1控制扫描脉冲CP2翻转的无效触发边沿为上升沿;如果时钟脉冲CP1控制扫描脉冲CP2翻转的有效触发边沿为上升沿,则时钟脉冲CP1控制扫描脉冲CP2翻转的无效触发边沿为下降沿。将时钟脉冲CP1控制扫描脉冲CP2翻转的无效触发边沿称为状态锁存沿;实施例中,状态扫描沿为CP1时钟脉冲的下降沿,状态锁存沿为CP1时钟脉冲的上升沿。
[0052] 状态码寄存器200数据输出端输出的4位现态键值和4位前态键值共同组成8位状态码。
[0053] 所述的8位状态码用于识别矩阵式键盘的当前状态和操作状态。例如,本实施例中,无键按下的状态码是11111111;S1键单键按下操作的状态码是11111010;S1键单键按下且维持的状态码是10101010;S1键单键释放操作的状态码是10101111;S2键单键按下操作的状态码是11110110;S4键单键按下操作的状态码是11110101;S2+S1组合操作的S1按下操作,表示先按下S2后,在S2维持按下的状态再按下S1的操作,该操作的状态码是01100010。
[0054] 编码器300用于将状态码转换为键号。实施例中,设有6个有效的键盘操作与状态,包括:
[0055] 操作0:按键S1的单键按下操作,键号为0000;
[0056] 操作1:按键S2的单键按下操作,键号为0001;
[0057] 操作2:按键S3的单键按下操作,键号为0010;
[0058] 操作3:按键S3单键按下后的维持状态,键号为0011;
[0059] 操作4:按键S4单键按下后,再按下按键S2的组合键操作,键号为0100;
[0060] 操作5:按键S1的单键释放操作,键号为0101。
[0061] 根据上述规定得到的状态码和键号见编码表1:
[0062] 表1编码表
[0063]键盘操作 状态码(地址) 键号(存储数据)
S1单键按下 11111010 0000
S2单键按下 11110110 0001
S3单键按下 11111001 0010
S3单键按下维持 10011001 0011
S4+S2组合操作 01010100 0100
S1单键释放 10101111 0101
其他操作或状态 ******** 1111
[0064] 编码器300为组合逻辑电路,设计电路,满足表1的逻辑关系即可。
[0065] 实施例的编码器300优选由只读存储器组成。只读存储器有8位地址,共28个4位二进制存储单元。6个有效的键盘操作与状态有6个有效状态码,对应6个有效的键号;将状态码作为只读存储器的地址A7~A0,在与6个有效状态码相对应的存储单元中,将相应的键号作为存储数据写入。6个有效的键盘操作与状态之外产生的状态码为无效状态码,即表1中的其他操作或状态所产生的为无效状态码;在其他存储单元中,全部写入无效键号,无效键号为6个有效键号之外的一个值,实施例中,无效键号为1111。
[0066] 只读存储器一直工作在数据输出状态。当只读存储器具有片选控制、数据输出缓冲控制功能时,应使其片选控制、数据输出缓冲控制处于有效状态。
[0067] 实施例中的键号为4位二进制码。键号的二进制位数可以根据需要增加,或者减少,此时,只需选择与此相匹配的只读存储器即可。设键号的二进制位数为M,M值的选择应满足2M大于等于有效键号与无效键号的数量之和。当矩阵式键盘有N位键盘状态信号输出时,只读存储器需要有2×N位地址输入,M位数据输出。
[0068] 如果需要增减按键操作功能或者是调整按键操作功能,只需根据需要修改表1,将修改后的内容重新写入只读存储器的存储内容即可。
[0069] 实施例中,当矩阵式键盘S1单键按下时,编码器300在S1单键按下后的CP1时钟脉冲的状态锁存沿开始,至下一个CP1时钟脉冲的状态锁存沿为止,编码输出端C3~C0输出键号0000;当矩阵式键盘S2单键按下时,编码器300在S2单键按下后的CP1时钟脉冲的状态锁存沿开始,至下一个CP1时钟脉冲的状态锁存沿为止,输出键号0001;当矩阵式键盘先按下S4后,再按下S2,编码器300在S2组合键按下后的CP1时钟脉冲的状态锁存沿开始,至下一个CP1时钟脉冲的状态锁存沿为止,输出键号0100;当矩阵式键盘S1单键释放时,编码器300在S1单键释放后的CP1时钟脉冲的状态锁存沿开始,至下一个CP1时钟脉冲的状态锁存沿为止,输出键号0101;因此可以看出,当识别的是矩阵式键盘的有效按键操作时,编码器300在该有效按键操作后的CP1时钟脉冲的状态锁存沿开始,至下一个CP1时钟脉冲的状态锁存沿为止,输出持续时间为一个CP1时钟脉冲周期宽度的有效键号。
[0070] 实施例中,当矩阵式键盘S3单键按下时,编码器300在S3单键按下后的CP1时钟脉冲的状态锁存沿开始,至下一个CP1时钟脉冲的状态锁存沿为止,输出键号0010;在接下来的CP1时钟脉冲的状态锁存沿开始,至S3单键按下维持状态结束后的下一个CP1时钟脉冲的状态锁存沿为止,编码器300输出键号0011;因此可以看出,当识别的是矩阵式键盘的维持状态时,编码器300输出有效键号的持续时间与该维持状态的持续时间相适应。
[0071] 当键盘的状态或操作为表1中所述的6个有效的键盘操作与状态之外时,编码器300输出无效键号1111。无论是输出有效键号,还是输出无效键号,编码器300改变输出内容的时刻为CP1时钟脉冲的状态锁存沿;实施例中,编码器300改变输出内容的时刻为CP1时钟脉冲的上升沿。
[0072] CP1时钟脉冲的周期为矩阵式键盘的扫描周期。键盘扫描周期在20ms以上时,能够有效地避开了键盘按键抖动的影响;键盘扫描周期在100ms以下时,不至于遗漏键盘操作;因此,CP1时钟脉冲的周期应该控制在20~100ms。
[0073] CK取样脉冲的周期要求不大于CP1时钟脉冲的周期,这样,在CP1的二分频信号CP2扫描脉冲的每个触发沿交替获取键值,即获取状态码时,能够保证列状态寄存器404、行状态寄存器403输出的4位键值始终为矩阵式键盘的最新状态。CK取样脉冲的特例是直接使用CP1时钟脉冲作为CK取样脉冲。
[0074] 图6是本发明实施例的键盘状态变化脉冲产生单元的电路图。当识别的是矩阵式键盘的有效按键操作时,编码器300在该有效按键操作后的CP1时钟脉冲的状态锁存沿开始,至下一个CP1时钟脉冲的状态锁存沿为止,输出持续时间为一个CP1时钟脉冲周期宽度的有效键号。接收所述矩阵式键盘输出的装置,需要时刻查询矩阵式键盘的输出,获取键号。查询的周期间隔必须小于CP1时钟脉冲的周期。
[0075] 图6所示电路用于判断矩阵式键盘输出的键号是否发生改变,当矩阵式键盘输出的键号发生改变时,输出键盘状态变化脉冲,用于辅助矩阵式键盘的接收装置接收矩阵式键盘输出的键号,例如,将键盘状态变化脉冲作为接收装置的中断请求信号。
[0076] 图6所示电路由延迟缓冲器601、异或门602、异或门603、异或门604、异或门605、或门606组成。延迟缓冲器601由只具有触发功能的4个边沿触发器组成,4个边沿触发器的触发输入端为延迟缓冲器601的接收脉冲输入端,均连接至振荡器的CP1时钟脉冲输出端;延迟缓冲器601在CP1时钟脉冲的状态锁存沿进行数据锁存。
[0077] 延迟缓冲器601用于对编码器300的编码输出端的4位数据C3~C0分别进行延迟处理。延迟缓冲器601的4个数据输入端D63~D60连接至编码器300的编码输出端C3~C0,延迟缓冲器601的4个数据输出端Q63~Q60相应输出的数据是C31~C01;C31~C01经过延迟缓冲器601的一级缓冲后,其信号比C3~C0延迟一个CP1时钟脉冲周期,图7所示为本发明实施例的键盘有效操作的相关波形示意图。设在CP1时钟脉冲的T1区间,矩阵式键盘存在一次有效操作,实施例的有效操作包括:S1单键按下、S2单键按下、S3单键按下、S4+S1组合操作的S1按下、S4+S2组合操作的S2按下、S1单键释放。在一次有效操作的下一个状态锁存沿,即图7中CP1时钟脉冲T1区间之后的上升沿,编码器300输出的编码C3~C0发生改变;在T2区间,编码器300输出一个周期的有效编码C3~C0;在T3、T4及之后区间,编码器300输出的编码C3~C0再一次改变且进入维持状态,该维持状态可能是例如S1单键按下后面的维持状态,输出无效键号,也可能是S3单键按下后面的维持状态,输出有效键号,直到下一次有效操作。
[0078] 图7中的D6脉冲示意表示编码器300输出的编码C3~C0是处于维持状态,没有变化,还是发生改变,实际电路中不存在所述的D6脉冲。如图7所示,D6脉冲为低电平,示意表示编码器300输出的编码C3~C0是处于维持状态,没有变化;D6脉冲为高电平,示意表示编码器300输出一个周期的有效编码C3~C0。图7中的Q6反映的是C31~C01的变化情况,显然,Q6比D6延迟一个CP1时钟脉冲周期。同样,实际电路中不存在所述的Q6脉冲。
[0079] 图7中,编码器300输出的编码C3~C0是处于维持状态,没有变化,还是发生改变,实际是由4位延迟缓冲器601、异或门602、异或门603、异或门604、异或门605、或门606所组成的逻辑电路完成。4个异或门分别与编码器300编码输出端C3~C0中的1位相对应,输入分别为4位延迟缓冲器601的输入、输出信号。例如,异或门602的两个输入信号分别为C0和C01,C01比C0延迟一个CP1时钟脉冲周期,因此,当C0发生变化时,异或门602输出1个CP1时钟脉冲周期宽度的正脉冲;当C0为一个CP1时钟脉冲周期宽度变化信号时,异或门602输出2个CP1时钟脉冲周期宽度的正脉冲。异或门603、异或门604、异或门605分别判断C1~C3是否发生变化,原理与判断C0是否发生变化相同。异或门602、异或门603、异或门604、异或门605的输出端分别连接至或门606的输入端,或门606用于综合判断C0~C3是否发生变化,只要C0~C3发生变化,或门606即输出键盘状态变化脉冲F,该脉冲为正脉冲。
[0080] 实施例中,延迟缓冲器601选择上升沿触发的8D触发器74HC273。
[0081] 延迟缓冲器601还可以采用其他方案,例如,采用RC电路,利用4个RC电路分别对C0~C3进行延迟;如果RC电路的延迟时间小于一个CP1时钟脉冲周期,则编码器300输出一个周期的有效编码C3~C0时,在输出有效编码C3~C0开始和输出有效编码C3~C0结束都产生一个键盘状态变化脉冲,键盘状态变化脉冲的宽度等于RC电路延迟时间;如果RC电路的延迟时间大于等于一个CP1时钟脉冲周期,则编码器300输出一个周期的有效编码C3~C0时,在输出有效编码C3~C0开始时产生一个键盘状态变化脉冲,脉冲宽度大于等于2个CP1时钟脉冲周期。要求RC电路的延迟时间不超过2个CP1时钟脉冲周期,以免产生漏报。
[0082] 实施例中,第一缓冲寄存器101在CP2扫描脉冲的下降沿进行数据锁存,第二缓冲寄存器102在CP2扫描脉冲的上升沿进行数据锁存。也可以采用第一缓冲寄存器101在CP2扫描脉冲的上升沿进行数据锁存,第二缓冲寄存器102在CP2扫描脉冲的下降沿进行数据锁存的方式,此时,数据选择单元500的输出以现态键值在前、前态键值在后的方式组成状态码。现态键值在前、前态键值在后的方式组成的状态码同样适用于本发明。
[0083] 实施例中,改变数据选择单元500的输入连接方式,同样可以以现态键值在前、前态键值在后的方式组成状态码。
[0084] 所述的发明电路中,将对单键操作、组合键操作、键盘维持状态操作的定位,由CP1时钟脉冲、CP2扫描脉冲控制转换成同一二进制长度的状态码,采用统一编码的方式进行处理,单键操作、组合键操作、键盘维持状态操作仅体现在状态码的不同上;如果需要增减按键操作功能或者是调整按键操作功能,不需要修改键盘扫描电路结构,只需根据增减后的状态码表更新编码器300、即重新写入更新只读存储器的存储内容即可。所述发明电路没有使用单片机、ARM等微控制器,不用运行程序,工作可靠。