键盘硬件扫描码邓志
目录
键盘硬件扫描码(邓志)
keyboard scan code 表
我发现搜到的许多其他键盘硬件扫描码的资料都与实际不符,而邓志先生整理的才是正确的。但邓志的MouseOS网站不知为何不能上去了,故转载google缓存的邓志的这篇文档以备查阅。
转载来源
作者邓志,对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:由 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 |
小键盘中的 由 NumLock 按下后再按得来。
因此,会产生一个
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 键,再按 键
这样会产生一个
(2)按着 或 不放,再按 abcd 键,再放开 或 键
这样会产生一个