|
发表于 2006-6-29 10:14:34
|
显示全部楼层
[下载]8255扫描键盘、显示实验
8255扫描键盘、显示实验
一.实验要求
利用8255可编程并行口做一个扫描键盘实验,把按键输入的键码,显示在由8279控制的七段数码管上。8255PA口做键盘输入线,PB口作扫描线。
二.实验目的
1.掌握8255编程方法。
2.掌握扫描键盘和显示的编程方法。
三.实验电路及连线
四.实验说明
在PA口与PB口组成的64点阵列上,把按键接在不同的点上,将得到不同的键码,本实验采用8×2的阵列,共可按16个键。显示部分由8279控制,由7407驱动8位数码管显示。
五.实验程序框图
源代码:
D8255 EQU 8506H ;8255状态/数据口地址
D8255A EQU 8500H ;8255 PA口地址
D8255B EQU 8502H ;8255 PB口地址
Z8279 EQU 8701H ;8279状态口地址
D8279 EQU 8700H ;8279数据口地址
DISPTR EQU 08H ;当前显示位置
KEYVAL EQU 09H ;读到的键码
ORG 0000H
LJMP START
ORG 0040H
START:
MOV SP,#60H
LCALL DELAY ;延时
MOV DISPTR,#30H ;显示缓冲区头指针
MOV DPTR,#D8255
MOV A,#90H ;置8255状态
;方式0,PB,PC口输出,PA口输入
MOVX @DPTR,A
MOV DPTR,#Z8279 ;置8279命令字
MOV A,#0D3H
MOVX @DPTR,A ;清LED显示
MOV A,#00H
MOVX @DPTR,A
MOV A,#38H
MOVX @DPTR,A
MOV A,#0D1H
KB_DIS:
LCALL RD_KB ;读键盘
MOV A,#0FFH
CJNE A,KEYVAL,DISBUF ;判读到键
SJMP KB_DIS ;没有则继续读键
DISBUF:
LCALL DISP ;把键移入显存
LCALL DELAY ;延时消抖
LCALL DELAY
SJMP KB_DIS
DISP: ;显存依次前移
MOV R1,#31H ;在最后加入新键值
MOVE:
MOV A,@R1
DEC R1
MOV @R1,A
INC R1
INC R1
CJNE R1,#38H,MOVE
MOV 37H,KEYVAL
MOV KEYVAL,#0FFH
MOV DPTR,#Z8279
MOV A,#90H
MOVX @DPTR,A
MOV R0,#08H
MOV R1,#30H
MOV DPTR,#D8279
LP: MOV A,@R1
MOVX @DPTR,A
INC R1
DJNZ R0,LP
RET
RD_KB: ;键盘扫描
MOV A,#02H ;扫描第一行
MOV DPTR,#D8255B
MOVX @DPTR,A
MOV DPTR,#D8255A
MOVX A,@DPTR
MOV R1,#00H
CJNE A,#0FFH,KEYCAL ;判键是否按下
MOV A,#01H ;扫描第二行
MOV DPTR,#D8255B
MOVX @DPTR,A
MOV DPTR,#D8255A
MOVX A,@DPTR
MOV R1,#08H
CJNE A,#0FFH,KEYCAL
SJMP NOKEY ;无键按下
KEYCAL: ;计算键码
MOV R0,#08H
SHIFT:
RRC A
JNC CALC
INC R1
DJNZ R0,SHIFT
CALC: ;换算显示码
MOV DPTR,#DL_DAT
MOV A,R1
MOVC A,@A+DPTR
MOV KEYVAL,A
RET
NOKEY: MOV KEYVAL,#0FFH ;返回无键标志
RET
DELAY: MOV R0,#0H ;延时子程序
DELAY1: MOV R1,#0H
DJNZ R1,$
DJNZ R0,DELAY1
RET
DL_DAT: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;0,1,2,3,4,5,6,7
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;8,9,A,B,C,D,E,F
END
|
|