
程序框圖
  源代碼: 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 START: 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 &n |