当按下一键时,产生 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 码