ORG 00H
JMP START
ORG 23H
JMP UARTI
START: MOV TMOD,#20H
ANL PCON,#7FH
MOV TH1,#0F3H
SETB TR1
MOV SCON,#0D0H
MOV IE,#90H
JMP Y0 ;初始化程序
UARTI: PUSH ACC
PUSH PSW
JBC RI,LOOP
CLR TI
JMP RETURN
LOOP: MOV R1,#3
MOV A,SBUF
MOV R2,35H
MOV @R2,A
INC R2
DJNZ R1,RETURN
JMP XS0
RETURN:POP PSW
POP ACC
RETI ;中断服务程序
Y0: SETB P3.3
SETB P3.4
SETB P3.5
JNB P3.7,NEXT0
JMP Y0
NEXT0: JB P3.7,PROCESS0
JMP NEXT0 ;判断ON/OFF键是否被按下?
PROCESS0: MOV R3,#3 ;ON/OFF键打至ON档
X0: CALL XS1
CALL DELAY1
DJNZ R3,X0
CALL XS2
JMP Y01
Y01: SETB P3.3
SETB P3.4
SETB P3.5
JNB P3.7,NEXT1
JMP Y02
NEXT1: JB P3.7 Y0
CALL XS3
JMP NEXT1 ;ON/OFF键打至OFF档
Y02: JNB P3.2,NEXT2
JMP Y1
NEXT2: JB P3.2,PROCESS1 ;清零键是否被按下?
CALL XS3
JMP Y01
PROCESS1: MOV R3,#3 ;清零键被按下
MOV R4,#31H
X1 MOV @R4,#0CFH
INC R4
DJNZ R3,X1
CALL XS3
JMP Y1
XS1: MOV 40H,#6DH ;开机显示“PASS PASS”的友好界面
MOV 41H,#6DH
MOV 42H,#0EEH
MOV 43H,#0ECH
MOV 44H,#6DH
MOV 45H,#6DH
MOV 46H,#0EEH
MOV 47H,#0ECH
CALL DISP0
SETB P3.3
SETB P3.4
SETB P3.5
RET
XS2: MOV R3,#3 ;显示清零后全“0”的界面
MOV R4,#31H
MOV R5,#35H
X2: MOV @R4,#0CFH
MOV @R5,#0CFH
INC R4
INC R5
DJNZ R3,X2
CALL DISP1
SETB P3.3
SETB P3.4
SETB P3.5
RET
XS3: CALL DISP1 ;显示运行中的界面
SETB P3.3
SETB P3.4
SETB P3.5
RET
DISP0: MOV R5,#40H ;友好界面的数据送到数码管显示
MOV R6,#8
D0: MOV A,@R5
MOV P0,A
CALL DELAY
INC R5
DJNZ R6,D0
RET
DISP1: MOV 30H,#0C9H ;其他的数据送到数码管显示
MOV 34H,#0C9H
MOV A,30H
MOV P0,A
CALL DELAY
MOV A,31H
MOV P0,A
CALL DELAY
MOV A,32H
MOV P0,A
CALL DELAY
MOV A,33H
MOV P0,A
CALL DELAY
MOV A,34H
MOV P0,A
CALL DELAY
MOV A,35H
MOV P0,A
CALL DELAY
MOV A,36H
MOV P0,A
CALL DELAY
MOV A,37H
MOV P0,A
CALL DELAY
RET
DELAY: MOV R0,#06 ;延时1.5ms扫描时间
D1: MOV R1,#248
DJNZ R1,$
DJNZ R0,D1
RET
DELAY1:MOV R0,#400 ;延时0.1s闪烁时间
D2: MOV R1,#248
DJNZ R1,$
DJNZ R0,D2
RET
Y1: SETB P3.3 ;判断键“7”或“4”是否被按下
SETB P3.4
CLR P3.5
JNB P3.7,NEXT3
JNB P3.2,NEXT4
JMP Y2
NEXT3: JB P3.7,PROCESS2
CALL XS4
JMP NEXT3
PROCESS2: MOV R1,#2 ;键“7”被按下
MOV A,R1
MOV DPTR,#TABLE
MOVC A,@A+DPTR
CALL YD
CALL XS4
JMP Y2
NEXT4: JB P3.2,PROCESS3
CALL XS4
JMP NEXT4
PROCESS3: MOV R1,#5 ;键“4”被按下
MOV A,R1
MOV DPTR,#TABLE
MOVC A,@A+DPTR
CALL YD
CALL XS4
JMP Y2
YD: XCH A,31H ;移位显示
XCH A,32H
XCH A,33H
RET
XS4: CALL DISP1 ;调用显示程序,显示数值
SETB P3.3
SETB P3.4
CLR P3.5
RET
Y2: SETB P3.3 ;判断键“8”或“5”是否被按下
CLR P3.4
SETB P3.5
JNB P3.7,NEXT5
JNB P3.2,NEXT6
JMP Y3
NEXT5: JB P3.7,PROCESS4
CALL XS5
JMP NEXT5
PROCESS4: MOV R1,#1 ;键“8”被按下
MOV A,R1
MOV DPTR,#TABLE
MOVC A,@A+DPTR
CALL YD
CALL XS5
JMP Y3
NEXT6: JB P3.2,PROCESS5
CALL XS5
JMP NEXT6
PROCESS5: MOV R1,#4 ;键“5”被按下
MOV A,R1
MOV DPTR,#TABLE
MOVC A,@A+DPTR
CALL YD
CALL XS5
JMP Y3
YD: XCH A,31H ;移位显示
XCH A,32H
XCH A,33H
RET
XS5: CALL DISP1 ;调用显示程序,显示数值
SETB P3.3
CLR P3.4
SETB P3.5
RET
Y3: SETB P3.3 ;判断键“9”或“6”是否被按下
CLR P3.4
CLR P3.5
JNB P3.7,NEXT7
JNB P3.2,NEXT8
JMP Y4
NEXT7: JB P3.7,PROCESS6
CALL XS6
JMP NEXT7
PROCESS6: MOV R1,#0 ;键“9”被按下
MOV A,R1
MOV DPTR,#TABLE
MOVC A,@A+DPTR
CALL YD
CALL XS6
JMP Y4
NEXT8: JB P3.2,PROCESS7
CALL XS6
JMP NEXT8
PROCESS7: MOV R1,#3 ;键“6”被按下
MOV A,R1
MOV DPTR,#TABLE
MOVC A,@A+DPTR
CALL YD
CALL XS6
JMP Y4
YD: XCH A,31H ;移位显示
XCH A,32H
XCH A,33H
RET
XS6: CALL DISP1 ;调用显示程序,显示数值
SETB P3.3
CLR P3.4
CLR P3.5
RET
Y4: CLR P3.3 ;判断键“1”或“0”是否被按下
SETB P3.4
CLR P3.5
JNB P3.7,NEXT9
JNB P3.2,NEXT10
JMP Y5
NEXT9: JB P3.7,PROCESS8
CALL XS7
JMP NEXT9
PROCESS8: MOV R1,#8 ;键“1”被按下
MOV A,R1
MOV DPTR,#TABLE
MOVC A,@A+DPTR
CALL YD
CALL XS7
JMP Y5
NEXT10: JB P3.2,PROCESS9
CALL XS7
JMP NEXT10
PROCESS9: MOV R1,#9 ;键“0”被按下
MOV A,R1
MOV DPTR,#TABLE
MOVC A,@A+DPTR
CALL YD
CALL XS7
JMP Y5
YD: XCH A,31H ;移位显示
XCH A,32H
XCH A,33H
RET
XS7: CALL DISP1 ;调用显示程序,显示数值
CLR P3.3
SETB P3.4
CLR P3.5
RET
Y5: CLR P3.3 ;判断键“2”或“.”是否被按下
CLR P3.4
SETB P3.5
JNB P3.7,NEXT11
JNB P3.2,NEXT12
JMP Y6
NEXT11:JB P3.7,PROCESS10
CALL XS8
JMP NEXT11
PROCESS10: MOV R1,#7 ;键“2”被按下
MOV A,R1
MOV DPTR,#TABLE
MOVC A,@A+DPTR
CALL YD
CALL XS8
JMP Y6
NEXT12: JB P3.2,PROCESS11
CALL XS8
JMP NEXT12
PROCESS11: MOV R1,#10H ;键“.”被按下
MOV A,31H ;在最后一个数值上接着小数点
ADD A,R1
MOV 31H,A
CALL XS8
JMP Y6
XS8: CALL DISP1 ;调用显示程序,显示数值
CLR P3.3
CLR P3.4
SETB P3.5
RET
Y6: CLR P3.3 ;判断键“3”或“确定”是否被按下
CLR P3.4
CLR P3.5
JNB P3.7,NEXT13
JNB P3.2,NEXT14
JMP Y01
NEXT13:JB P3.7,PROCESS12
CALL XS9
JMP NEXT13
PROCESS12: MOV R1,#6 ;键“3”被按下
MOV A,R1
MOV DPTR,#TABLE
MOVC A,@A+DPTR
CALL YD
CALL XS9
JMP Y01
NEXT14: JB P3.2,PROCESS13
CALL XS9
JMP NEXT14
PROCESS13: MOV R1,#3
MOV R2,#31H
PROCESS14: MOV A,@R2
MOV SBUF,A
WAIT: JBC TI,LOOP1
CALL XS9
JMP WAIT
LOOP1: INC R2
DJNZ R1,PROCESS14
JMP Y01
XS9: CALL DISP1 ;调用显示程序,显示数值
CLR P3.3
CLR P3.4
CLR P3.5