第一套第二套键盘扫描码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
键盘扫描码
扫描码
键盘上的每一个键都有两个唯一的数值进行标志。为什么要用两个数值而不是一个数值呢?这是因为一个键可以被按下,也可以被释放。当一个键按下时,它们产生一个唯一的数值,当一个键被释放时,它也会产生一个唯一的数值,我们把这些数值都保存在一张表里面,到时候通过查表就可以知道是哪一个键被敲击,并且可以知道是它是被按下还是被释放了。这些数值在系统中被称为键盘扫描码
键盘扫描码:
键盘上的每个键都有一个包含在字节低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位串行格式数据。其中第1位是起始位,第2~9位是8位键盘扫描码,第10位是奇校验位,第11位是停止位。键盘控制器在收到11位的串行数据后就将键盘扫描码转换成PC/XT标准键盘兼容的系统扫描码,然后通过中断控制器IRQ1引脚向CPU发送中断请求。当CPU响应该中断请求后,就会调用键盘中断处理程序来读取控制器中的XT键盘扫描码。
804x键盘命令:
系统向端口0x60写入1字节,便是发送键盘命令。有的命令后还需跟一个参数。键盘在接收到命令后20ns内给予回复,即回送一个命令响应。
804x键盘控制器命令:
系统向输入缓冲(端口0x64)写入1字节,即发生一键盘控制器命令。可带一个参数。参数是通过写0x60端口发送的。见表7-3所示。