程序框图
源代码: 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 &n |