专利名称::键盘扫描电路及方法
技术领域:
:本发明涉及一种键盘,特别涉及一种键盘扫描电路及方法。
背景技术:
:键盘是电脑、PDA(个人数字助理)、手机等电子产品中主要的人机对话设备。目前,电子产品的功能越来越完备,要完成控制复杂多样的功能,这就要求键盘要提供足够多的按键。从结构上来看,键盘一般分为外壳、按键及电路板三大部分。电路板是键盘的核心,位于键盘的内部,由逻辑电路和控制电路所组成。其中,键盘的逻辑电路提供按键的矩阵排列方式;键盘的控制电路分为确定按键位置的扫描电路、产生被按下键代码的编码电路和将代码送入主机的接口电路。其中,扫描电路一般采用软件对键盘上的按键进行扫描来确定按键的位置。现有矩阵键盘扫描电路大多使用单片机I/O口来进行键盘扫描以控制键盘的按键部分。如图2所示矩阵键盘扫描电路102包括按N行N列排列的NxN个按键、N个电阻、2N个I/0。在矩阵键盘扫描电路102中,N根行线和N根列线交叉放置形成NxN个交叉点,每个交叉点都设置一个按键SlSn2。按4建的两端分别与相应的行线和列线连接;每根行线与一个I/O口连接。每根列线一端与一个I/O口连接,其另一端通过一电阻接到+5V电源上。当无按键按下时,列线呈高电平状态;当有按键按下时,相应的行、列线将导通,此时,列线的电平将由与此列线相连的行线的电平决定,因此,通过对相应的行线设置为低电平,可以识别按键是否被按下。所述矩阵键盘扫描电路102通常采用行列扫描方法来确定按下之按键所在的行列位置。所述行列扫描法是指把键盘的行线所对应的I/O口设置为输出口,列线所对应的I/O口设置为输入口;在扫描时,轮流将输出口设置为低电平,其它的输出口设置为高电平;再读取输入口的电平状态,并根据输入口发生的电平变化判断所按的按键。使用这种键盘扫描电路,如控制键盘的I/O口数为2N,最大按键数量是N2。这种键盘扫描电路的缺陷在于占用过多的I/O口资源。另外,为了降低硬件成本市场上推出了大量的小型单片机,而这些小型单片机的主要特点是1/0口的数量少,如果使用上述矩阵键盘扫描电路就会使得有限的I/O口资源变得更为紧张。
发明内容有鉴于此,有必要提供一种用少量的I/O口实现多按键的键盘扫描电路。此外,还有必要提供一种键盘扫描方法。一种键盘扫描电路,其包括按N根列线、N根第一行线、第二行线、NxN个按键、N个I/0口、N个二极管、N个具有阻值元件以及一电源,其中N为自然数;所述N根列线分别与所述N根第一行线及一第二行线交错放置呈矩阵方式排列形成Nx(N+l)个交叉点,其中有NxN个交叉点放置所述NxN个按键,而其它的交叉点上没有放置按键;在所述NxN个按键中,每个按键的第一端电性接在相应的行线上;第二端电性接在相应的列线上。在所述N根第一行线中,每才艮分别通过一个二极管与一个I/O口电性相连,所述二极管的阴极与所述I/O口电性相连,所述二极管的阳极与相应的行线上按键的第"端电性相连;所述第二行线接地。在所述N根列线中,每根列线分别通过一具有阻值元件接在电源VCC上,所述具有阻值元件为电阻。所述N才艮第一行线与所述N根列线——对应,所述每对——对应连通的第一行线和列线之间的N个交叉点上没有放置按键,且每对一一对应的第一行线和列线经两个互相短接的第一节点和第二节点电性连通,所述第一节点电性接在所述对应^亍线上的I/O口与二极管的阴极之间,所述第二节点电性接在所述对应列线上的电阻未接在电源VCC的一端。上述键盘扫描电路,由于电路中接入二极管,保证了按键信号的单一流向,可以将相应的行线与列线彼此间的按键信号进行隔离,因此,使得行线和列线复用,进而减少了I/O口的数量。另外,上述键盘扫描电路还将一根4亍线接J4作为该4亍的输出又可以减少一个I/O口,乂人而可以用N个I/O口实现NxN个按键的键盘扫描电路。使用上述键盘扫描电路结构简单,并且比用2N个I/O口实现NxN个按键的传统矩阵键盘扫描电路少用了N个I/O口,降低了成本。一种键盘的扫描方法,包括以下步骤设置与若干第一行线电性连接的若干个I/O口为输入口,设置接地的第二4亍线为输出;读取所述若干个1/0口的电平状态;判断所述接地的第二行线上是否有按键按下;若所述接地的第二行线上有按键按下,停止扫描;若所述接地的第二行线上没有按键按下,依次设置所述若千个I/O口为低电平输出口,且对应地设置除低电平输出口之外的I/O口为输入口;判断设置为低电平输出口的I/O口所对应的行线上是否有按键被按下。图1为现有的矩阵键盘扫描电路图。图2为本发明一较佳实施方式的键盘扫描电路的电路图。图3为当I/O口为4时,本发明一较佳实施例的键盘扫描电路的电路图。图4为当I/O口为5时,本发明一较佳实施例的键盘扫描电路的电路图。图5为图2中键盘扫描电路的扫描方法的流程图。图6为图3中键盘扫描电路的扫描方法的流程图。具体实施方式请参阅图2,本发明一较佳实施方式的键盘扫描电路103包括N+1根行线L。~Ln、N根列线P广Pn、NxN个按键So广S。(n-D、N个I/O口K广Kn、N个电阻R,Rn、N个二极管D广Dn及一电源VCC,其中N为自然数。N才艮列线和N+l根行线交错放置呈矩阵方式排列形成Nx(N+l)个交叉点。在所述N+l根行线中,其中有一根行线接地。在所述Nx(N+l)个交叉点中,其中有NxN个交叉点分别对应》支置所述的NxN个4姿4建,而其它的N个交叉点处没有放置按键。在所述按键NxN个按键中,各个按键的第一端与相应的行线电性相连,而第二端与相应的列线电性相连。在行线LQ~Ln中,行线L。由按键S(HSn(n-D的第一端顺次电性连接而成,并且行线L。接地。其它的各行线分别由一1/0口、一第一节点、一二极管及N-l个按键的第一端顺次电性连接而成。其中,二极管的阴极与所述第一节点相连,二极管的阳极接到与其最接近的按键的第一端。如行线L1,其包括顺次电性连接的I/O口K,、第一节点J"二极管D,及N-1个按键S,广S,n的第一端。其中,二极管D,的阴极与第一节点J!电性相连,而二极管的阳极与按键S,2的第一端电性相连;按键S,2S^各有第一端顺次电性连接。同样,对于行线Lm,其中m为自然数,且2=<111<=11,其包括顺次电性连接的的I/O口Km、第一节点Jm、二极管Dm及N-l个按键Sm,Sm一山、Sm(m+1)~Smn。其中,二极管Dm的阴极与第一节点Jm电性相连,而二极管Dm的阳极接到按键S^的第一端;按键Sm,Sm(w)、Sm(m+,广S鹏各有第一端顺次电性相连。在列线P广Pn中,各列线包括顺次电性连接的一电阻、一第二节点、N个按键,并且每个电阻各有一端都与电源VCC电性相连。如列线Pp其包括电阻Ri、第二节点Jr、按键SQ1、S21~Snl。其中,电阻R,的一端与电源VCC电性相连,另一端与第二节点J「电性相连;4安4建S2广Sm、S。i各有第二端顺次电性相连。同样,对于列线Pm,其中2《m《n,其包括电阻Rm、第二节点Jm、按键S0m~S(m.1)m、S(m+1)mSnm。其中,电阻Rm的一端与电源VCC电性相连,另一端与第二节点Jm电性相连;按键SlmS(m-1)m、S(m+1>mSnm、S。m各有第二端顺次电性相连。行线L广Ln的第一节点J广Jn与列线PnPn上的第二节点——对应连接,使得行线LHU与列线PnPn——对应连通,并且在——对应连通的行线和列线上没用放置按键。如L,的第一节点J,与P,的第二节点Jr连接,并且L,与Pi交叉点没有放置按键。键盘扫描电路103在程序进行处理时,从扫描接地的行线LO开始扫描逐行即行扫描。首先,根据正在扫描的行线,把1/0口K广Kn设置为输出口或输入口;接着,对正在扫描的行线设置为电平或对其所连接的I/O口设置为低电平输出口,对其它的I/O口设置为输入口;然后,读取设置为输入口的I/0口电平状态;最后,根据设置为输入口的I/O口发生的电平变化判断所按的键。对行线U进行扫描时,首先,把行线L。接地作为该行输出,该键盘扫描电路所用到的I/O口K广Kn设置为输入口。接着,检测设置为输入口的I/O口K广Kn的电平状态,若I/O口K广Kn全为高电平状态,则无键按下,行加1继续扫描下一行;若I/O口K广Kn中I/O口Kq为低电平,则按键S(h被按下。同样,若1/0口K广Kn中I/O口Km为低电平,则按键Som被按下。对行线L广U进行扫描时,从行线L!开始,把正在扫描的行线所对应的I/O口设置为电平输出口,其它的I/0口为输入口;接着检测输入口的I/0口状态;若输入口的1/0状态全为高电平,则无键按下行数加1继续扫描下一行;若输入口的I/O口非全为高电平,则有键按下,再根据电平发生变化的输入口I/O口查出所对应的列线,由该列线与正在扫描的行线可以确定被按下的键。例如当对Li进行扫描时,设置1/0口Id为低电平输出口,检测1/0口K广Kn电平状态,若I/O口K2Kn都呈高电平状态,则无4t按下。若I/O口K2为低电平状态,那么可以得知I/0口K2连接的列线P2上有键按下,即可判断连接行线L,与列线P2的按键S^被按下;同样,若I/O口Km为低电平状态,那么可以得知I/O口Km连接的列线Pm上有键按下,即可判断连接行线Lm与列线P2的按键S,m被按下。以上所述^f义为本发明的一丰支佳实施方式,其中的电阻可以是多个电阻的串联或者并联,或者使用其它具有阻值的元件来替换。请参看图3,本发明一较佳施实例的键盘扫描电路104包括5根行线L0L4、4根列线P1P4、16个按键S(hS43、4个I/O口、4个二极管D1D4、一电源VCC。5根行线与4根列线交错放置呈矩阵方式排列形成20个交叉点,其中有16个交叉点对应放置键盘扫描电路104的16个按键S。,S43,而其它4个交叉点没有放置按键。在所述16按键S。广S"中,各按键的第一端分别与相应的行线电性相连,另一端分别与相应的列线电性相连。在所述行线LHU中,L。由按键So广So4的第一端顺次电性连接而成,并且行线Lo接地。行线L,L4各分别包括顺次电性连接的一I/0口、一第一节点,一二极管和3个按键。其中,所述二极管的阴极接到所述第一节点上,所述二极管的阳极接到与其最靠近的按键的第一端。如行线L,,其包括I/0口K,、二极管D,、第一节点J!和按键S,2Si4。其中,二极管D,的阴极接到第一节点J,上,二极管Di的阳极接到按键Sc的第一端;按键SnS,4各有第一端顺次连接。同样,对于行线L广L4,L2包括顺次电性连接的I/O口K2、二极管D2、第一节点J2和按键Sa、S23、S24;行线L3包括顺次电性连接的I/O口K3、二极管D3、第一节点Js和按键S3I、S32、S34;行线L4包括顺次电性连接的I/O口K4、二极管D4、第一节点J4和按键S4,、S42、S43。在所述根列线P,P4中,每根列线包括顺次电性连接的一电阻、一第二节点、4个按键,每个电阻的各有一端都与电源VCC电性相连。如列线Pl,其包括电阻R,、第二节点J,、、按键SG1、S21~S41。其中,电阻R,的一端与VCC电性相连,另一端与第二节点J「电性相连。4安4建S2,S4卜S(M各有第二端顺次连接。同样,对于列线P广P4,P2包括依次电性连接的电阻R2、第二节点J「、按键So2、S12、S32、S42;P3包括依次电性连接的电阻R3、第二节点J、按键S03、S13、S23、S43;P4包括依次电性连接的电阻R4、第二节点J4、、按键S()4、S14、S24、S34。行线L广U上的第一节点J,、J2、J3和J4分别与列线P广P4上的第二节点L、、J2、、J,和J4、——对应连接,使得L,和P,、L2和P2、L3和P3、L4和P4——对应连通,并且L,和P"L2和P2、Lg和P3、U和P4所形成的4个交叉点上没有放置按键。键盘扫描电路104在程序处理时,首先,把第一根行线L0接地作为输出,接着设置该电路所用到的I/O口K广K4作为输入口,接着读取I/0口Ki~K4的状态。如果读取的结果非全高电平,行线Lo上的按键S(MSo4有键按下,再根据读取的I/O口电平变化判断按键S()广S。4被按下的键。如果读取的结果全为高电平,无键按下,则轮流设置I/O口KqK4为低电平输出口,其它的1/0口设置为输入口,再读取设置为输入口的I/O口状态,并根据设置为输入口的I/O口发生的电平变化,判断行线L,L4的按键中所按下的键。从而实现可用4个I/O口扫描4x4个按键。图3所示的4x4个不同按键分别被按下时各I/0口的状态如表一所示。当前行当前按键当前按键按下时端口电平状态路线K2K3K4<table>tableseeoriginaldocumentpage10</column></row><table>从表一可以看出,同一行上的不同按键按下时各1/0口的状态是唯一的。因此,用4个I/O口实现4x4个按键扫描。请参看图4,本发明另一较佳施实例的键盘扫描电路图104包括6根行线L0~L5、5根列线P广Ps、25个按键S(h~S54、5个I/O口、5个二极管D广Ds及一电源VCC。6根行线与5根列线交错放置呈矩阵方式排列形成30个交叉点,其中有25个交叉点对应放置键盘扫描电路104的25个按键S(hSs4,而其它5个交叉点没有放置按键。在所述25个按键中,各个按键的第一端与相应的行线电性相连,第二端与相应的列线电性相连。.在所述行线L。~L5中,Lo由按键S。广S。s的第一端顺次电性连接而成,并且行线L()接地。行线L广Ls每根分别包括顺次电性连接的一I/O口、一第一节点,一二极管和4个按4建。如行线L!,其包括I/0口K!、二极管D,、第一节点Ji和按键S!广S,5。二极管D,的阴极与I/O口K,电性相连;二极管D!的阳极与按键Si2的第一端电性相连;而S,2S5各有第一端顺次电性连接。同样,对于行线L广Ls,L2包括顺次电性连接的I/O口K2、二极管D2、第一节点j2和按4建S21、S23、S24、S25。行线l3包括顺次电性连接的I/O口K3、二极管D3、第一节点j3和按键S31、S32、S34、S35。行线U包括顺次电性连接的I/O口K4、二极管D4、第一节点j4和按键S41、S42、S43、S45。行线L5包括顺次电性连接的I/O口K5、二极管D5、第一节点Js和按键S51、S52、S53、S54。在所述列线P广Ps中,每根列线包括顺次电性连接的一电阻、一第二节点、5个按键,每个电阻各有一端与电源VCC电性相连。如列线P,,其包括电阻R)、第二节点J,、、按4定S(h、S^S51.其中,电阻R,的一端与VCC电性相连,另一端与第二节点j「电性相连;4安4建S2广Ss,、S(h各有第二端顺次电性连接。同样,对于列线P广Ps,P2包括依次电性连接的电阻R2、第二节点J2'、按键S。2、S12、S32、S42、S52;P3包括依次电性连接的电阻R3、第二节点3'、按键S。"S13、S23、S43、S53;P4包括依次电性连接的电阻R4、第二节点V、按键So4、S14、S24、S34、S54;P5包括依次电性连接的电阻Rs、第二节点Js、、按键So5、S15、S25、S35、S45。行线L广Ls上的第一节点J,、J2、J3、j4和j5分别与列线P,Ps上的第二节点jr、j2、、j3、、j,和j5、——对应电性连接,使得L,和p"L2和P2、L3和P3、L4和P4、Ls和Ps——对连通,并且由L!和P"L2和P2、L3和P3、L4和P4、Ls和Ps所形成的5个交叉点没有放置按键。使用同样的扫描方法,可以实现用5个I/O口扫描5x5个按键。图4所示的5x5个不同按键分别被按下时各1/0口的状态如表二所示。<table>tableseeoriginaldocumentpage11</column></row><table>s1301011<table>tableseeoriginaldocumentpage12</column></row><table>从表二可以看出,同一行上的不同按键按下时各1/0口的状态是唯一的,因此,可以用5个I/O口实现5x5个按4建扫描。以上所述仅为本发明的较佳实施例,其将每对——对应的行线和列线连通,而且通过电路中接入二极管,使得行线和列线得以复用;另外,其通过将一行接地作为该行输出,从达到用N个I/O口实现扫描NxN个按键的目的,减少了I/O口的数量,降低了成本。请参看图5,其为图2中键盘扫描电路的扫描方法的流程图。扫描程序启动后,软件逐行开始扫描。步骤201,扫描行线U,设置键盘所用到的I/O口K广Kn为输入,使第一行线U接地,且以其作为输出,读取1/0口K广Kn的电平状态,并根据I/0口K广Kn的状态检测行线Lo上的按键S()广S()n是否有键按下。步骤202,判断行线L。上是否有键按下。如果有键按下,扫描程序结束,否则,继续扫描行线L卜步骤203,扫描行线Lp将1/0口K,设置为低电平输出口,键盘扫描电路103所用到的其它I/O口K广Kn设置为输入口,读取I/O口K广Kn的电平状态,并根据I/O口K广Kn的电平状态检测行线L,上的按键S!2S,。是否有键按下。步骤204,扫描行线L2,将1/0口K2设置为低电平输出口,键盘扫描电路103所用到的其它I/O口Kj、K广Kn为输入口,读取I/O口K,、K广Kn的电平状态,并根据I/O的K广Kn电平状态检测行线L2上的按键S2I、S23S2n是否有键按下。步骤205,按照同样的方法,继续对未扫描的行线进行扫描。设置相应的行线Lm,所连接的I/O口Km为低电平输出口,其中m为自然数,且3=<m<=n,键盘扫描电路103所用到的其它I/O口K,K^-,'、K(m+1)Kn*输入口,读取各设置为输入口的I/O口K广K(m-D、K,m+nKn的电平状态,根据1/0口K广K^-n、K(m+DKn的电平状态检测行线Lm上的按键Sm,Sm(m-D、S加m+i广S加是否有键按下。步骤206,扫描最后一根行线U,设置I/0口Kn为低电平输出口,键盘扫描电路103所用到的其它I/O口K!K(^)为输入口,读取I/0口K广K(n-,)的电平状态,再根据I/0口K广K(n-D电平状态检测行线U上的按键Sn广S咖-D是否有键按下。请参看图6,其为图3中键盘扫描电路的扫描方法的流程图。扫描程序启动后,软件逐行开始扫描。步骤501,扫描行线L。,设置键盘所用到的I/O口K广K4为输入,使第一行线U接地,且以其作为输出,读取1/0口K广K4的电平状态,并根据I/0口K广K4的状态检测行线U上的按键So广So4是否有键按下。步骤502,判断行线Lo上是否有键按下。如果有键按下,扫描程序结束,否则,继续扫描行线L,。步骤503,扫描行线L,,将1/0口K,设置为低电平输出口,键盘扫描电路103所用到的其它I/O口K广K4设置为输入口,读取I/O口K广K4的电平状态,并根据I/O口K广Kn的电平状态检测行线L,上的按键SnSw是否有键按下。步骤504,扫描行线L2,将I/O口K2设置为低电平输出口,键盘扫描电路103所用到的其它I/O口Ki、K3、K4为输入口,读取1/0口K,、K3、K4的电平状态,并根据I/O的K,、K3、K4电平状态检测行线L2上的按键S21、S23、S24是否有键按下。步骤505,扫描行线L3,将1/0口K3设置为低电平输出口,键盘扫描电路103所用到的其它I/O口K,、K2、IQ为输入口,读取I/O口Kt、K2、K4的电平状态,并根据I/0的K"K2、K4电平状态检测行线L3上的按键S3"S32、S34是否有键按下。步骤506,扫描行线L4,设置1/0口K4为低电平输出口,键盘扫描电路103所用到的其它I/O口K,、K2、K3为输入口,读取I/O口K"K2、K3的电平状态,再根据I/O口Kj、K2、K3电平状态;险测行线L。上的按键S41、S42、S"是否有键按下。权利要求1.一种键盘扫描电路,包括按N根列线、N根第一行线、若干个按键、N个I/O口、N个具有阻值的元件、N个二极管以及一电源VCC,其中N为自然数,其特征在于所述键盘扫描电路进一步包括第二行线,所述第二行线接地;每根第一行线通过一个二极管阴极与一个I/O口相连;每根列线分别通过一个所述具有阻值的元件接在所述电源VCC上;所述N根第一行线与所述第二行线分别与所述N根列线交错放置呈矩阵方式排列形成若干个交叉点,所述若干个按键放置在所述矩阵的部分交叉点上;所述N根第一行线与所述N根列线一一对应,且每对一一对应的第一行线和列线经两个互相短接的第一节点与第二节点连通。2.如权利要求1所述的键盘扫描电路,其特征在于所述每对——对应的第一行线和列线之间的交叉点上没有放置按键。3.如权利要求1所述的键盘扫描电路,其特征在于所述若干个按键为NxN个按键。4.如权利要求1所述的键盘扫描电路,其特征在于所述若干个按键每个按键第一端电性接在一行线上,第二端电性接在一列线上。5.如权利要求1所述的键盘扫描电路,其特征在于所述第一节点电性接在所述对应行线的I/O口与二极管的阴极之间,而第二节点电性接在所述对应列线上,并与所述具有阻值的元件未接在电源的一端电性相连。6.如权利要求1所述的键盘扫描电路,其特征在于所述具有阻值的元件为电阻。7.如权利要求1所述的键盘扫描电路,其特征在于所述二极管的阳极与相应的行线上的按键的第一端电性相连。8.—种键盘的扫描方法,包括以下步骤设置与若干第一行线电性连接的若干个I/O口为输入口,设置接地的第二行线为输出;读取所述若干个1/0口的电平状态;判断所述接地的第二行线上是否有按键按下;若所述接地的第二行线上没有按键按下,依次设置所述若干个I/O口为低电平输出口,且对应地设置除低电平输出口之外的I/O口为输入口;判断设置为低电平输出口的I/O口所对应的行线上是否有按键被按下。9.根据权利要求8所述的键盘的扫描方法,其特征在于将接地作为所述接地的第二行线的输出。10.根据权利要求8所述的键盘的扫描方法,其特征在于进一步包括若所述第二行线上有按键按下,停止扫描。全文摘要一种键盘扫描电路包括按N根列线、N根第一行线及第二行线排列的N×N个按键,N个I/O口(输入输出口)、N个二极管、N个电阻及一电源VCC。N根列线分别与N根第一行线及第二行线交错放置呈矩阵方式排列形成若干交叉点。其中,N×N个交叉点对应放置所述N×N个按键。每根行线分别通过一个二极管电性接到一个I/O口上;所述第二行线接地。每根列线一端分别通过一个电阻电性接到所述电源VCC上。所述N根第一行线与N根列线一一对应,所述每对一一对应的行线和列线连通并且它们之间的N个交叉点上没有放置按键。使用上述键盘扫描电路可以用N个I/O口扫描N×N个按键,结构简单,节省I/O口资源,降低成本。此外,还提供了一种键盘扫描方法。文档编号H03M11/00GK101162905SQ200610063080公开日2008年4月16日申请日期2006年10月13日优先权日2006年10月13日发明者李德志,翁世芳申请人:鸿富锦精密工业(深圳)有限公司;鸿海精密工业股份有限公司