键盘扫描码 扫描码 键盘上的每一个键都有两个唯一的数值进行标志。为什么要用两个数值而不是一个数值呢?这是因为一个键可以被按下,也可以被释放。当一个键按下时,它们产生一个唯一的数值,当一个键被释放时,它也会产生一个唯一的数值,我们把这些数值都保存在一张表里面,到时候通过查表就可以知道是哪一个键被敲击,并且可以知道是它是被按下还是被释放了。这些数值在系统中被称为键盘扫描码 键盘扫描码: 键盘上的每个键都有一个包含在字节低 7 位(位 6-0)中相应的扫描码,在高位(位 7)表示是按键还是松开按键。位 7=0 按键按下,位 7=1 表示按键松开。 例如,按下键"A"的接通码是 0x1E。当一个按下的键被松开时,从键盘控制器端口收到的就是一个断开码。对于 XT 键盘,断开码是其接通码的最高位取 1,相当于加上 0x80。例如,上述"A"键的断开码就是 0x80 + 0x1E = 0x9E 。 表 7-4 是 XT 键盘的扫描码表。 但是对于那些 PC/XT 标准 83 键键盘以后新添加的("扩展的")AT 键盘上的按键(如右边的 Ctrl键和右边的 Alt 键等),则其接通和断开扫描码通常有 2~4B,并且第 1 个字节一定是 0xE0。例如,按下左边的非扩展 Ctrl 键时会产生 1B 接通码 0x1D,而按下右边的 Ctrl 键时就会产生扩展的 2B 接通码 0xE0、0x1D。对应的断开码是 0xE0、0x9D。 根据计算机的发展,目前已有三套扫描码集可供使用: 第一套扫描码集:原始 XT 键盘扫描码集。目前的键盘已经很少发送这类扫描码。 第二套扫描码集:现代键盘默认使用的扫描码集,通常称为AT 键盘扫描码集。 第三套扫描码集:PS/2 键盘扫描码集。原 IBM 推出 PS/2 微机时使用的扫描码集,已很少使用。 AT 键盘默认发送的是第二套扫描码集。虽然如此,主机键盘控制器为了与PC/XT 的软件兼容,仍然会把所有接收到的第二套键盘扫描码转换成第一套扫描码。因此,我们在为键盘控制器进行软件编程时通常只需要了解第一套扫描码集即可。嵌入式等单片机控制则需要使用第二套扫描码集。 键盘控制器: 主机键盘控制器专门用来对接收到的键盘扫描码进行解码,并把解码后的数据发送到操作系统的键盘数据队列中。键盘控制器通常采用Intel 8042单片微处理器芯片或其兼容电路。现在的PC 都已经将键盘控制器集成在主板芯片组中,但是功能仍然与使用8042 芯片的控制器相兼容。 键盘控制器接收键盘发送来的11 位串行格式数据。其中第...