它的机械部分的组成,从外形上看,是在长方形的部件上以横行竖列位置关系依此排放的许多按键,每个按键上用字母、文字或符号标明这个按键的含义和作用,这些按键中,除了字母、数字、标点符号、数学符号等基本输入按键之外,还包括一些编辑功能键,操作控制键(含复合用按键)。从内部看,每个按键都是用小弹簧支撑着,按键按下去之后会把按键上导电件与其下面金属件接触上(称为按键闭合,实现电信号连通),松开手之后,小弹簧把按键顶起,使按键与其下面金属件脱离接触(按键松开,实现电信号断开),由此看来,按键相当一个机械开关。

  它的电路部分的组成,全部做在一块印制电路板上,其主要功能,一是识别按下的是哪一个按键,并产生出该按键对应的编码信息,二是把这一编码从并行格式转换成串行格式,逐位传送给计算机主机。这些功能是用板上的一个专用的CPU芯片控制完成的。

  识别闭合键,多采用行扫描法完成,即找出闭合按键在按行列关系布置中所处的位置。具体办法是,给出一个n行%m列的逻辑电路,并把键盘上的每个键分配在这个n行%m列的交叉点位置,如图5.8所示。运行时,轮流为n行中的一行接通低电位,其他行给高电位,并检查m列的各列的电位值。若所有这些按键都未按下,都处于断开状态,则每一列都不会与行连通,不管行上有高或低电位,所有列的电位都为高,是5V电源经一个电阻给出的。若只有一个键按下,即进入闭合状态,就会把它所连接的行线和位线连通,若该行线上为低电位,则使位线也为低电位(5V电源的电压都降在电阻上),该位线上的低电位与其他行线的高电位被相应的二极管断开,其他位线仍为高电位。这就是说,通过一个行线和列线同时为低电位(其他所有的行线和列线都为高电位)来表明一个闭合键的位置。再用行线和位线的编码去查表,就得到闭合按键的编码值。在具体实现中,对行线和位线的控制,是应用并行接口电路完成的。把并行接口的输出口接到行线,由CPU轮流送出只有一位为0值、其他位均为1值的信号,而把列线接到并行接口的输入口供CPU来读,CPU分析读入的内容以判断列线的电位情况。请注意,这里说的CPU,是指键盘线路板上的CPU,而不是计算机主机的CPU。同样,用行线和位线的编码去查表,以得到闭合按键的编码值的操作也是由键盘线路板上的CPU完成的。


图5.8 键盘中识别闭合键的逻辑线路  

  在具体应用中,往往还必须解决另外一些现实问题。例如,为了更快速的检查是否有键被按下,可以首先使所有行线均为低电位,再检查是否有位线也为低电位,若有一位位线已为低电位,表明有键闭合,再启动行扫描以确定是具体哪一个键被按下。此外,按键敲击过程中的抖动问题,也是必须处理的。抖动,说的是敲击按键时,在按下和松开的时候,按键会在接通和断开的位置之间跳动几下才会稳定下来,不处理将造成识别错误,解决的办法多是采用延时若干毫秒的方案,即等待抖动消失之后再处理。下一个要解决的问题是重键,就是有一个以上(为2的情形可能较多)的按键被按下,具体反映就是读得列值中有多于一位的0。遇到这种情况时,可以采用不同的思路加以处理,例如,取其一个,或都不接收等,我们只是提出这一问题而不具体讨论。

  键盘通常都通过串行接口与计算机主机连接,把敲击的键的编码逐位送到主机一端的串行接口中,由主机一端的串行接口完成串行格式到并行格式的转换,供主机CPU读取。