键盘硬件扫描码(邓志)

keyboard scan code 表


我发现搜到的许多其他键盘硬件扫描码的资料都与实际不符,而邓志先生整理的才是正确的。但邓志的MouseOS网站不知为何不能上去了,故转载google缓存的邓志的这篇文档以备查阅。
转载来源http://www.mouseos.com/os/doc/scan_code.html
作者邓志,对IA架构有深入研究,编有研究用的图形界面操作系统MouseOS

当按下一键时,产生 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:由 e0e1e2 引导
  • 特殊的 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

小键盘中的 由 NumLock 按下后再按得来。
因此,会产生一个 mark 码后,再产生上述的 mark 码。 释放 又产生一个 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)
描述
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
~/·
29
a9
0f
8f
!/1
02
82
q
10
90
@/2
03
83
w
11
91
#/3
04
84
e
12
12
$/4
05
85
r
13
93
%/5
06
86
t
14
94
^/6
07
87
y
15
95
&/7
08
88
u
16
96
*/8
09
89
i
17
97
(/9
0a
8a
o
18
98
)/0
0b
8b
p
19
99
_/-
0c
8c
{/[
1a
9a
+/=
0d
8d
}/]
1b
9b
|/\
2b
ab
     
0e
8e
     
key
mark
break
key
mark
break
3a
ba
2a
aa
a
1e
9e
z
2c
ac
s
1f
9f
x
2d
ad
d
20
a0
c
2e
ae
f
21
a1
v
2f
af
g
22
a2
b
30
b0
h
23
a3
n
31
b1
j
24
a4
m
32
b2
k
25
a5
33
b3
l
26
a6
>/.
34
b4
:/;
27
a7
?//
35
b5
"/'
28
a8
36
b6
1c
9c
1d
9d
     
38
b8
     
39
b9
     
e0 38
e0 b8
     
e0 1d
e0 9d

若输入字符“ABCD”有两种方法

(1)按下 键后,再输入 abcd 键,再按

这样会产生一个 键 mark 和 break 码,然后依次是 abcd 的 mark 和 break 码, 最后是 的 mark 和 break 码

(2)按着 不放,再按 abcd 键,再放开

这样会产生一个 键的 mark 码,然后依次是 abcd 的 mark 和 break 码,最后是一个 键的 break 码


你可能感兴趣的:(操作系统)