键盘扫描码(表格)
轉載: http://www.mouseos.com/os/doc/scan_code.html
當按下一鍵時,產生 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 碼
?
總結
- 上一篇: 虚拟键码对照表与ASCII对照表的区别
- 下一篇: 对B样条的理解和整理