字符数字键给计算机传送一个ASCII码字符,而扩展功能键产生一个动作,如按下Home键能把光标移到屏幕的左上角,End键使光标移到屏幕上文本的未尾,使用组合控制键能改变其它键所产生的字符码。

  键盘和主机通过五芯电缆相连,这五根线分别是电源线、地线、复位线以及键盘数据线和键盘时钟线。PC机系列的键盘触点电路按16行×8列的矩阵来排列,用单片机Intel 8048来控制对键盘的扫描。按键的识别采用行列扫描法,即根据对行线和列线的扫描结果来确定闭合键的位置,并通过键盘数据线将闭合键所对应的扫描码(8位)送往主机。

 

              表9.3 IBM键盘的扫描码表

扫描码
扫描码
扫描码
扫描码

Esc
! and 1
@ and 2
# and 3
$ and 4
% and 5
^ and 6
& and 7
* and 8
and 9
and 0
 and -
+ and =
Backspace
Tab
Q and q
W and w
E and e
R and r
T and t
Y and y

01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
10
11
12
13
14
15
U and u
I and i
O and o
P and p
{ and [
} and ]
Enter
Ctrl
A and a
S and s
D and d
F and f
G and g
H and h
J and j
K and k
L and l
: and ;
" and '
~and`
Shift(左)
16
17
18
19
1A
1B
1C
1D
1E
1F
20
21
22
23
24
25
26
27
28
29
2A
| and \
Z and z
X and x
C and c
V and v
B and b
N and n
M and m
< and ,
> and .
? and /
Shift(右)
PrtSc
Alt
Space
CapsLock
F1
F2
F3
F4
F5
2B
2C
2D
2E
2F
30
31
32
33
34
35
36
37
38
39
3A
3B
3C
3D
3E
3F
F6
F7
F8
F9
F10
NumLock
ScrollLock
7 and Home
8 and↑
9 and PgUp
-(灰色)
4 and ←
5(小键盘)
6 and →
+(灰色)
1 and End
2 and↓
3 and PgDn
0 and Ins
. and Del
40
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
50
51
52
53



 

 

 

 

 

 




 

 




  当我们在键盘上"按下"或"放开"一个键时,如果键盘中断是允许的(21H端口第1位=0),就会产生一个类型9的中断,并转入到BIOS的键盘中断处理程序。该处理程序从8255可编程序外围接口芯片的输入端口60H读取一个字节,这个字节的低7位是键的扫描码。最高位为0或为1,分别表示键是"按下"状态还是"放开"状态。按下时,取得的字节称为通码,放开时取得的字节称为断码。如按下Esc键时产生一个通码为01H(0000001B),放开Esc键时产生一个断码为81H(10000001B)。  

  0040:001A BUFF_HEAD DW? ;键盘缓冲区的首地址
  0040:001C BUFF_TAIL DW? ;键盘缓冲区的末地址
  0040:001E KB_BUFFER DW 16 DUP(?) ;16个输入量的空间
  0040:003E KB_BUFFER-END LABEL WORD


  键盘缓冲区是一个先进先出的循环队列,BUFF_HEAD和BUFF_TAIL是缓冲区的两个地址指针。当HEAD指针和TAIL指针相等时,说明缓冲区空。当CPU想要得到键盘输入时,就调用BIOS键盘例行程序,它按其接收时的次序从缓冲区取出字符和扫描码,回送给CPU。缓冲区的大小可适应最快的打字员,但如果缓冲区已满又按下一个键,BIOS不处理这个键,只发出"嘀"的响声。