?? 8255掃描鍵盤、顯示程序.txt
字號(hào):
8255掃描鍵盤、顯示程序
利用8255可編程并行口做一個(gè)掃描鍵盤實(shí)驗(yàn),
把按鍵輸入的鍵碼,顯示在由8279控制的七段數(shù)碼管上。
8255PA口做鍵盤輸入線,PB口作掃描線。
D8255 EQU 8506H ;8255狀態(tài)/數(shù)據(jù)口地址
D8255A EQU 8500H ;8255 PA口地址
D8255B EQU 8502H ;8255 PB口地址
Z8279 EQU 8701H ;8279狀態(tài)口地址
D8279 EQU 8700H ;8279數(shù)據(jù)口地址
DISPTR EQU 08H ;當(dāng)前顯示位置
KEYVAL EQU 09H ;讀到的鍵碼
ORG 0000H
LJMP START
ORG 0040H
MAIN:
MOV SP,#60H
LCALL DELAY ;延時(shí)
MOV DISPTR,#30H ;顯示緩沖區(qū)頭指針
MOV DPTR,#D8255
MOV A,#90H ;置8255狀態(tài)
;方式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 ;沒(méi)有則繼續(xù)讀鍵
DISBUF:
LCALL DISP ;把鍵移入顯存
LCALL DELAY ;延時(shí)消抖
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 ;無(wú)鍵按下
KEYCAL: ;計(jì)算鍵碼
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 ;返回?zé)o鍵標(biāo)志
RET
DELAY: MOV R0,#0H ;延時(shí)子程序
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
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -