可编辑版
两个并行端口的工作方式进行设置,使行线工作在输入方式,列线工作在输出方式,并且将刚才读得的列线值从列线所接的并行端口输出,再读取行线上的输入值,那么在闭合键所在的行线上的值必定为0。这样,有按键时,可读得唯一的行值和列值。
2.设计时,行、列值应放在一个表中,通过查表确定按下的是哪个键。 3.键闭合时,注意加延时防抖动。 4.键松开时,加判断释放程序。 5.按下键盘某键能够返回系统。
(二)实验内容
1、编程:使得在小键盘上每按一个健,4位数码管上显示出相应字符,它们的对应关系如下:
2、接线: PC7~PC0 /8255 接 行3~列0 /4X4键盘 PA7~PA0 /8255 接 dp~a /LED数码管 CS/8255 接 Y1 /IO地址
PB3~PB0/8255 接 S3~S0/LED数码管
(或哪位数码管要显示则位选 S 接 +5V 即高电平,不想显示的数码管 S接 GND 即低电平)
三、硬件连接图和软件程序流程图
1、硬件连接
Word完美格式
可编辑版
3、软件程序流程图
开始 8255初始化C口高四位输出 低四位输入 C口高四位输出低电平 读入C口低四位 有键按下吗 Y 写控制字 ,C口高四
位输入 低四位输出
查询为低电平的行值
查表输出段码 Word完美格式
可编辑版
四、源程序
DATA SEGMENT TABLE1 DB 0,4,8,12 TABLE2 DB 1,5,9,13 TABLE3 DB 2,6,10,14 TABLE4 DB 3,7,11,15
TABLE5 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,53H,79H,71H DATA ENDS
STACK SEGMENT STACK 'STACK' DB 100 DUP(?) STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA ,SS:STACK START: MOV DX,SEG DATA MOV DS,DX
MOV DX,OFFSET DATA PUSH DX
LOOPS:MOV DX,28BH ;控制口地址 MOV AL,81H ;控制字10000001 OUT DX,AL
MOV DX,28AH; C口 MOV AL,0FH ;行赋0 OUT DX,AL
IN AL,DX; 读入列值在高4位 MOV CL,AL ;保存列值 CALL DELAY;延迟函数 MOV DX,28AH;再读一遍 MOV AL,0FH ; OUT DX,AL IN AL,DX
CMP AL,CL; 两次读入列值相同,说明不是抖动产生 JNZ LOOPS
TEST AL,08H; 按键是否在第一列
JZ COL1 TEST AL,04H JZ COL2 TEST AL,02H JZ COL3
Word完美格式
可编辑版
TEST AL,01H
JZ COL4 ;没有键值输入
MOV DX,289H 位选第4个LED,B口地址 ; MOV AL,0H ;
OUT DX,AL;熄灭数码管 MOV AH,01H INT 16H
JNZ ENDD; 有键输入则跳出 JMP LOOPS
COL1: CALL JROW;返回行值在AL中 MOV BX,OFFSET TABLE1 JMP NEXT COL2: CALL JROW
MOV BX,OFFSET TABLE2 JMP NEXT COL3: CALL JROW
MOV BX,OFFSET TABLE3 JMP NEXT COL4: CALL JROW
MOV BX,OFFSET TABLE4 JMP NEXT
NEXT: XLAT ;AL中行值对应查列所在的表 MOV BX,OFFSET TABLE5
XLAT ;根据下标查到数码管对应显示 MOV CL,AL ;保存到CL中
MOV DX,289H ;位选第4个LED,B口地址 MOV AL,0H
OUT DX,AL; 熄灭数码管 MOV DX,288H; A口地址 MOV AL,CL ;段选写CL OUT DX,AL
MOV DX,289H ;位选第4个LED,B口地址 MOV AL,08H OUT DX,AL MOV AH,01H INT 16H
JNZ ENDD;有键输入则跳出 JMP LOOPS ENDD: MOV AX,4C00H INT 21H JROW PROC NEAR
PUSH AX ;AL中为已产生的列值 MOV DX,28BH ;控制口地址
MOV AL,88H ;控制字10001000
Word完美格式
可编辑版
OUT DX,AL POP AX OR AL,0F0H ;
MOV DX,28AH; 把列值输入 OUT DX,AL
MOV DX,28AH ;把列值输入
IN AL,DX ;读入行值,高四位 TEST AL,80H JZ ROW0 TEST AL,40H JZ ROW1
TEST AL,20H JZ ROW2
MOV AL,3 ;都不满足则在第3行 JMP EXIT
ROW2: MOV AL,2 JMP EXIT
ROW1: MOV AL,1 JMP EXIT
ROW0: MOV AL,0 EXIT: RET JROW ENDP
DELAY PROC NEAR ;延迟子程序 PUSH CX MOV CX,100H
LOOP1:LOOP LOOP1 POP CX RET
DELAY ENDP
CODE ENDS END START
五、实验结果
键盘输入与数码管的显示一一对应。例如键盘按下B,数码管显示b 。 六、实验总结 键盘扫描程序比较困难。
七、 实验收获与心得体会
本实验对于8255的应用与前面两个实验没有什么大的差别。比较困难的是,键盘扫描程序的设定。实验中采用了先行扫描再列扫描的方式确定按下的位置,再通过查表方式显示。
Word完美格式