首页 > 代码库 > 键盘中断事件及其相关---小记

键盘中断事件及其相关---小记

 

对于键盘中断的介绍

当我们在按下按键时,键盘会把按键的扫描码发送到主板的接口电路中,具体说就是端口60H。

当60H收到扫描码,这时接口就会向CPU发出中断请求。这是一个可屏蔽中断。所以,当IF=1,

并且CPU执行完当前指令后就会响应中断。也就是进入int 9中断服务程序。此时,程序将读取

60H中的扫描码,并判断输入的按键是什么。

 

对于这些状态字节,其是位于内存中的0:417H或0:418H位置

所以,如果产生中断后想制止接下来的二次中断,可以进入状态字值置零处理:

如ctrl键的检测:

 1 keyin:     2         MOV AH,02H       ;键盘状态 3         INT 16H     4         AND AL,00000100B   ;;检测 Ctrl -- 位2 5         cmp al,0 6         JNE PRESS 7         JMP keyin 8          9 PRESS:10         mov ax,0           ;把 0:417H中的状态字节置零11         mov es,ax12         MOV byte ptr es:[417H],0


ps:

 

 

应用程序读取键盘缓冲区

利用键盘控制应用程序主要有两种方式:

1、直接从60H端口中读取键盘扫描码,在应用程序中分析键盘输入的是字符还是控制符、切换符等。

2、利用BIOS提供的中断int 16H。

 

 

下面列出键盘大部分ASCII码表

 

 

八进制十六进制十进制字符八进制十六进制十进制字符
00000nul1004064@
01011soh1014165A
02022stx1024266B
03033etx1034367C
04044eot1044468D
05055enq1054569E
06066ack1064670F
07077bel1074771G
10088bs1104872H
11099ht1114973I
120a10nl1124a74J
130b11vt1134b75K
140c12ff1144c76L
150d13er1154d77M
160e14so1164e78N
170f15si1174f79O
201016dle1205080P
211117dc11215181Q
221218dc21225282R
231319dc31235383S
241420dc41245484T
251521nak1255585U
261622syn1265686V
271723etb1275787W
301824can1305888X
311925em1315989Y
321a26sub1325a90Z
331b27esc1335b91[
341c28fs1345c92\
351d29gs1355d93]
361e30re1365e94^
371f31us1375f95_
402032sp1406096
412133!1416197a
422234"1426298b
432335#1436399c
442436$14464100d
452537%14565101e
462638&14666102f
472739`14767103g
502840(15068104h
512941)15169105i
522a42*1526a106j
532b43+1536b107k
542c44,1546c108l
552d45-1556d109m
562e46.1566e110n
572f47/1576f111o
603048016070112p
613149116171113q
623250216272114r
633351316373115s
643452416474116t
653553516575117u
663654616676118v
673755716777119w
703856817078120x
713957917179121y
723a58:1727a122z
733b59;1737b123{
743c60<1747c124|
753d61=1757d125}
763e62>1767e126~
773f63?1777f127del

 

ASCII表

ASCII值控制字符ASCII值控制字符ASCII值控制字符ASCII值控制字符
0NUT32(space)64@96
1SOH3365A97a
2STX3466B98b
3ETX35#67C99c
4EOT36$68D100d
5ENQ37%69E101e
6ACK38&70F102f
7BEL39,71G103g
8BS40(72H104h
9HT41)73I105i
10LF42*74J106j
11VT43+75K107k
12FF44,76L108l
13CR45-77M109m
14SO46.78N110n
15SI47/79O111o
16DLE48080P112p
17DCI49181Q113q
18DC250282R114r
19DC351383X115s
20DC452484T116t
21NAK53585U117u
22SYN54686V118v
23TB55787W119w
24CAN56888X120x
25EM57989Y121y
26SUB58:90Z122z
27ESC59;91[123{
28FS60<92\124|
29GS61=93]125}
30RS62>94^126~
31US63?95127DEL
 
NULVT 垂直制表SYN 空转同步
SOH  标题开始FF   走纸控制ETB  信息组传送结束
STX  正文开始CR   回车CAN  作废
ETX  正文结束SO   移位输出EM   纸尽
EOY  传输结束SI    移位输入SUB  换置
ENQ  询问字符DLE  空格ESC  换码
ACK  承认DC1  设备控制1FS   文字分隔符
BEL  报警DC2  设备控制2GS   组分隔符
BS   退一格DC3  设备控制3RS   记录分隔符
HT   横向列表DC4  设备控制4US   单元分隔符
LF   换行NAK  否定DEL  删除
 
键盘常用ASCII码

ESC键 VK_ESCAPE (27)

回车键: VK_RETURN (13)

TAB键: VK_TAB (9)

Caps Lock键: VK_CAPITAL (20)

Shift键: VK_SHIFT ($10)

Ctrl键: VK_CONTROL (17)

Alt键: VK_MENU (18)

空格键: VK_SPACE ($20/32)

退格键: VK_BACK (8)

左徽标键: VK_LWIN (91)

右徽标键: VK_LWIN (92)

鼠标右键快捷键:VK_APPS (93)

Insert键: VK_INSERT (45)

Home键: VK_HOME (36)

Page Up: VK_PRIOR (33) P

ageDown: VK_NEXT (34)

End键: VK_END (35)

Delete键: VK_DELETE (46)

方向键(←): VK_LEFT (37)

方向键(↑): VK_UP (38)

方向键(→): VK_RIGHT (39)

方向键(↓): VK_DOWN (40)

F1键: VK_F1 (112)

F2键: VK_F2 (113)

F3键: VK_F3 (114)

F4键: VK_F4 (115)

F5键: VK_F5 (116)

F6键: VK_F6 (117)

F7键: VK_F7 (118)

F8键: VK_F8 (119)

F9键: VK_F9 (120)

F10键: VK_F10 (121)

F11键: VK_F11 (122)

F12键: VK_F12 (123)

Num Lock键: VK_NUMLOCK (144)

小键盘0: VK_NUMPAD0 (96)

小键盘1: VK_NUMPAD0 (97)

小键盘2: VK_NUMPAD0 (98)

小键盘3: VK_NUMPAD0 (99)

小键盘4: VK_NUMPAD0 (100)

小键盘5: VK_NUMPAD0 (101)

小键盘6: VK_NUMPAD0 (102)

小键盘7: VK_NUMPAD0 (103)

小键盘8: VK_NUMPAD0 (104)

小键盘9: VK_NUMPAD0 (105)

小键盘.: VK_DECIMAL (110)

小键盘*: VK_MULTIPLY (106)

小键盘+: VK_MULTIPLY (107)

小键盘-: VK_SUBTRACT (109)

小键盘/: VK_DIVIDE (111)

Pause Break键: VK_PAUSE (19)

Scroll Lock键: VK_SCROLL (145)

 

另有链接键盘码表:单键扫描码,ascii,组合键码 :

             http://wenku.baidu.com/link?url=8O_Rna2XtX1oReFqpQztzOE3QK8ke9XDnl-UIU2vibZO3Oeueq-PxAxzYdI0HkXlDMJDNlk72BjNH3dVNMplOVjmG6TLhBAYGPi6N4oEwZe

 

键盘中断事件及其相关---小记