目前,PC机使用的PS/2键盘都默认采用第2套扫描码集.
扫描 码有两种不同的类型:“通码(make code)”和“断码(break code)”.当一个键被按下或持续按住时,键盘会将该键的通码发送给主机;而当一个键被释放时,键盘会将该键的断码发送给主机.
根据键盘按键扫描码的不同,可将按键分为3类:
第1类按键 通码为一个字节,断码为0xF0+通码形式.如A键,其通码为0x1C;断码为0xF0 0x1C.
第2类按键 通码为两字节0xE0+0xXX形式,断码为0xE0+0xF0+0xXX形式.如Right Ctrl键,其通码为0xE0 0x14;断码为0xE0 0xF0 0x14.
第3类特殊按键 有两个,Print Screen键,其通码为0xE0 0x12和0xE0 0x7C;断码为0xE0 0xF0 0x7C 和0xE0 0xF0 0x12.Pause键,其通码为0xE1 0x14 0x77和0xE1 0xF0 0xl4 0xF0 0x77;断码为空.
组合按键扫描码的发送是按照按键发生的次序,如按下面顺序按左Shift十A键:① 按下左Shift键;② 按下A键;③ 释放A键;④ 释放左Shift键,那么计算机上接收到的一串数据为0x12 0x1C 0xF0 0x1C 0xF0 0x12.
在文中的驱动程序设计中,就是根据按键的分类对其分别进行处理.
2.2 PS/2键盘的命令集
主机可通过向PS/2键盘发送命令对键盘进行设置或者获得键盘的状态等操作.
每发送一个字节,主机都会从键盘获得一个应答0xFA(“重发resend” 和“回应echo”命令例外).
驱动程序在键盘初始化过程中所用的指令:
0xED,主机在该命令后跟随发送一个参数字节,用于指示键盘上Num Lock,Caps Lock,Scroll Lock Led的状态;
0xF3,主机在这条命令后跟随发送一个字节参数定义键盘机打的速率和延时;
0xF4,用于当主机发送
0xF5禁止键盘后,重新使能键盘.
2.3 键盘扫描码和命令集
第二套扫描码:(实用于标准PC的101、102和104 键的键盘):
给键盘的命令列表:
0xFF: (Reset).复位Device。
0xFE: (Resend).要求重新发送上一个字节(此命令可以由Host发给键盘,也可以由键盘发给Host)。
0xFD/0xFC/0xFB: (Set Key Type Make/Make & Break/Make & Typematic).指定一个按键只发送Make Code/Make Code & Break Code/Make Code & Typematic Repeat。该键值依照第三套键盘扫描码设定。
0xFA: (Set all keys Make,Break & Typematic).缺省设置,恢复所有按键的Make code, Break code 和 Typematic repeat功能。
0xF9/0xF8/0xF7: (Set all keys Make/Make & Break/Make & Typematic).设置所有按键只发送Make Code/Make Code & Break Code/Make Code & Typematic Repeat。
0xF6: (Set Default).设置缺省的Typematic rate/delay(10.9cps/500ms),第二套键盘扫描码,执行0xFA命令。
0xF5: (Disable).键盘停止扫描,执行0xF6命令。
0xF4: (Enable).使能键盘扫描。
0xF3: (Set Typematic Rate/delay). 后面跟1个字节设置Repeat Rate & Delay。
Bit0-4:Repeat rate 0x00-0x10-0x1F (2.0-8.0-30.0 cps);
Bit5-6:Delay 0.25/0.5/0.75/1.0 second。
0xF2: (Read ID). 键盘回复双字节的设备ID(0xAB,0x83).
0xF0: (Set Scan code set). 设置或读取当前使用的扫描码。参数为0x01,0x02或0x03时设置当前扫描码,参数为0x00时 读取当前扫描码。
0xEE: (Echo).键盘回复一个0xEE。
0xED: (Set/Reset LEDs). 后面跟一字节参数,用来设置键盘的Caps Lock/Num Lock/Scroll Lock。
Bit0:ScrollLock;Bit1:NumLock;Bit2:CapsLock。
KEY | 通码 | 断码 | KEY | 通码 | 断码 | KEY | 通码 | 断码 | ||
---|---|---|---|---|---|---|---|---|---|---|
A | 1C | F0 1C | 9 | 46 | F0 46 | [ | 54 | F0 54 | ||
B | 32 | F0 32 | ` | 0E | F0 0E | INSERT | E0 70 | E0 F0 70 | ||
C | 21 | F0 21 | - | 4E | F0 4E | HOME | E0 6C | E0 F0 6C | ||
D | 23 | F0 23 | = | 55 | F0 55 | PG UP | E0 7D | E0 F0 7D | ||
E | 24 | F0 24 | / | 5D | F0 5D | DELETE | E0 71 | E0 F0 71 | ||
F | 2B | F0 2B | BKSP | 66 | F0 66 | END | E0 69 | E0 F0 69 | ||
G | 34 | F0 34 | SPACE | 29 | F0 29 | PG DN | E0 7A | E0 F0 7A | ||
H | 33 | F0 33 | TAB | 0D | F0 0D | U ARROW | E0 75 | E0 F0 75 | ||
I | 43 | F0 43 | CAPS | 58 | F0 58 | L ARROW | E0 6B | E0 F0 6B | ||
J | 3B | F0 3B | L SHFT | 12 | F0 12 | D ARROW | E0 72 | E0 F0 72 | ||
K | 42 | F0 42 | L CTRL | 14 | F0 14 | R ARROW | E0 74 | E0 F0 74 | ||
L | 4B | F0 4B | L GUI | E0 1F | E0 F0 1F | NUM | 77 | F0 77 | ||
M | 3A | F0 3A | L ALT | 11 | F0 11 | KP / | E0 4A | E0 F0 4A | ||
N | 31 | F0 31 | R SHFT | 59 | F0 59 | KP * | 7C | F0 7C | ||
O | 44 | F0 44 | R CTRL | E0 14 | E0 F0 14 | KP - | 7B | F0 7B | ||
P | 4D | F0 4D | R GUI | E0 27 | E0 F0 27 | KP + | 79 | F0 79 | ||
Q | 15 | F0 15 | R ALT | E0 11 | E0 F0 11 | KP EN | E0 5A | E0 F0 5A | ||
R | 2D | F0 2D | APPS | E0 2F | E0 F0 2F | KP | 71 | F0 71 | ||
S | 1B | F0 1B | ENTER | 5A | F0 5A | KP 0 | 70 | F0 70 | ||
T | 2C | F0 2C | ESC | 76 | F0 76 | KP 1 | 69 | F0 69 | ||
U | 3C | F0 3C | F1 | 05 | F0 05 | KP 2 | 72 | F0 72 | ||
V | 2A | F0 2A | F2 | 06 | F0 06 | KP 3 | 7A | F0 7A | ||
W | 1D | F0 1D | F3 | 04 | F0 04 | KP 4 | 6B | F0 6B | ||
X | 22 | F0 22 | F4 | 0C | F0 0C | KP 5 | 73 | F0 73 | ||
Y | 35 | F0 35 | F5 | 03 | F0 03 | KP 6 | 74 | F0 74 | ||
Z | 1A | F0 1A | F6 | 0B | F0 0B | KP 7 | 6C | F0 6C | ||
0 | 45 | F0 45 | F7 | 83 | F0 83 | KP 8 | 75 | F0 75 | ||
1 | 16 | F0 16 | F8 | 0A | F0 0A | KP 9 | 7D | F0 7D | ||
2 | 1E | F0 1E | F9 | 01 | F0 01 | ] | 58 | F0 58 | ||
3 | 26 | F0 26 | F10 | 09 | F0 09 | ; | 4C | F0 4C | ||
4 | 25 | F0 25 | F11 | 78 | F0 78 | ' | 52 | F0 52 | ||
5 | 2E | F0 2E | F12 | 07 | F0 07 | , | 41 | F0 41 | ||
6 | 36 | F0 36 | PRNT SCRN | E0 12 E0 7C | E0 F0 7C E0 F0 12 | . | 49 | F0 49 | ||
7 | 3D | F0 3D | SCROLL | 7E | F0,7E | / | 4A | F0 4A | ||
8 | 3E | F0 3E | PAUSE | E1 14 77 E1 F0 14 F0 77 | -NONE- |
|