• 键盘的结构
   键盘由若干个键开关组成,可以通过按键向处理机输入数字、字符、文字和命令等,它是计算机系统的主要输入设备。 最简单的键盘如图所示,其中每个键对应I/O端口的一位。没有键闭合时,各位均处于高电平; 当有一个键按下时,就使 对应位接地而成为低电平,而其它位仍为高电平。这样, CPU只要检测到某一位为“0”,便可判别出对应键已经按下。

   但是,这样的结构设计键盘有一个很大的缺点,就是当键盘上的键较多时,引线太多,占用的 I/O端口也太多。比如一 个有64键的键盘,就需要64条连线和8个8位端口。所以,这种简单结构只用在仅有几个键的小键盘中。
   通常使用的键盘是矩阵结构的。矩阵式键盘是指键开关按行列排列,形成二维矩阵的结构,如8×8,4×4等,是常用的一种键盘结构。对于8×8=64个键的键盘,采用矩阵方式就只要用16条引线和2个8位端口便完成键盘的连 接。如图为3×3=9个键的阵列,这个矩阵分为3行3列,如果键4按下,则第 l行和第 l列线接通而形成通路。如果第 l行线接地电 位,则由于键4的闭合,会使第 l列线也输出地电位。矩阵式键盘工作时,就是按行线和列线的电平来识别闭合键的。


  • 键的识别
   键盘结构的关键是如何把键盘上的按键动作转换为相应的编码,供处理器接收,这里存在一个键码识别的问题。按照键码识别方式的不同,键盘可分为两大类:编码键盘和非编码键盘。由于非编码键盘的响应速度虽然不及编码键盘,但因处理机的处理速度远远高于人工敲键的程度,并且这种键盘可以通过软件编码为键盘的某些键的重新定义提供了极大的方便,因此得到了广泛的使用。计算机中使用的主要是非编码键盘。
   为了识别键盘上的闭合键,常用的键码识别方法有行扫描法、行反转法及行列扫描法等。

   1.行扫描法

行扫描法识别按键的基本原理是:先将所有的行线置0,读列线的值,若此时列线上的值全为1,说明无键按下。若有某位为0,则说明对 应这一列上有键按下,这时改变行扫描码,使行线逐行为0,依次扫描。当读到某一列线的值为0时,就可根据此时的行扫描码和列线的 值惟一地确定按键的位置,同时也就确定了该键的扫描码。

   2.行反转法

   行反转法也是识别按键的常用方法。它的基本原理是:将行线接一个数据端口,先让它工作在输出方式;将列线也接到一个数据端口,先让它工作在输入方式。程序使 CPU通过输出端口往各行线上全部送低电平,然后读入列线值。如果此时有某键被按下,则必定会使某列线值为0。接着,程序再对两个端口进行方式设置,使接行线的端口改为输入方式,接列线的端口改为输出方 式。并且,将刚才读得的列值从列线所接端口输出,再读取行线的输入值,那么,闭合键所在的行线值必定为0。这样,当一个键 被按下时,必定可以读得一对唯一的行值和列值。与之配合,行、列线所接的数据端口应能够改变输入、输出方式。

   3. 行列扫描法

该方法基本思路为:通过计数译码,依次将各行输出为0,其余作为1。在扫描每一行时,读列线,若全为1,说明此行无键按下,若某一列 为0,说明有键按下,且行号和列号已经确定。然后用同样的办法,依次向列线扫描输出,读行线。如果两次所得的行号和列号分别相 同。则确定了闭合键的键码。
  • 键抖动和重键
   1. 抖动消除

在按键闭合、断开过程中,由于机械触点的弹性作用,在闭合和断开瞬间均有抖动现象。抖动时间的长短与开关的机械特性有关, 一般为5~10ms。抖动问题不解决就会引起对闭合键的错误认识。

   通常消除抖动的措施有硬件方法和软件方法两种:硬件方法可用硬件电路来实现,如用RC滤波电路去抖动。软件方法可用延时的方 法,即检测到有键按下时,执行一个12ms的延时程序后再确认该键电平是否仍保持闭合状态电平,如保持则确认为真正键按下状态, 从而消除了抖动影响。

   2. 重键处理

重键是指两个或两个以上的按键同时按下,或者一个按键按下后还未弹开,另一个按键已按下的情况。处理的办法有两种,第一种是 不停地扫描键盘,当有多个闭合键时不予识别,仅以最后检查到的一个闭合键为确认键。第二种方法是确认一个闭合键之后处于保 持状态,只有当该键释放后再去处理,并开始识别其它键。
  • PC键盘
   1. 键盘结构

   PC系列机采用的是智能化键盘,即在键盘的内部装有专门的单片机〈如8048,8049等〉,由这些单片机来完成键盘开关矩阵的扫描、 键盘扫描码的读取和发送。这样,键盘作为一个独立的输入设备就可以和主机脱离,仅仅依靠传输线和主机进行通信。
   由按键组成的键盘开关矩阵为16行×8列,由于 PC键盘使用非编码键盘,所以电路工作原理与简易键盘是一样的。在有键按下时,内 部8048单片机通过内部扫描程序分析确定按键的位置,即形成键盘扫描值,并向主机发送。
   连接主机和键盘的传输线一般是5芯的连接线,其中5芯的功能分别是:电源、地、复位信号、时钟信号、串行数据。

   2. 键盘接口电路

   早期的PC机与键盘的接口主要采用 Intel 8255 并行接口和 LS322移位寄存器组成, 这种接口电路一般用作标准键盘的接口,采用 移位寄存器来接收键盘发送的串行扫描码,通过并行接口8255A将装配好的数据送给CPU,同时向8259A发中断请求。
   目前PC系列机的键盘接口多采用一单片微处理器(如 Inte18042/8048/8072等)作为控制核心,主要完成以下工作:
   (1)接收来自键盘的按键扫描码数据;
   (2)对接收的数据进行奇偶校验;
   (3)控制和检测传送数据的时间;
   (4)对接收的数据进行串一并转换;
   (5)将按键的行列位置扫描码转换为系统扫描码;
   (6)接收并执行系统命令;
   (7)向系统发键盘中断,请求主机进行键盘代码处理。

   3. BIOS键盘缓冲区与键盘中断服务程序

   BI0S键盘缓冲区:当键盘接口电路把来自键盘的串行扫描码变成并行的系统扫描码送入8042的输出缓冲寄存器,并向主CPU发出中断 请求以后,系统通过键盘硬件中断(09H〉将系统扫描码变成字符的ASCII码或扩展码〈对于字母、数符转换为ASCII码,对于命令键、 组合功能键等则另一种编码表示,称之为扩展码〉,并将按键的ASCII码或扩展码写人键盘缓冲区,而应用程序在需要的时候则可利用 软中断(INT 16H)调用键盘缓冲区的数据,并根据需要对它们进行处理。因此,BIOS键盘缓冲区起着传送数据媒介的作用,除此之 外,还可以满足键盘实时输入的需要。
   键盘接口硬件中断:当键盘接口收到一个字节数据后,立即向主机发中断请求。键盘接口硬件中断的类型码为09H,当主机CPU响应键 盘接口硬件中断请求后,接类型码09H执行其中断服务程序。其功能概括如下。
   (1)从键盘接口输出缓冲器(60H)读取系统扫描码。
   (2)将系统扫描码转换成ASCII码或扩展码,存入键盘缓冲区。
   (3)如果是换档键(如CapsLOCk,Ins等),将其状态存入BI0S数据区中的键盘标志单元。
   (4)如果是组合键(如Ctrl+Alt+Del)则直接执行,完成其对应的功能。
   (5)对于中止组合键(如Ctrl+C或Ctrl+Break),强行中止应用程序的执行,返回D0S。
   软件中断INT16H:读取键盘缓冲区中的内容可通过软中断INT16H指令实现,INT16H中断调用的功能和出口参数如表所示。
INT 16H的功能及出口参数
调用号功能     出  口  参  数
AH=0从键盘上输入一个字符AH=键入字符的扫描码或扩展码
AL=键入字符的ASCII码或0
AH=1判有无键入字符ZF=1键盘无输入
ZF=0键盘有输入(字符在AX中)
AH=2读特殊键状态AL=KB——FLAG标志单元的值