📄 万年历.asm
字号:
MOV R3,#00H
AJMP NEW
GGG5: MOV A,R7
MOV R2,A
AJMP OLD
NEW1: MOV R2,#0FFH
MOV R3,#01H
AJMP NEW
NEW2: MOV R2,A
MOV A,R3
CJNE A,#0FFH,GGG4
MOV A,R2
MOV R3,A
MOV R2,#0FFH
GGG4: AJMP NEW
;***************************
;* OLD *
;***************************
;农历为公历的前一年
OLD: MOV A,YEAR
DEC A
MOV R0,A
LCALL CHECKMONTH
MOV A,R2
CLR C
SUBB A,#29
MOV P1.6,C
MOV R6,A
MOV A,R5
JB ACC.0,AAA ;12月为小月,转到AAA
MOV A,R2
CLR C
SUBB A,#30
MOV P1.6,C
MOV R6,A
AAA: MOV A,R6
CJNE A,#00H,BBB
MOV 56H,#29H ;为0,则为11月最后一天
MOV A,R5 ;小月为11月29
JB ACC.1,CCC
MOV 56H,#30H ;大月为11月30
CCC: MOV 57H,#11H
LJMP S_PLAY
BBB: JNB P1.6,DDD
MOV A,#29 ;CY位置位,为12月
CLR C
SUBB A,R2
MOV R4,A
MOV A,R5
JB ACC.0,EEE
MOV A,#30
CLR C
SUBB A,R2
MOV R4,A
MOV A,R5
JB ACC.0,EEE
MOV A,#30
CLR C
SUBB A,R2
MOV R4,A
EEE: MOV A,R4
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#12H
LJMP S_PLAY
DDD: MOV A,#29 ;CY为0,为11月
CLR C
SUBB A,R4
MOV R1,A
MOV A,R5
JB ACC.1,FFF
MOV A,#30
CLR C
SUBB A,R4
MOV R1,A
FFF: MOV A,R1
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#11H
LJMP S_PLAY
;*************************
;* NEW *
;*************************
;农历和公历为同一年,此时R2中值为FFH时,R3有值,否则为0
NEW: NOP
M1: MOV A,R2 ;R2减1月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R6
JB ACC.6,SM11
MOV A,R2
CLR C
MOV A,#30
MOV R1,A
SM11: JC SM12
MOV A,R1 ;R2减1月天数 够减
MOV R2,A ;转2月
AJMP M2
SM12: CJNE R3,#00H,M13 ;R2减1月天数
LJMP Y1 ;不够减,判断R3为0否
M13: MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让1月减
MOV R2,A ;还不够转Y1
MOV R3,#00H
AJMP M1
M2: CLR C ;R2减1月天数 够减
MOV A,R2 ;转3月
SUBB A,#29
MOV R1,A
MOV A,R6
JB ACC.5,M21
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
M21: JC M22
MOV A,R1 ;R2减2月天数 够减
MOV R2,A
AJMP MM2
M22: CJNE R3,#00H,M23 ;R2减2月天数
LJMP Y2 ;不够减,判断R3为0否
M23: MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让2月减
MOV R2,A ;还不够转Y2
MOV R3,#00H
AJMP M2
MM2: LCALL CHECKRE ;查2月,如果不为闰月
CJNE A,#02H,M3 ;转3月
RM2: MOV A,R4
ANL A,#0FH ;R2减闰2月天数
JNZ RM21
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
AJMP RM22
RM21: MOV A,R2
CLR C
SUBB A,#29
MOV R1,A
RM22: JC RM23
MOV A,R1 ;R2减闰2月天数,够减
MOV R2,A ;转3月
AJMP M3
RM23: CJNE R3,#00H,RM24 ;R2减润2月天数
LJMP RY2 ;不够减,判断R3为0否
RM24: MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让闰2月减
MOV R3,#00H ;还不够转RY2
AJMP RM2
M3: MOV A,R2 ;R2减3月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R6
JB ACC.4,M31
CLR C
MOV A,R2
SUBB A,#30
MOV R1,A
M31: JC M32
MOV A,R1 ;R2减3月天数,够减
MOV R2,A
AJMP MM3
M32: CJNE R3,#00H,M33 ;R2减3月天数
LJMP Y3 ;不够减,判断R3为0否
M33: MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让3月减
MOV R2,A ;还不够,则转Y3
MOV R3,#00H
AJMP M3
MM3: LCALL CHECKRE ;查3月,如果不为闰月
CJNE A,#03H,M4 ;转4月
RM3: MOV A,R4
ANL A,#0FH ;R2减闰3月天数
JNZ RM31
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
AJMP RM32
RM31: MOV A,R2
CLR C
SUBB A,#29
MOV R1,A
RM32: JC RM33
MOV A,R1 ;R2减闰3月天数,够减
MOV R2,A ;转4月
AJMP M4
RM33: CJNE R3,#00H,RM34
LJMP RY3 ;R2减润3月天数
RM34: MOV A,R2 ;不够减,判断R3为0否
ADD A,R3 ;不为0,R3加到R2中
MOV R2,A ;再让闰3月减
MOV R3,#00H ;还不够转RY3
AJMP RM3
M4: MOV A,R2 ;R2减4月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R6
JB ACC.2,M41
CLR C
MOV A,R2
SUBB A,#30
MOV R1,A
M41: JC M42
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -