📄 8255扫描键盘、显示程序.txt
字号:
8255扫描键盘、显示程序
利用8255可编程并行口做一个扫描键盘实验,
把按键输入的键码,显示在由8279控制的七段数码管上。
8255PA口做键盘输入线,PB口作扫描线。
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
MAIN:
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -