监控子程序清单 DISP显示子程序 PORT A EQU OCFO1H PORT B EQU OCF02H PORT C EQU OCF03H ;功能:将显示缓冲区39-3F内容显示一遍 ;3FH对应八个LED管 3E-39H自左到右对应数码 占用:PSW,ACC,DPTR,RO,R3,R6,R7 ORG ODEOOH DISPI: MOV RO. #3FH DISP0:MoVR3,#01000000;位选字 MoVA,@R0;取显示数据 SJMP DISP 2 DⅠSP1: MOV DPTR,#EDTB MOV A, ORO MoVc A, @ADPTR DISP2:CPLA;字型求反 MOV DPTR, #PORT B MOVX@DPTR,A;字型送8155B口 MOV A, R3 DEC DPL MOVX@DPTR,A;位选字送8155A口 LCALL DIMS 延时IMS CLR A MOV DPTR, #PORT A MoVX DPTR,A;关显示 DEC RO MOV R3, A RR A Mov A R3 JNB ACC. 7, DISP 1 Mov A RO ADDA,#7 MOV RO. A MOV DJNZ 显示字型表
监控子程序清单 ;DISP 显示子程序 PORT_A EQU 0CF01H PORT_B EQU 0CF02H PORT_C EQU 0CF03H ;功能:将显示缓冲区 39-3FH 内容显示一遍 ;3FH 对应八个 LED 管 ;3E-39H 自左到右对应数码 ;占用:PSW,ACC,DPTR,R0,R3,R6,R7 ; ORG 0DE00H DISP1: MOV R0,#3FH DISP_0: MOV R3,#01000000B ;位选字 MOV A,@R0 ;取显示数据 SJMP DISP_2 DISP_1: MOV DPTR,#LED_TB MOV A,@R0 MOVC A,@A+DPTR DISP_2: CPL A ;字型求反 MOV DPTR,#PORT_B MOVX @DPTR,A ; 字型送 8155B 口 MOV A,R3 DEC DPL MOVX @DPTR,A ;位选字送 8155A 口 LCALL D1MS ;延时 1MS CLR A MOV DPTR,#PORT_A MOVX @DPTR,A ;关显示 DEC R0 MOV R3,A RR A MOV A,R3 JNB ACC.7,DISP_1 MOV A,R0 ADD A,#7 MOV R0,A RET D1MS: MOV R6,#0 DJNZ R6,$ RET ; ;显示字型表
0130H LED TB: DB 3FH, 06H, 5BH, 4FH 0123 66H, 6DH, 7DH, 07H DB 7FH 6FH. 77H. 7CH DB 39H, 5EH, 79H, 71H CDEF DB 00H, 73H, 58H, 4CH: P DB 76H. 5EH 闪烁显示等待键入子程序 功能:R1指向闪烁位地址,等待键入,并返回键值 占用:A,B,RO,R5 出口:A ORG 0150H CURSOR: MOV RO,#3FH;RO指向显示缓冲区 CUR0:MoVB,R1;Rl指向闪烁位地址 CUR 1: MOV eRl. B JNC cUR 3 MOV A R5 JNB ACC.4,CUR4;闪烁计数到否 JNB ACC. 5, CUR 5 Mov A RI XRL A, RO JNZ CUR MOV OR1.A SJMP CUR 4 CUR2:CJNE@R1,#16,CUR3;当前位是否为数字 CUR 3: JNC CUR 4 MOV@R1,#1OH;显示空格 CUR 4: ACALL DISP 0 ACALL JNZ CUR 5 INCR5;闪烁计数 SJMP CUR 1 CUR 5: ACALL KEY LD JZ CUR1;无键,继续 MOV@R1,B;恢复闪烁处数值 ACALL KB VUL;取键值 测试键入程序 功能:调用返回A不为零为有键入 ;占用:A,DPTR 入口:无 出口:A ORG 018OH
ORG 0130H LED_TB: DB 3FH,06H,5BH,4FH ;0123 DB 66H,6DH,7DH,07H ;4567 DB 7FH,6FH,77H,7CH ;89AB DB 39H,5EH,79H,71H ;CDEF DB 00H,73H,58H,4CH ;_P [ ] DB 76H,5EH ;HD ; ;闪烁显示等待键入子程序 ;功能:R1 指向闪烁位地址,等待键入,并返回键值 ;占用:A,B,R0,R5 ;入口:R1 出口:A ORG 0150H CURSOR: MOV R0,#3FH ;R0 指向显示缓冲区 CUR_0: MOV B,@R1 ;R1 指向闪烁位地址 CUR_1: MOV @R1,B JNC CUR_3 MOV A,R5 JNB ACC.4,CUR_4 ; 闪烁计数到否 JNB ACC.5,CUR_5 MOV A,R1 XRL A,R0 JNZ CUR_2 MOV @R1,A SJMP CUR_4 CUR_2: CJNE @R1,#16,CUR_3 ;当前位是否为数字 CUR_3: JNC CUR_4 MOV @R1,#10H ;显示空格 CUR_4: ACALL DISP_0 ACALL T_KB JNZ CUR_5 INC R5 ;闪烁计数 SJMP CUR_1 CUR_5: ACALL KEY_LD JZ CUR_1 ;无键,继续 MOV @R1,B ;恢复闪烁处数值 ACALL KB_VUL ;取键值 RET ; ;测试键入程序 ;功能:调用返回 A 不为零为有键入 ;占用:A,DPTR ;入口:无 出口:A ORG 0180H
T KB: MOV DPTR #PORT A CLR A MOVX@DPTR,A;关显示,键送0 INC DPTR INC DPTR;指向 PORT C MOVX A, ODPTR;读键输入 CPL A ANLA,#0FH;屏蔽无效位 RET 取键值程序 功能:等待键入,并刷新显示,并返回键值放A 占用:PSW,A,DPTR,RO,R2,R3,R4,R6,R7 入口:无出口:A ORG 0190H WAT KB: MOV RO, #3FH WAT0: ACALL DISP0;刷新显示器 ACALL t KB JWAT0;无键,循环 ACALL KEY LD;延时消抖,刷新显示 JZ WAT_0;无键,循环 KB VUL: CLR A MOV DPTR, #PORT B TR,A;关显示 MOVR2,#0F班H MoV R4.#0 KB 1: MOV DPTR #PORT A Mov A R2 MOVX @DPTR,A;扫描键盘 INC DPTR INC DPTR MOVX A, ODPTR;读键盘 CPL A ANLA,#0FH;屏蔽无效位 JNZ KB2;有键,转键分析 INC R4 Mov A R2 JNB ACO.7,WAT0;无键,返 MOV R2, A SJMP KB1;无键,扫描下一行 JCKB_3;有键,转取键值 XCHA,R4;取下一行
T_KB: MOV DPTR,#PORT_A CLR A MOVX @DPTR,A ;关显示,键送 0 INC DPTR INC DPTR ;指向 PORT_C MOVX A,@DPTR ;读键输入 CPL A ANL A,#0FH ;屏蔽无效位 RET ;取键值程序 ;功能:等待键入,并刷新显示,并返回键值放 A ;占用:PSW,A,DPTR,R0,R2,R3,R4,R6,R7 ;入口:无 出口:A ORG 0190H WAT_KB: MOV R0,#3FH WAT_0: ACALL DISP_0 ;刷新显示器 ACALL T_KB JZ WAT_0 ;无键,循环 ACALL KEY_LD ;延时消抖,刷新显示 JZ WAT_0 ;无键,循环 KB_VUL: CLR A CPL A MOV DPTR,#PORT_B MOVX @DPTR,A ;关显示 MOV R2,#0FEH MOV R4,#0 KB_1: MOV DPTR,#PORT_A MOV A,R2 MOVX @DPTR,A ;扫描键盘 INC DPTR INC DPTR MOVX A,@DPTR ;读键盘 CPL A ANL A,#0FH ;屏蔽无效位 JNZ KB_2 ;有键,转键分析 INC R4 MOV A,R2 JNB ACC.7,WAT_0 ;无键,返回 RL A MOV R2,A SJMP KB_1 ;无键,扫描下一行 KB_2: RRC A JC KB_3 ;有键,转取键值 XCH A,R4 ;取下一行
ADD A#8 CH A R4 SJMP KB_2;无键,循环 KB 3: MOV R2. #2 KB 4: ACALL DISP O ACALL T KB JZKB_5;刷新显示,等键释放 DJNZ R2, KB 4 KB 5: MOV DPTR, #KEY TB MOV A R4 MOVC A,@A+DPTR;取键值 KEY LD: ACALL DISP O ACALL DISP O ACALL T KB RET KEY TB: DB 07H 08H 09H 0AH: 78.9.A DB 1CH, lDH, IEH, 11H: FFIS/FUNC, FFNO/USER, FILL/MODE, 2 DB04H,05H,O6H,OBH;4,5,6,B 1AH, 1BH, IFH, 10H COMP/DEC, MOVE/HEX, OFST/HIST, MON 01H,O2H,03H,OCH:1,2,3,C DB 18H, 19H, 14H, 15H BP/BTOP, BT/BENT, EXEC, SCAL DB OOH, OFH, OEH, ODH 0, F, E, D DB 16H, 17H, 12H, 13H: NEXT/+, LAST/-, TRAC, STEP
ADD A,#8 XCH A,R4 SJMP KB_2 ;无键,循环 KB_3: MOV R2,#21 KB_4: ACALL DISP_0 ACALL T_KB JZ KB_5 ;刷新显示,等键释放 DJNZ R2,KB_4 KB_5: MOV DPTR,#KEY_TB MOV A,R4 MOVC A,@A+DPTR ;取键值 RET KEY_LD: ACALL DISP_0 ACALL DISP_0 ACALL T_KB RET KEY_TB: DB 07H,08H,09H,0AH ;7,8,9,A DB 1CH,1DH,1EH,11H ;FFIS/FUNC,FFNO/USER,FILL/MODE,空 DB 04H,05H,06H,0BH ;4,5,6,B DB 1AH,1BH,1FH,10H ;COMP/DEC,MOVE/HEX,OFST/HIST,MON DB 01H,02H,03H,0CH ;1,2,3,C DB 18H,19H,14H,15H ;BP/BTOP,BT/BENT,EXEC,SCAL DB 00H,0FH,0EH,0DH ;0,F,E,D DB 16H,17H,12H,13H ;NEXT/+,LAST/-,TRAC,STEP