📄 th25_计算器.asm
字号:
;P1 键盘读入口 计算器实验
DBUF EQU 30H
TEMP EQU 40H
YJ EQU 50H
YJ1 EQU 51H
GONG EQU 52H
DIN BIT P3.6
CLK BIT P3.7
ORG 0000H
LJMP START
ORG 0030H
START: MOV R3,#0
MOV GONG,#0
MOV 30H,#10H
MOV 31H,#10H
MOV 32H,#10H
MOV 33H,#10H
MOV 34H,#10H
MLoop: LCALL DISP
WAIT: LCALL TestKey
jz WAIT
CALL GetKey
INC R3
CJNE A,#0,NEXT1
LJMP E1
NEXT1: CJNE A,#1,NEXT2
LJMP E1
NEXT2: CJNE A,#2,NEXT3
LJMP E1
NEXT3: CJNE A,#3,NEXT4
LJMP E1
NEXT4: CJNE A,#4,NEXT5
LJMP E1
NEXT5: CJNE A,#5,NEXT6
LJMP E1
NEXT6: CJNE A,#6,NEXT7
LJMP E1
NEXT7: CJNE A,#7,NEXT8
LJMP E1
NEXT8: CJNE A,#8,NEXT9
LJMP E1
NEXT9: CJNE A,#9,NEXT10
LJMP E1
NEXT10: CJNE A,#10,NEXT11
LJMP E2
NEXT11: CJNE A,#11,NEXT12
LJMP E2
NEXT12: CJNE A,#12,NEXT13
LJMP E2
NEXT13: CJNE A,#13,NEXT14
LJMP E2
NEXT14: CJNE A,#14,NEXT15
LJMP E2
NEXT15: LJMP E3
E1: CJNE R3,#1,N1
LJMP E11
N1: CJNE R3,#2,N2
LJMP E12
N2: CJNE R3,#3,N3
LJMP E13
N3: LJMP E3
E11: MOV R4,A
MOV 34H,A
MOV 33H,#10H
MOV 32H,#10H
LJMP MLOOP
E12: MOV R7,A
MOV B,#10
MOV A,R4
MUL AB
ADD A,R7
MOV R4,A
MOV 32H,#10H
MOV 33H,34H
MOV 34H, R7
LJMP MLOOP
E13: MOV R7,A
MOV B,#10
MOV A,R4
MUL AB
JB OV,E3
ADD A,R7
JB CY,E3
MOV R4,A
MOV 32H,33H
MOV 33H,34H
MOV 34H,R7
LJMP MLOOP
E3: MOV R3,#0
MOV R4,#0
MOV YJ,#0
MOV GONG,#0
MOV 30H,#10H
MOV 31H,#10H
MOV 32H,#10H
MOV 33H,#10H
MOV 34H,#10H
LJMP MLOOP
E2: MOV 34H,#10H
MOV 33H,#10H
MOV 32H,#10H
MOV R0,GONG ;与上次功能键交换
MOV GONG,A
MOV A,R0
CJNE A,#10,N21
LJMP JIA ;+
N21: CJNE A,#11,N22
LJMP JIAN ;-
N22: CJNE A,#12,N23
LJMP CHENG ;*
N23: CJNE A,#13,N24
LJMP CHU ;/
N24: CJNE A,#0,N25
LJMP FIRST
N25: LJMP DEN ;=
N4: LJMP E3
FIRST: MOV YJ,R4
MOV R3,#0
LJMP DISP1
JIA: MOV A,YJ
ADD A,R4
JB CY,N4
MOV YJ,A
MOV R3,#0
LJMP DISP1
JIAN: MOV A,YJ
SUBB A,R4
JB CY,E3
MOV YJ,A
MOV R3,#0
LJMP DISP1
CHENG: MOV A,YJ
MOV B,A
MOV A,R4
MUL AB
JB OV,E3
MOV YJ,A
MOV R3,#0
LJMP DISP1
CHU: MOV A,R4
MOV B,A
MOV A,YJ
DIV AB
MOV YJ,A
MOV R3,#0
LJMP DISP1
DEN: MOV R3,#0
LJMP DISP1
DISP1:
MOV B,#10
MOV A,YJ
DIV AB
MOV YJ1,A
MOV A,B
MOV 34H,A
MOV A,YJ1
JZ DISP11
MOV B,#10
MOV A,YJ1
DIV AB
MOV YJ1,A
MOV A,B
MOV 33H,A
MOV A,YJ1
JZ DISP11
MOV 32h,A
DISP11:LJMP MLOOP
; 串行静态显示 DISP1.ASM 5 LED
; ?P3.0--DIN P3.1--CLK
DISP: MOV R0, #DBUF
MOV R1, #TEMP
MOV R2, #5
DP10:MOV DPTR,#SEGTAB
MOV A, @R0
MOVC A, @A+DPTR
MOV @R1, A
INC R0
INC R1
DJNZ R2, DP10
MOV R0, #TEMP
MOV R1, #5
DP12:MOV R2, #8
MOV A, @R0
DP13:RLC A
MOV DIN, C
CLR CLK
SETB CLK
DJNZ R2, DP13
INC R0
DJNZ R1, DP12
RET
SEGTAB: DB 3FH,06H,5BH,4FH,66H,6DH
DB 7DH,07H,7FH,6FH,77H,7CH
DB 39H,5EH,79H,71H,00H,40H
;=====================================
TestKey:
MOV P1,#0FH ; 读入键状态
MOV A,P1
CPL A
ANL A,#0fh ; 高四位不用
RET
KeyTable:DB 0EEH,0DEH,0BEH,07EH
DB 0EDH,0DDH,0BDH,07DH
DB 0EBH,0DBH,0BBH,07BH
DB 0E7H,0D7H,0B7H,077H ; 键码定义
GetKey:
MOV R6,#10
ACALL DELAY
MOV P1,#0FH
MOV A,P1
CJNE A,#0FH, K12
LJMP MLOOP
K12: MOV B,A
MOV P1,#0EFH ;
MOV A,P1
CJNE A,#0EFH,K13 ;
MOV P1,#0DFH
MOV A,P1
CJNE A,#0DFH,K13 ;
MOV P1,#0BFH
MOV A,P1
CJNE A,#0BFH,K13;
MOV P1,#7FH
MOV A,P1
CJNE A,#7FH, K13;
LJMP MLOOP
K13: ANL A,#0F0H;
ORL A,B
MOV B,A
MOV R1,#16
MOV R2,#0
MOV DPTR,#KEYTABLE
K14: MOV A,R2
MOVC A,@A+DPTR
CJNE A,B,K16
MOV P1,#0FH;
K15: MOV A,P1
CJNE A,#0FH, K15;
MOV R6,#10
ACALL DELAY
MOV A, R2
RET
K16: INC R2;
DJNZ R1, K14
LJMP MLOOP
DELAY: ; 延时子程序
MOV R7, #0
DLOOP:
DJNZ R7, DLOOP
DJNZ R6, DLOOP
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -