键盘是一种最常用的输入设备,键盘的种类很多。
  键盘上的每个键起一个开关的作用,按照键盘所用开关的种类分为有触点式和无触点式两大类键盘。有触点式键盘包括机械式、簧片式、薄膜式及导电橡胶式等;无触点式键盘包括电容式、压电式、压敏式、光电式及磁电变换式等。有触点式键盘结构简单、成本低。但使用寿命短;无触点式键盘灵敏度高、寿命长、稳定性好,但成本较高。
  按照键盘代码的获取和处理方式分为查询式、编码式、扫描式等几种。查询式键盘有m行′n列按键,图6.8给出一个8行′8列的查询式键盘,输入寄存器和输出寄存器都在键盘接口中,输出寄存器的8条输出线分别接键盘阵列的X0~X7,输入寄存器的8条输出线分别接键盘阵列的Y0~Y7。

  查询式键盘主要靠软件来获取按键的代码,程序的查询过程如下:
  1. 查询是否有键按下
  首先,CPU把输出寄存器全部清"0",则所有行线均为"0",然后,CPU从输入寄存器读入数据,如果读入的数据为全"1",表示没有任何键被按下;只要读入的数据有一位为"0",就表示有键被按下,接下去的任务是要找出按下键的位置。
  2. 查询按下键的位置
  查询按下键是哪一列很容易,实际上,CPU在查询是否有按下键时,从输入寄存器中读入的数据中,哪一位为"0",就表示相应的列有键被按下。查询按下键在哪一行比较麻烦,CPU要通过逐行扫描才能确定按下键在哪一行,例如,首先让X0为"0",X1~X7为"1",并读输入寄存器,如果为全"1",表示按下键不在第一行;然后让X1为"0",其余为"1",…,直至输入寄存器中有"0"为止,则按下键就在该行。
  3. 查询按下键的代码
  得到按下键的行号和列号之后,就能够唯一确定按下的是哪个键了。如果是字符键,则按照行号和列号到专用ROM中读出该键的代码(如ASCII码),如果是功能键,则转入相应的服务子程序,执行该键的操作功能。
图 6.8 键盘的基本结构

  由于查询式键盘能够通过软件来定义并实现功能键,因此,具有灵活性好,功能强等优点,另外,它的结构也比较简单,但响应速度比较低。
  编码式键盘采用硬件编码器获得键盘的代码,对于图6.8所示的8行′8列的键盘,用两个8-3线编码器,分别在X方向和Y方向进行编码。当有一个键被按下时,通过编码器,直接获得这个键的行号和列号。编码式键盘的优点是响应速度快。
  扫描式键盘通过硬件译码器和计数器获得键盘的代码,如图6.8所示的键盘,需要两个3-8线译码器和一个6位计数器。两个3-8线译码器输入端接到6位计数器的输出端,他们的输出端分别接到键盘的8条行线和8条列线上。计数器在时钟信号的控制下不停地计数,通过两个译码器对键盘进行扫描。当有一个键被按下时,该键立即产生一个信号,使计数器停止计数,这时,计数器的值就是这个被按下键的行号和列号。

  鼠标(mouse)是现代计算机系统中不可缺少的输入设备,因为它的样子与老鼠相象而得名。使用鼠标时,屏幕上有一个指示鼠标位置得光标,移动鼠标时,光标也跟着移动。鼠标上有2至3个按键,当光标移动到屏幕上的某个地方,同时再按下键时,光标所在位置的功能就被选中,当然,具体要完成什么功能,要通过软件来定义和实现。实际上,使用者还可以通过按左键、右键、单击、双击、转动滚轮等完成不同的功能。
  常用鼠标可以分为两大类,机械鼠标和光电鼠标。机械鼠标的底部有一个橡胶球,当鼠标在桌面上移动时,橡胶球滚动,带动鼠标内部水平和垂直两个方向上的两个小轮子转动。轮子边沿有许多扇形小孔,两侧分别安装有发光二极管和光敏二极管。当轮子转动时,轮子上的小孔能够让光通过,遇到没有孔的地方,光被挡住。当有光通过时,光敏二极管产生脉冲信号,并通过计数器记录脉冲个数,再把计数器的值折合成光标应该在屏幕上移动的距离。为了区分是向左移动还是向右移动,还需要两个光敏二极管来检测。
  光电鼠标需要有一块专用的反光板,在反光板上刻有水平和垂直的直线条。鼠标底部装有发光二极管和光敏二极管。发光二极管发出的光通过反光板反射到光敏二极管。鼠标移动距离的计算方法与机械鼠标类似。
  光电鼠标的缺点是它需要有一块反光板才能工作,而且,当反光板放斜时,鼠标就不能正常工作。机械鼠标的缺点是橡胶小球容易把桌面上的脏东西带入鼠标内部,并粘附在轮子上。因此,当机械鼠标不太好用时,要拧开鼠标底部的旋钮,取出橡胶球,清除掉粘附在轮子及轴上的脏东西。