keyboard scan code 表
当按下一键时,产生 mark 码,产生一次 IRQ1 中断。
放开键时,产生 break 码,产生一次 IRQ1 中断。
因此:当按下 A 键放开,实际上产生了两次 IRQ1 中断
break 是 mark 码的 bit7 置 1 得来,也就是: break = mark + 0x80
1、scan code 集
这里只说一般日常应用中的键盘码集 set 2(有 set 1、set 2 以及 set 3)
- 基本 scan code:绝大多数 scan code 是 1 byte 的。
- 扩展 scan code:由 e0、e1 或e2 引导
- 特殊的 PrintScreen/SysRq 键:e0 2a e0 37
- 物殊的 Pause/Break 键:e1 1d 45 e1 9d c5
2、小键盘 scan code 表
key |
mark(Hex) |
break(Hex) |
描述 |
NumLock |
45 |
c5 |
break = mark + 0x80 |
/ |
e0 35 |
e0 b5 |
由 e0 引导出 extend scan code |
* |
37 |
b7 |
break = mark + 0x80
|
- |
4a |
ca |
同上 |
7/Home |
47 |
c7 |
同上 |
8/Up |
48 |
c8 |
同上 |
9/PgUp |
49 |
c9 |
同上 |
4/Left |
4b |
cb |
同上 |
5 |
4c |
cc |
同上 |
6/Right |
4d |
cd |
同上 |
1/End |
4f |
cf |
同上 |
2/Down |
50 |
d0 |
同上 |
3/PgDn |
51 |
d1 |
同上 |
0/Ins |
52 |
d2 |
同上 |
./Del |
53 |
d3 |
同上 |
+ |
4e |
ce |
同上 |
Enter |
e0 1c |
e0 9c |
extend scan code |
小键盘中的<home><Up><PgUp><Left><Right><End><Down><PgDn><Ins><Del>由 NumLock 按下后再按得来。
因此,会产生一个 <NumLock> mark 码后,再产生上述的mark 码。 释放 <NumLock> 又产生一个 break码。
3、附加键 scan code 表
key |
mark(Hex) |
break(Hex) |
描述 |
PrintScreen/SysRq |
e0 2a e0 37 |
e0 b7 e0 aa |
extend scan code |
Scroll Lock |
46 |
c6 |
同上 |
Pause/Break |
e1 1d 45 e1 9d c5 |
* |
同上
|
Insert |
e0 52 |
e0 d2 |
同上 |
Home |
e0 47 |
e0 c7 |
同上 |
Page Up |
e0 49 |
e0 c9 |
同上 |
Delete |
e0 53 |
e0 d3 |
同上 |
End |
e0 4f |
e0 cf |
同上 |
Page Down |
e0 51 |
e0 d1 |
同上 |
left |
e0 46 |
e0 c6 |
同上 |
right |
e0 4d |
e0 cd |
同上 |
up |
e0 48 |
e0 c8 |
同上 |
down |
e0 50 |
e0 d0 |
同上 |
抱歉:我对 PrintScreen/SysRq 和 Pause/Break 的理解未透彻。在这不便讲解。
如果您知道,请留言赐教。
4、功能键 scan code 表
key |
mark(Hex) |
break(Hex) |
描述 |
<esc> |
01 |
81 |
scan code |
F1 |
3b |
bb |
同上 |
F2 |
3c |
bc |
同上
|
F3 |
3d |
bd |
同上 |
F4 |
3e |
be |
同上 |
F5 |
3f |
bf |
同上 |
F6 |
40 |
c0 |
同上 |
F7 |
41 |
c1 |
同上 |
F8 |
42 |
c2 |
同上 |
F9 |
43 |
c3 |
同上 |
F10 |
44 |
c4 |
同上 |
F11 |
57 |
d7 |
同上 |
F12 |
58 |
d8 |
同上 |
5、主键盘 scan code 表
key |
mark
|
break
|
key |
mark |
break |
key |
mark |
break |
key |
mark |
break |
~/· |
29 |
a9 |
<tab> |
0f |
8f |
<scapslock> |
3a |
ba |
<L-shift> |
2a |
aa |
!/1 |
02 |
82 |
q |
10 |
90 |
a |
1e |
9e |
z |
2c |
ac |
@/2 |
03 |
83 |
w |
11 |
91 |
s |
1f |
9f |
x |
2d |
ad |
#/3 |
04 |
84 |
e |
12 |
12 |
d |
20 |
a0 |
c |
2e |
ae |
$/4 |
05 |
85 |
r |
13 |
93 |
f |
21 |
a1 |
v |
2f |
af |
%/5 |
06 |
86 |
t |
14 |
94 |
g |
22 |
a2 |
b |
30 |
b0 |
^/6 |
07 |
87 |
y |
15 |
95 |
h |
23 |
a3 |
n |
31 |
b1 |
&/7 |
08 |
88 |
u |
16 |
96 |
j |
24 |
a4 |
m |
32 |
b2 |
*/8 |
09 |
89 |
i |
17 |
97 |
k |
25 |
a5 |
</, |
33 |
b3 |
(/9 |
0a |
8a |
o |
18 |
98 |
l |
26 |
a6 |
>/. |
34 |
b4 |
)/0 |
0b |
8b |
p |
19 |
99 |
:/; |
27 |
a7 |
?// |
35 |
b5 |
_/- |
0c |
8c |
{/[ |
1a |
9a |
"/' |
28 |
a8 |
<R-shift> |
36 |
b6 |
+/= |
0d |
8d |
}/] |
1b |
9b |
<Enter> |
1c |
9c |
<L-ctrl> |
1d |
9d |
|/\ |
2b |
ab |
|
|
|
|
|
|
<L-alt> |
38 |
b8 |
<backspace> |
0e |
8e |
|
|
|
|
|
|
<space> |
39 |
b9 |
|
|
|
|
|
|
|
|
|
<R-alt> |
e0 38 |
e0 b8 |
|
|
|
|
|
|
|
|
|
<R-ctrl> |
e0 1d |
e0 9d |
若输入字符“ABCD”有两种方法
(1)按下 <CapsLock> 键后,再输入 abcd 键,再按<CapsLock> 键
这样会产生一个 <CapsLock> 键 mark 和 break码,然后依次是 abcd 的 mark 和 break 码, 最后是<CapsLock> 的 mark 和 break 码
(2)按着 <L-shift> 或<R-shift> 不放,再按 abcd 键,再放开<L-shift> 或<R-shift> 键
这样会产生一个 <L-shift> 或<R-shift> 键的 mark 码,然后依次是 abcd 的 mark和 break 码,最后是一个 <L-shift> 或<R-shift> 键的 break 码