键盘扫描码 扫描码 键盘上的每一个键都有两个唯一的数值进行标志
为什么要用两个数值而不是一个数值呢
这是因为一个键可以被按下,也可以被释放
当一个键按下时,它们产生一个唯一的数值,当一个键被释放时,它也会产生一个唯一的数值,我们把这些数值都保存在一张表里面,到时候通过查表就可以知道是哪一个键被敲击,并且可以知道是它是被按下还是被释放了
这些数值在系统中被称为键盘扫描码 键盘扫描码: 键盘上的每个键都有一个包含在字节低 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 键盘默认发送的是第二套扫描码集
虽然如此,主机键盘控制器