键盘接口实验

一、实验目的

  1. 掌握8255A方式0基本I/O工作方式

  2. 了解键盘结构,学会检测键盘的方法及软件译码的方法

二、实验内容

  1. 连接本次实验所需的所有导线:键盘的四根行线5、6、7、8分别与8255A的PB0、PB1、PB2、PB3相连,四根列线1、2、3、4分别与8255A的PA0、PA1、PA2、PA3相连。

  2. 了解如何编制程序使用反转法识别键盘哪个键被按下。

  3. 在七段显示器中显示键盘上哪个键被按下。

三、实验提示

  8255A是Intel 80系列微处理机的配套芯片,可为8086/8088CPU与外设之间提供并行输入/输出方式。8255A的端口地址为200H到203H。其中,200H为A口地址,201H为B口地址,202H为C口地址,203H为控制口地址。8255A的A口有3种工作方式,包括0方式、1方式和2方式,B口和C口只用0方式和1方式两种工作方式。在使用8255A芯片之前,需要先对其进行初始化,即设置各个口的工作方式,通过向控制口写入方式命令来实现。方式命令字的格式如表3-3所示:

1

D6

D5

D4

D3

D2

D1

D0

特征位

A组方式

00=0方式

01=1方式

10=2方式

11=不用

PA口

0=输出

1=输入

C47

0=输出

1=输入

B组方式

0=0方式

1=1方式

PB口

0=输出

1=输入

C03

0=输出

1=输入

 

                             表3-38255A工作方式命令字的格式

8255A的方式0是一种基本的输入/输出方式。通常情况下不用联络信号,或不用固定的联络信号。

如何识别键盘是否有键按下,有行扫描法和反转法两种。行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如果列值中有某位为低电平,则表明行列交点处的键被按下;否则扫描下一行,直到扫描全部的行为止。

反转法识别闭合键时,要将行线接一个并行口,先将它工作在输出方式,将列线也接到一个并行口,先将它工作在输入方式。CPU通过输出端口往各行线上全部送低电平,然后输入列线值。如果此有某一键被按下,则必定会使某一列线值为0。然后再对两个并行口进行方式设置,使行线工作在输入方式,列线工作在输出方式,并且将刚才读的列线值从列线所接的并行端口输出,再读取行线上的输入值,那么,在闭合键所在的行线上的值必为0。这样,当有个键被按下时,必定可以读得一对唯一的行值和列值。在我们提供的例子程序中,就采用反转法来识别哪个键被按下。   

8255A和键盘的导线连接情况如图3-2所示:

四、程序流程图

五、参考程序

DATA SEGMENT

NUM DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H  ;七段显示器位码

   DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H

 

INDEXDW 0101H, 0201H, 0401H, 0801H

   DW 0102H, 0202H, 0402H, 0802H

   DW 0104H, 0204H, 0404H, 0804H

   DW 0108H, 0208H, 0408H, 0808H

DATA ENDS

 

CODE SEGMENT

ASSUME CS: CODE, DS: DATA

START:MOV AX, DATA

MOV DS, AX

   

MOV DX, 208H

MOV AL, 20H

OUT DX, AL

 

LOOP1: 

MOV AL, 90H

MOV DX, 203H

OUT DX, AL             ;A口输入,B口输出,即列线输入,行线输出

 

MOV AL, 0

MOV DX, 201H

OUT DX, AL                  ;行线输出0

MOV DX, 200H

IN AL,DX;读入列线

AND AL,0FH;取列线状态,A口低四位输入

CMP AL,0FH;看是否低4位有低电平

JZ LOOP1;无低电平,无键按下,继续扫描

 

;有键按下

MOV AH, AL

MOV AL, 82H

MOV DX, 203H

OUT DX, AL;置A口输出,B口输入

MOV AL, AH

MOV DX, 200H

OUT DX, AL;A口输出上述所取列线状态

MOV DX, 201H

IN AL, DX

OR AL, 0F0H

OR AH, 0F0H

NOT AX;行列值取反

MOV SI, OFFSET INDEX

MOV DI, OFFSET NUM

MOV CX, 10H

LOOP2:  CMP AX, [SI]

JZ LOOP3;获取按键号

ADD SI, 2

INC DI

LOOP LOOP2 

 

LOOP3:;判断键是否释放

MOV AL, 0

MOV DX, 200H

OUT DX, AL

MOV DX, 201H

IN AL, DX

AND AL, 0FH

CMP AL, 0FH

JZ VIEW;键盘释放,显示字符

JMP LOOP3;未释放,继续扫描

 

VIEW:MOV DX, 20EH;显示键码

MOV AL, [DI]

OUT DX, AL

JMP LOOP1

   

CODE ENDS

END START

 

六、实验结果

 在小键盘中按下“6”,将在实验台上最右边的一个七段显示器中显示字符“6”.

【去实验】