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