ADD A,#79 ;R3中送#0FFH
MOV R2,A
MOV R3,#0FFH
AJMP TIAOZHENG1
TIAOZHENG1: MOV A,year
MOV B,#04
DIV AB
MOV A,B
JNZ GGG1
MOV A,65H ;当前年为闰年
CJNE A,#01H,AAAA
AJMP GGG1 ;当前月是1
AAAA: CJNE A,#02H,BBBB
AJMP GGG1 ;当前月是2
BBBB: CJNE R2,#0FFH,GGG2
MOV R3,#0FFH ;当前月不是1和2,
MOV R2,#01H ;R1和R2总和加一
AJMP GGG1
GGG2: INC R2
GGG1: MOV R0,year ;查一年数据
LCALL CHECKMONTH
MOV A,R2
CLR C
SUBB A,R7
MOV P2.7,C
CJNE A,#01H,GGG3
MOV R2,#01H
MOV A,R3
CJNE A,#00H,NEW1
MOV 57H,#01H ;R2和R3总和减R7
MOV 56H,#01H ;为0,则为春节
LJMP S_PLAY
GGG3: CJNE A,#00H,GGG6
MOV R2,A
AJMP OLD
GGG6: JNB P2.7,NEW2
MOV A,R7
CLR C
SUBB A,R2
MOV R7,A
CJNE R3,#0FFH,GGG5
MOV A,R3
CLR C
SUBB A,R7
MOV R2,A
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 P2.7,C
MOV R6,A
MOV A,R5
JB ACC.0,AAA ;12月为小月,转到AAA
MOV A,R2
CLR C
SUBB A,#30
MOV P2.7,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 P2.7, 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
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减一月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R6
JB ACC.6,SM11
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
SM11:
JC SM12
MOV A,R1 ;R2减1月天数,够减
MOV R2,A ;转二月
AJMP M2
SM12:
CJNE R3,#00H,M13 ;R2减1月天数
LJMP Y1 ;不够减,判R3为0否
M13:
MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让一月减
MOV R2,A ;还不够,则转Y1
MOV R3,#00H
AJMP M1
M2:
CLR C ;R2减一月天数,够减
MOV A,R2 ;转三月
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 ;再让二月减
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
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 ;R2减闰3月天数
LJMP RY3 ;不够减,判,R3为0否
RM34:
MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让闰3月减
MOV R2,A ;还不够,则转RY3
MOV R3,#00H
AJMP RM3
M4:
MOV A,R2
CLR C ;R2减4月天数
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
MOV A,R1 ;R2减4月天数,够减
MOV R2,A
AJMP MM4
M42:
CJNE R3,#00H,M43 ;R2减4月天数
LJMP Y4 ;不够减,判,R3为0否
M43:
MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让4月减
MOV R2,A ;还不够,则转Y4
MOV R3,#00H
AJMP M4
MM4:
LCALL CHECKRE ;查4月,如果不为闰月
CJNE A,#04H,M5 ;转5月
RM4:
MOV A,R4
ANL A,#0FH ;R2减闰4月天数
JNZ RM41
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
AJMP RM42
RM41:
MOV A,R2
CLR C
SUBB A,#29
MOV R1,A
RM42:
JC RM43
MOV A,R1 ;R2减闰4月天数,够减
MOV R2,A ;转5月
AJMP M5
RM43:
CJNE R3,#00H,RM44 ;R2减闰4月天数
LJMP RY4 ;不够减,判,R3为0否
RM44:
MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让闰4月减
MOV R2,A
MOV R3,#00H ;还不够,则转Y4
AJMP RM4
M5:
MOV A,R2 ;R2减5月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R6
JB ACC.1,M51
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
M51:
JC M52
MOV A,R1 ;R2减5月天数,够减
MOV R2,A
AJMP MM5
M52:
CJNE R3,#00H,M53 ;R2减5月天数
LJMP Y5 ;不够减,判,R3为0否
M53:
MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让5月减
MOV R2,A ;还不够,则转Y5
MOV R3,#00H
LJMP M5
MM5:
LCALL CHECKRE ;查5月,如果不为闰月
CJNE A,#05H,M6 ;转6月
RM5:
MOV A,R4 ;R2减闰5月天数
ANL A,#0FH
JNZ RM51
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
LJMP RM52
RM51:
MOV A,R2
CLR C
SUBB A,#29
MOV R1,A
RM52:
JC RM53
MOV A,R1 ;R2减闰5月天数,够减
MOV R2,A ;转6月
LJMP M6
RM53:
CJNE R3,#00H,RM54 ;R2减闰5月天数
LJMP RY5 ;不够减,判,R3为0否
RM54:
MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让5月减
MOV R2,A ;还不够,则转RY5
MOV R3,#00H
LJMP RM5
M6:
MOV A,R2 ;R2减6月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R6
JB ACC.0,M61
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
M61:
JC M62
MOV A,R1 ;R2减6月天数,够减
MOV R2,A
LJMP MM6
M62:
CJNE R3,#00H,M63 ;R2减6月天数
LJMP Y6 ;不够减,判,R3为0否
M63:
MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让6月减
MOV R2,A ;还不够,则转Y6
MOV R3,#00H
LJMP M6
MM6:
LCALL CHECKRE ;查6月,如果不为闰月
CJNE A,#06H,M7 ;转7月
RM6:
MOV A,R4
ANL A,#0FH ;R2减闰6月天数
JNZ RM61
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
LJMP RM62
RM61:
MOV A,R2
CLR C
SUBB A,#29
MOV R1,A
RM62:
JC RM63
MOV A,R1 ;R2减闰6月天数,够减
MOV R2,A ;转7月
LJMP M7
RM63:
CJNE R3,#00H,RM64 ;R2减闰6月天数
LJMP RY6 ;不够减,判,R3为0否
RM64:
MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让闰6月减
MOV R2,A ;还不够,则转RY6
MOV R3,#00H
LJMP RM6
M7:
MOV A,R2 ;R2减7月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R5
JB ACC.6,M71
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
M71:
JC M72
MOV A,R1 ;R2减7月天数,够减
MOV R2,A
LJMP MM7
M72:
CJNE R3,#00H,M73 ;R2减7月天数
LJMP Y7 ;不够减,判,R3为0否
M73:
MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让6月减
MOV R2,A ;还不够,则转Y7
MOV R3,#00H
LJMP M7
MM7:
LCALL CHECKRE ;查7月,如果不为闰月
CJNE A,#07H,M8 ;转8月
RM7:
MOV A,R4
ANL A,#0FH ;R2减闰7月天数
JNZ RM71
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
LJMP RM72
RM71:
MOV A,R2
CLR C
SUBB A,#29
MOV R1,A
RM72:
JC RM73
MOV A,R1 ;R2减闰7月天数,够减
MOV R2,A ;转8月
LJMP M8
RM73:
CJNE R3,#00H,RM74 ;R2减闰7月天数
LJMP RY7 ;不够减,判,R3为0否
RM74:
MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让闰7月减
MOV R2,A ;还不够,则转RY7
MOV R3,#00H
LJMP RM7
M8:
MOV A,R2 ;R2减8月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R5
JB ACC.5,M81
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
M81:
JC M82
MOV A,R1 ;R2减8月天数,够减
MOV R2,A ;转9月
LJMP M9
M82:
CJNE R3,#00H,M83 ;R2减8月天数
LJMP Y8 ;不够减,判,R3为0否
M83:
MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让8月减
MOV R2,A ;还不够,则转Y8
MOV R3,#00H
LJMP M8
M9:
MOV A,R2 ;R2减9月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R5
JB ACC.4,M91
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
M91:
JC M92
MOV A,R1 ;R2减9月天数,够减
MOV R2,A
LJMP MM9
M92:
CJNE R3,#00H,M93 ;R2减9月天数
LJMP Y9 ;不够减,判,R3为0否
M93:
MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让9月减
MOV R2,A ;还不够,则转Y9
MOV R3,#00H
LJMP M9
MM9:
LCALL CHECKRE ;查9月,如果不为闰月
CJNE A,#09H,M10 ;转10月
RM9:
MOV A,R4 ;R2减闰9月天数
ANL A,#0FH
JNZ RM91
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
LJMP RM92
RM91:
MOV A,R2
CLR C
SUBB A,#29
MOV R1,A
RM92:
JC RM93
MOV A,R1 ;R2减闰9月天数,够减
MOV R2,A ;转10月
LJMP M10
RM93:
CJNE R3,#00H,RM94 ;R2减闰9月天数
LJMP RY9 ;不够减,判,R3为0否
RM94:
MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让闰9月减
MOV R2,A ;还不够,则转RY9
MOV R3,#00H
LJMP RM9
M10:
MOV A,R2 ;R2减10月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R5
JB ACC.2,M101
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
M101:
JC M102
MOV A,R1 ;R2减10月天数,够减
MOV R2,A ;转11月
LJMP M11
M102:
CJNE R3,#00H,M103 ;R2减10月天数
LJMP Y10 ;不够减,判,R3为0否
M103:
MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让10月减
MOV R2,A ;还不够,则转Y10
MOV R3,#00H
LJMP M10
M11:
MOV A,R2 ;R2减11月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R5
JB ACC.1,M111
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
M111:
JC M112
MOV A,R1 ;R2减11月天数,够减
MOV R2,A ;转12月
LJMP M12
M112:
CJNE R3,#00H,M113 ;R2减11月天数
LJMP Y11 ;不够减,判,R3为0否
M113:
MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让11月减
MOV R2,A ;还不够,则转Y11
MOV R3,#00H
LJMP M11
M12:
MOV A,R2 ;R2减12月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R5
JB ACC.0,M121
CLR C
MOV A,R2
SUBB A,#30
MOV R1,A
M121:
CJNE R3,#00H,M122 ;R2减12月天数
LJMP Y12 ;不够减,判,R3为0否
M122:
MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让12月减
MOV R2,A ;还不够,则转Y12
MOV R3,#00H
LJMP M12
Y1:
MOV A,R2
MOV R0,A ;R2中为日的值
LCALL D_BCD
MOV 56H,A
MOV 57H,#01H
CLR F0 ;非闰月
LJMP S_PLAY
Y2:
CJNE R2,#00H,Y21
MOV A,R6 ;R2中为0,则为前一个月
MOV 56H,#29H ;的的最后一天
JB ACC.6,Y22
MOV 56H,#30H
Y22:
MOV 57H,#01H
CLR F0
LJMP S_PLAY
Y21:
MOV A,R2
MOV R0,A ;R2中为日的值
LCALL D_BCD
MOV 56H,A
MOV 57H,#02H
CLR F0
LJMP S_PLAY
RY2:
CJNE R2,#00H,RY21
MOV 56H,#29H ;R2中为0,则为前一个月
MOV A,R6 ;的的最后一天
JB ACC.5,RY22
MOV 56H,#30H
RY22:
MOV 57H,#02H
CLR F0
LJMP S_PLAY
RY21:
MOV A,R2 ;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#02H
SETB F0 ;闰月
LJMP S_PLAY
Y3:
CJNE R2,#00H,Y31
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#02H,Y32
MOV 56H,#29H ;前一个月是闰月
MOV A,R4
ANL A,#0FH ;R2中为0,则为前一个月
JNZ Y33 ;的的最后一天
MOV 56H,#30H
MOV 57H,#02H
SETB F0
LJMP S_PLAY
Y33:
MOV 57H,#02H
SETB F0
LJMP S_PLAY
Y32:
MOV 56H,#29H ;前一个月不是闰月
MOV A,R6
JB ACC.5,Y34
MOV 56H,#30H
Y34:
MOV 57H,#02H
CLR F0
LJMP S_PLAY
Y31:
MOV A,R2
MOV R0,A ;R2中为日的值
LCALL D_BCD
MOV 56H,A
MOV 57H,#03H
CLR F0
LJMP S_PLAY
RY3:
CJNE R2,#00H,RY31
MOV 56H,#29H
MOV A,R6
JB ACC.4,RY32 ;R2中为0,则为前一个月
MOV 56H,#30H ;的的最后一天
RY32:
MOV 57H,#03H
CLR F0
LJMP S_PLAY
RY31:
MOV A,R2 ;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#03H
SETB F0
LJMP S_PLAY
Y4:
CJNE R2,#00H,Y41
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#03H,Y42
MOV 56H,#29H ;前一个月是闰月
MOV A,R4 ;R2中为0,则为前一个月
ANL A,#0FH ;的最后一天
JNZ Y43
MOV 56H,#30H
MOV 57H,#03H
SETB F0
LJMP S_PLAY
Y43:
MOV 57H,#03H
SETB F0
LJMP S_PLAY
Y42:
MOV 56H,#29H ;前一个月不是闰月
MOV A,R6
JB ACC.4,Y44
MOV 56H,#30H
Y44:
MOV 57H,#03H
CLR F0
LJMP S_PLAY
Y41:
MOV A,R2 ;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#04H
CLR F0
LJMP S_PLAY
RY4:
CJNE R2,#00H,RY41
MOV 56H,#29H ;R2中为0,则为前一个月
MOV A,R6 ;的的最后一天
JB ACC.2,RY42
MOV 56H,#30H
RY42:
MOV 57H,#04H
CLR F0
LJMP S_PLAY
RY41:
MOV A,R2 ;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#04H
SETB F0
LJMP S_PLAY
Y5:
CJNE R2,#00H,Y51
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#04H,Y52
MOV 56H,#29H ;前一个月是闰月
MOV A,R4 ;R2中为0,则为前一个月
ANL A,#0FH ;的最后一天
JNZ Y53
MOV 56H,#30H
MOV 57H,#04H
SETB F0
LJMP S_PLAY
Y53:
MOV 57H,#04H
SETB F0
LJMP S_PLAY
Y52:
MOV 56H,#29H ;前一个月不是闰月
MOV A,R6
JB ACC.2,Y54
MOV 56H,#30H
Y54:
MOV 57H,#04H
CLR F0
LJMP S_PLAY
Y51:
MOV A,R2 ;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#05H
CLR F0
LJMP S_PLAY
RY5:
CJNE R2,#00H,RY51
MOV 56H,#29H ;R2中为0,则为前一个月
MOV A,R6 ;的最后一天
JB ACC.1,RY52
MOV 56H,#30H
RY52:
MOV 57H,#05H
CLR F0
LJMP S_PLAY
RY51:
MOV A,R2 ;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#05H
SETB F0
LJMP S_PLAY
Y6:
CJNE R2,#00H,Y61
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#05H,Y62
MOV 56H,#29H ;前一个月是闰月
MOV A,R4 ;R2中为0,则为前一个月
ANL A,#0FH ;的最后一天
JNZ Y63
MOV 56H,#30H
MOV 57H,#05H
SETB F0
LJMP S_PLAY
Y63:
MOV 57H,#05H
SETB F0
LJMP S_PLAY
Y62:
MOV 56H,#29H ;前一个月不是闰月
MOV A,R6
JB ACC.1,Y64
MOV 56H,#30H
Y64:
MOV 57H,#05H
CLR F0
LJMP S_PLAY
Y61:
MOV A,R2;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#06H
CLR F0
LJMP S_PLAY
RY6:
CJNE R2,#00H,RY61
MOV 56H,#29H ;R2中为0,则为前一个月
MOV A,R6 ;的最后一天
JB ACC.0,RY62
MOV 56H,#30H
RY62:
MOV 57H,#06H
CLR F0
LJMP S_PLAY
RY61:
MOV A,R2 ;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#06H
SETB F0
LJMP S_PLAY
Y7:
CJNE R2,#00H,Y71
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#06H,Y72
MOV 56H,#29H ;前一个月是闰月
MOV A,R4 ;R2中为0,则为前一个月
ANL A,#0FH ;的最后一天
JNZ Y73
MOV 56H,#30H
MOV 57H,#06H
SETB F0
LJMP S_pLAY
Y73:
MOV 57H,#06H
SETB F0
LJMP S_PLAY
Y72:
MOV 56H,#29H ;前一个月不是闰月
MOV A,R6
JB ACC.0,Y74
MOV 56H,#30H
Y74:
MOV 57H,#06H
CLR F0
LJMP S_PLAY
Y71:
MOV A,R2 ;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#07H
CLR F0
LJMP S_PLAY
RY7:
CJNE R2,#00H,RY71
MOV 56H,#29H ;R2中为0,则为前一个月
MOV A,R5 ;的最后一天
JB ACC.6,RY72
MOV 56H,#30H
RY72:
MOV 57H,#07H
CLR F0
LJMP S_PLAY
RY71:
MOV A,R2 ;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#07H
SETB F0
LJMP S_PLAY
Y8:
CJNE R2,#00H,Y81
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#07H,Y82
MOV 56H,#29H ;前一个月是闰月
MOV A,R4 ;R2中为0,则为前一个月
ANL A,#0FH ;的最后一天
JNZ Y83
MOV 56H,#30H
MOV 57H,#07H
SETB F0
LJMP S_PLAY
Y83:
MOV 57H,#07H
SETB F0
LJMP S_PLAY
Y82:
MOV 56H,#29H ;前一个月不是闰月
MOV A,R5
JB ACC.6,Y84
MOV 56H,#30H
Y84:
MOV 57H,#07H
CLR F0
LJMP S_PLAY
Y81:
MOV A,R2 ;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#08H
CLR F0
LJMP S_PLAY
Y9:
CJNE R2,#00H,Y91
MOV 56H,#29H ;R2中为0,则为前一个月
MOV A,R5 ;的最后一天
JB ACC.5,Y92
MOV 56H,#30H
Y92:
MOV 57H,#08H
CLR F0
LJMP S_PLAY
Y91:
MOV A,R2 ;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#09H
CLR F0
LJMP S_PLAY
RY9:
CJNE R2,#00H,RY91
MOV 56H,#29H ;R2中为0,则为前一个月
MOV A,R5;的最后一天
JB ACC.4,RY92
MOV 56H,#30H
RY92:
MOV 57H,#09H
CLR F0
LJMP S_PLAY
RY91:
MOV A,R2;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#09H
SETB F0
LJMP S_PLAY
Y10:
CJNE R2,#00H,Y101
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#09H,Y102
MOV 56H,#29H ;前一个月是闰月
MOV A,R4 ;R2中为0,则为前一个月
ANL A,#0FH ;的最后一天
JNZ Y103
MOV 56H,#30H
MOV 57H,#09H
SETB F0
LJMP S_PLAY
Y103:
MOV 57H,#09H
SETB F0
LJMP S_PLAY
Y102:
MOV 56H,#29H ;前一个月不是闰月
MOV A,R5
JB ACC.4,Y104
MOV 56H,#30H
Y104:
MOV 57H,#09H
CLR F0
LJMP S_PLAY
Y101:
MOV A,R2;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#10H
CLR F0
LJMP S_PLAY
Y11:
CJNE R2,#00H,Y111
MOV 56H,#29H ;R2中为0,则为前一个月
MOV A,R5 ;的最后一天
JB ACC.2,Y112
MOV 56H,#30H
Y112:
MOV 57H,#10H
CLR F0
LJMP S_PLAY
Y111:
MOV A,R2 ;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#11H
CLR F0
LJMP S_PLAY
Y12:
CJNE R2,#00H,Y121
MOV 56H,#29H ;R2中为0,则为前一个月
MOV A,R5 ;的最后一天
JB ACC.1,Y122
MOV 56H,#30H
Y122:
MOV 57H,#11H
CLR F0
LJMP S_PLAY
Y121:
MOV A,R2;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#12H
CLR F0
LJMP S_PLAY
S_PLAY:
MOV R0,57H
LCALL DIVIDE ;月分离送显示缓存
MOV 52H,R1
MOV 53H,R2
MOV R0,56H
LCALL DIVIDE ;日分离送显示缓存
MOV 50H,R1
MOV 51H,R2
RET
;查是否闰月程序;;
CHECKRE:
MOV A,R4
SWAP A
ANL A,#0FH
RET
;10进制转换为BCD码程序;
D_BCD:
MOV A,R0
MOV B,#10
DIV AB
SWAP A
ORL A,B
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示程序;;;
DISPLAY:
MOV A,10H
ANL A,#00001111B
MOV 59H,A
MOV A,76H;第八列LED
ANL A,#00001111B
SWAP A
ADD A,59H
MOV P1,A
MOV A,70H
ANL A,#00001111B
ADD A,#01110000B
MOV P2,A
LCALL DL1MS
MOV P1,#0FFH
MOV A,10H
ANL A,#11110000B
SWAP A
MOV 5AH,A
MOV A,77H;第七列LED
ANL A,#00001111B
SWAP A
ADD A,5AH
MOV P1,A
MOV A,71H
ANL A,#00001111B
ADD A,#01100000B
MOV P2,A
LCALL DL1MS
MOV P1,#0FFH
MOV A,56H ;第六列LED
SWAP A
ANL A,#11110000B
ADD A,79H
SWAP A
MOV P1,A
MOV A,72H
ANL A,#00001111B
ADD A,#01010000B
MOV P2,A
LCALL DL1MS
MOV P1,#0FFH
MOV A,56H;第五列LED
ANL A,#11110000B
ADD A,7AH
SWAP A
MOV P1,A
MOV A,73H
ANL A,#00001111B
ADD A,#01000000B
MOV P2,A
LCALL DL1MS
MOV P1,#0FFH
MOV A,57H ;第四列LED
SWAP A
ANL A,#11110000B
ADD A,7BH
SWAP A
MOV P1,A
MOV A,74H
ANL A,#00001111B
ADD A,#00110000B
MOV P2,A
LCALL DL1MS
MOV P1,#0FFH
MOV A,57H;第三列LED
ANL A,#11110000B
ADD A,7CH
SWAP A
MOV P1,A
MOV A,75H
ANL A,#00001111B
ADD A,#00100000B
MOV P2,A
LCALL DL1MS
MOV P1,#0FFH
MOV P1,#00001111B
MOV P2,#00011111B ;第二列LED
LCALL DL1MS
MOV P1,#0FFH
MOV A,78H;第一列LED
ANL A,#00001111B
ADD A,#00100000B
MOV P1,A
MOV P2,#00001111B
LCALL DL1MS
MOV P1,#0FFH
RET
ZJ:
MOV 01H,#150
ZZZ1:
MOV P2,#00001000B
MOV P1,#88H
LCALL DL1MS
MOV P2,#00011000B
MOV P1,#88H
LCALL DL1MS
MOV P2,#00101000B
MOV P1,#88H
LCALL DL1MS
MOV P2,#00111000B
MOV P1,#88H
LCALL DL1MS
MOV P2,#01001000B
MOV P1,#88H
LCALL DL1MS
MOV P2,#01011000B
MOV P1,#88H
LCALL DL1MS
MOV P2,#01101000B
MOV P1,#88H
LCALL DL1MS
MOV P2,#01111000B
MOV P1,#88H
LCALL DL1MS
DJNZ 01H,ZZZ1
MOV P1,#0FFH
RET
DL1MS:
MOV R6,#14H
DL1:
MOV R7,#19H
DL2:
DJNZ R7,DL2
DJNZ R6,DL1
RET
;~~~~~数据表~~~~~~~
TAB:
DB 35,15H,51H,00H,23,11H,52H,41H,42,12H,65H,00H
DB 31,11H,32H,00H,21,42H,52H,21H,39,52H,25H,00H
DB 28,25H,05H,71H,48,66H,42H,00H,37,33H,22H,00H
DB 25,15H,24H,51H,44,05H,52H,00H,33,22H,65H,00H
DB 22,21H,25H,41H,40,24H,52H,00H,30,52H,42H,91H
DB 49,55H,05H,00H,38,26H,44H,00H,27,53H,50H,60H
DB 46,53H,24H,00H,35,25H,54H,00H,24,41H,52H,41H
DB 42,45H,25H,00H,31,24H,52H,00H,21,51H,12H,21H
DB 40,55H,11H,00H,28,26H,21H,61H,47,26H,61H,00H
DB 36,13H,31H,00H,25,05H,31H,51H,43,12H,54H,00H
DB 33,51H,25H,00H,22,42H,25H,31H,41,32H,22H,00H
DB 30,55H,02H,71H,49,55H,22H,00H,38,26H,62H,00H
DB 27,13H,64H,60H,45,13H,32H,00H,34,12H,55H,00H
DB 23,10H,53H,51H,42,22H,45H,00H,31,52H,22H,00H
DB 21,52H,44H,21H,40,55H,44H,00H,29,26H,50H,71H
DB 47,26H,64H,00H,36,25H,32H,00H,25,23H,32H,50H
DB 44,44H,55H,00H,32,24H,45H,00H,22,55H,11H,30H
END
敬请留意:
1、文档中的页码设置中出了些不明原因的问题,有任何修改时请一定注意查看页码是否发生变化。
2、已将另一版本的报告上传至百度文库,相信你已经看到了⊙﹏⊙。
3、此文档的主干内容来源于网络,笔者进行了很大修改,但其中汇编程序太过繁杂,需要花很多时间才能理解。
4、学习是自己的事情,任务完成之后一定要确保自己有所收获。
……
愿你学习进步,天天快乐O(∩_∩)O~
联系客服