万年历,源码1

2021/6/13 12:24:35

本文主要是介绍万年历,源码1,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 ;*****************************
                                      ;*        万年历程序         *
                                      ;*****************************
                          ;67H(高两位年)66H(低两位年)65H(月)64H(星期)
                          ;63H(日)62H(小时)61H(分)60H(秒)57H(农历月)56H(农历日)
                          ;显示缓冲单元7CH~7BH(4CH~4BH)年低位,7AH~79H(4AH~49H)月,
                          ;78H(48H)星期,77H~76H(47H~46H)日,75H~74H(45H~44H)时,
                          ;73H72H(43H~42H)分,71H~70H(41H~40H)秒,5EH~5DH(55H~54H)农历年
                          ;5CH~5BH(53H~52H)农历月,5AH~59H(51H~50H)农历日
                          ;闰年标志为F0,定时器T1为调整时候闪烁用
                          ;
                          ;
                                         SCLK  EQU  P3.2
                                         IO    EQU  P3.3
                                         RST   EQU  P3.4
                                         YEAR  DATA 66H
                                         MONTH DATA 65H
                                         WEEK  DATA 64H
                                         DAY   DATA 63H
                                         HOUR  DATA 62H
                                        MINTUE DATA 61H
                                       SECOND  DATA 60H
                                   DS1302_ADDR DATA 32H
                                   DS1302_DATA DATA 31H
                                          ORG  0000H
                                          AJMP START
                                          ORG  0003H
                                          RETI
                                          ORG  000BH
                                          RETI
                                          ORG  0013H
                                          RETI


                                          ORG  001BH
                                          LJMP INTT1
                                          ORG  0023H
                                          RETI
                                          ORG  002BH
                                          RETI

                             ;************************************
                             ;*            主程序                *
                             ;************************************
                                 START:   SETB EA
                                          MOV SCON,#00H    ;串行输出,方式0
                                          MOV TMOD,#10H    ;计数器1,方式1
                                          MOV TL1,#00H
                                          MOV TH1,#00H
                                          MOV DS1302_ADDR,#8EH
                                          MOV DS1302_DATA,#00H       ;允许写1302
                                          LCALL WRITE
                                          MOV DS1302_ADDR,#90H
                                          MOV DS1302_DATA,#0A6H       ;1302充电,充电电流1.1mA
                                          LCALL WRITE
                              MAIN1:      MOV DS1302_ADDR,#8DH         ;READ OUT YEAR
                                          LCALL READ
                                          MOV YEAR,DS1302_DATA
                                          MOV DS1302_ADDR,#8BH        ;READ OUT WEEK
                                          LCALL READ
                                          MOV WEEK,DS1302_DATA
                                          MOV DS1302_ADDR,#89H          ;READ OUT MONTH
                                          LCALL READ
                                          MOV MONTH,DS1302_DATA
                                          MOV DS1302_ADDR,#87H          ;READ OUT DAY
                                          LCALL READ
                                          MOV DAY,DS1302_DATA
                                          MOV DS1302_ADDR,#85H       ;READ OUT HOUR
                                          LCALL READ
                                          MOV HOUR,DS1302_DATA
                                          MOV DS1302_ADDR,#83H       ;READ OUT MINTUE
                                          LCALL READ
                                          MOV MINTUE,DS1302_DATA
                                          MOV DS1302_ADDR,#81H       ;READ OUT SECOND
                                          LCALL READ
                                          MOV SECOND,DS1302_DATA
                                          MOV R0,YEAR                ;年分离,送显示缓存
                                          LCALL DIVIDE
                                          MOV 7BH,R1
                                          MOV 4BH,R1
                                          MOV 7CH,R2
                                          MOV 4CH,R2
                                          MOV 78H,WEEK
                                          MOV 48H,WEEK
                                          MOV R0,MONTH                ;月分离,送显示缓存
                                          LCALL DIVIDE
                                          MOV 79H,R1
                                          MOV 49H,R1
                                          MOV 7AH,R2
                                          MOV 4AH,R2
                                          MOV R0,DAY                ;日分离,送显示缓存
                                          LCALL DIVIDE
                                          MOV 76H,R1
                                          MOV 46H,R1
                                          MOV 77H,R2
                                          MOV 47H,R2
                                          MOV R0,HOUR                ;小时分离,送显示缓存
                                          LCALL DIVIDE
                                          MOV 74H,R1
                                          MOV 44H,R1
                                          MOV 75H,R2
                                          MOV 45H,R2
                                          MOV R0,MINTUE                ;分分离,送显示缓存
                                          LCALL DIVIDE
                                          MOV 72H,R1
                                          MOV 42H,R1
                                          MOV 73H,R2
                                          MOV 43H,R2
                                           MOV R0,SECOND                ;秒分离,送显示缓存
                                          LCALL DIVIDE
                                          MOV 70H,R1
                                          MOV 40H,R1
                                          MOV 71H,R2
                                          MOV 41H,R2
                                          LCALL DISPLAY
                                          LCALL GENGXIN            ;更新农历程序
                                          JNB P1.1,SETG
                                          JNB F0,SSS
                                          CLR P1.3                 ;闰月,则p1.3清0,指示灯亮
                                          LJMP MAIN1
                                SSS:      SETB P1.3                 ;非闰月,则p1.3置位,指示灯灭
                                          LJMP MAIN1
                                ;*******************************
                                ;*       公历设置程序          *
                                ;*******************************
                                   SETG:  SETB TR1
                                          SETB ET1
                                          CLR 08H
                                          CLR 09H
                                          CLR 0AH
                                          CLR 0BH
                                          CLR 0CH
                                          CLR 0DH
                                          CLR 0EH
                                          CLR 0FH
                                          MOV DS1302_ADDR,#8EH
                                          MOV DS1302_DATA,#00H            ;允许写1302
                                          LCALL WRITE
                                          MOV DS1302_ADDR,#80H
                                          MOV DS1302_DATA,#80H            ;1302停止振荡
                                          LCALL WRITE
                                 GWAIT:   LCALL DISPLAY
                                          JNB P1.1,GWAIT
                                 SETG1:   LCALL DISPLAY
                                          JNB P1.1,SETG2
                                          JNB P1.2,GADDYEAR
                                          AJMP SETG1
                             GADDYEAR:    MOV R7,66H                ;年加1
                                          LCALL ADD1
                                          MOV 66H,A
                                          CJNE A,#51H,GADDYEAR1
                                          MOV 66H,#01H
                             GADDYEAR1:   MOV DS1302_ADDR,#8CH        ;年值送1302
                                          MOV DS1302_DATA,66H
                                          LCALL WRITE
                                          MOV R0,66H
                                          LCALL DIVIDE             ;年分离送显示缓冲
                                          MOV 4BH,R1
                                          MOV 7BH,R1
                                          MOV 4CH,R2
                                          MOV 7CH,R2
                                WAITT1:   LCALL DISPLAY
                                          JNB P1.2,WAITT1
                                          AJMP SETG1
                                SETG2:    SETB 0AH                    ;调月时闪标志
                               GWAIT2:    LCALL DISPLAY
                                          JNB P1.1,GWAIT2
                                SETG3:    LCALL DISPLAY
                                          JNB P1.1,SETG4
                                          JNB P1.2,GADDMONTH
                                          AJMP SETG3
                             GADDMONTH:   MOV R7,65H                ;月加1
                                          LCALL ADD1
                                          MOV 65H,A
                                          CJNE A,#13H,GADDMONTH1
                                          MOV 65H,#01H
                             GADDMONTH1:  MOV DS1302_ADDR,#88H        ;月值送1302
                                          MOV DS1302_DATA,65H
                                          LCALL WRITE
                                          MOV R0,65H
                                          LCALL DIVIDE             ;月分离送显示缓冲
                                          MOV 79H,R1
                                          MOV 49H,R1
                                          MOV 7AH,R2
                                          MOV 4AH,R2
                                WAITT2:   LCALL DISPLAY
                                          JNB P1.2,WAITT2
                                          AJMP SETG3
                                SETG4:    SETB 0BH                    ;调日时闪标志
                               GWAIT4:    LCALL DISPLAY
                                          JNB P1.1,GWAIT4
                                SETG5:    LCALL DISPLAY
                                          JNB P1.1,SETG6
                                          JNB P1.2,GADDDAY
                                          AJMP SETG5
                              GADDDAY:    MOV R7,63H                ;日加1
                                          LCALL ADD1
                                          MOV 63H,A
                                          CJNE A,#32H,GADDDAY1
                                          MOV 63H,#01H
                             GADDDAY1:    MOV DS1302_ADDR,#86H        ;日值送1302
                                          MOV DS1302_DATA,63H
                                          LCALL WRITE
                                          MOV R0,63H
                                          LCALL DIVIDE             ;日分离送显示缓冲
                                          MOV 76H,R1
                                          MOV 46H,R1
                                          MOV 77H,R2
                                          MOV 47H,R2
                                WAITT3:   LCALL DISPLAY
                                          JNB P1.2,WAITT3
                                          AJMP SETG5
                                SETG6:    SETB 0CH                    ;调星期时闪标志
                               GWAIT6:    LCALL DISPLAY
                                          JNB P1.1,GWAIT6
                                SETG7:    LCALL DISPLAY
                                          JNB P1.1,SETG8
                                          JNB P1.2,GADDWEEK
                                          AJMP SETG7
                             GADDWEEK:    MOV R7,64H                ;星期加1
                                          LCALL ADD1
                                          MOV 64H,A
                                          CJNE A,#08H,GADDWEEK1
                                          MOV 64H,#01H
                             GADDWEEK1:   MOV DS1302_ADDR,#8AH        ;星期值送1302
                                          MOV DS1302_DATA,64H
                                          LCALL WRITE
                                          MOV R0,64H
                                          LCALL DIVIDE             ;星期分离送显示缓冲
                                          MOV 48H,R1
                                          MOV 78H,R1
                                WAITT4:   LCALL DISPLAY
                                          JNB P1.2,WAITT4
                                          AJMP SETG7
                                SETG8:    SETB 0DH                    ;调小时时闪标志
                               GWAIT8:    LCALL DISPLAY
                                          JNB P1.1,GWAIT8
                                SETG9:    LCALL DISPLAY
                                          JNB P1.1,SETG10
                                          JNB P1.2,GADDHOUR
                                          AJMP SETG9
                             GADDHOUR:    MOV R7,62H                ;小时加1
                                          LCALL ADD1
                                          MOV 62H,A
                                          CJNE A,#24H,GADDHOUR1
                                          MOV 62H,#00H
                             GADDHOUR1:   MOV DS1302_ADDR,#84H        ;小时值送1302
                                          MOV DS1302_DATA,62H
                                          LCALL WRITE
                                          MOV R0,62H
                                          LCALL DIVIDE             ;小时分离送显示缓冲
                                          MOV 74H,R1
                                          MOV 44H,R1
                                          MOV 75H,R2
                                          MOV 45H,R2
                                WAITT5:   LCALL DISPLAY
                                          JNB P1.2,WAITT5
                                          AJMP SETG9
                                SETG10:   SETB 0EH                    ;调分时闪标志
                               GWAIT10:   LCALL DISPLAY
                                          JNB P1.1,GWAIT10
                                SETG11:   LCALL DISPLAY
                                          JNB P1.1,SETGOUT
                                          JNB P1.2,GADDMINTUE
                                          AJMP SETG11
                           GADDMINTUE:    MOV R7,61H                ;分加1
                                          LCALL ADD1
                                          MOV 61H,A
                                          CJNE A,#60H,GADDMINTUE1
                                          MOV 61H,#00H
                             GADDMINTUE1: MOV DS1302_ADDR,#82H        ;分值送1302
                                          MOV DS1302_DATA,61H
                                          LCALL WRITE
                                          MOV R0,61H
                                          LCALL DIVIDE             ;分分离送显示缓冲
                                          MOV 72H,R1
                                          MOV 42H,R1
                                          MOV 73H,R2
                                          MOV 43H,R2
                                WAITT6:   LCALL DISPLAY
                                          JNB P1.2,WAITT6
                                          AJMP SETG11
                                SETGOUT:  LCALL DISPLAY
                                          JNB P1.1,SETGOUT
                                          LCALL GENGXIN
                                          MOV DS1302_ADDR,#80H
                                          MOV DS1302_DATA,#00H                 ;1302晶振开始振荡
                                          LCALL WRITE
                                          MOV DS1302_ADDR,#8EH
                                          MOV DS1302_DATA,#80H                ;禁止写入1302
                                          LCALL WRITE
                                          CLR 08H
                                          CLR 09H
                                          CLR 0AH
                                          CLR 0BH
                                          CLR 0CH
                                          CLR 0DH
                                          CLR 0EH
                                          CLR 0FH
                                          CLR ET1
                                          CLR TR1                      ;关闪中断
                                          LJMP MAIN1
                                ;***********************************
                                ;*          闪动调时程序           *
                                ;***********************************
                                   INTT1: PUSH ACC
                                          PUSH PSW
                                 GFLASH:  CPL 0FH
                                          JB 0FH,GFLASH1
                                          MOV 7CH,4CH                 ;全部显示
                                          MOV 7BH,4BH
                                          MOV 7AH,4AH
                                          MOV 79H,49H
                                          MOV 78H,48H
                                          MOV 77H,47H
                                          MOV 76H,46H
                                          MOV 75H,45H
                                          MOV 74H,44H
                                          MOV 73H,43H
                                          MOV 72H,42H
                                          MOV 71H,41H
                                          MOV 70H,40H
                             GFLASHOUT:   POP PSW
                                          POP ACC
                                          RETI
                                GFLASH1:  JB 0AH,GFLASH2                     ;调年闪
                                          MOV 7CH,#0AH
                                          MOV 7BH,#0AH
                                          AJMP GFLASHOUT
                                GFLASH2:  JB 0BH,GFLASH3                     ;调月闪
                                          MOV 7AH,#0AH
                                          MOV 79H,#0AH
                                          AJMP GFLASHOUT
                                GFLASH3:  JB 0CH,GFLASH4                     ;调日闪
                                          MOV 77H,#0AH
                                          MOV 76H,#0AH
                                          AJMP GFLASHOUT
                                GFLASH4:  JB 0DH,GFLASH5                     ;调星期闪
                                          MOV 78H,#0AH
                                          AJMP GFLASHOUT
                                GFLASH5:  JB 0EH,GFLASH6                     ;调小时闪
                                          MOV 75H,#0AH
                                          MOV 74H,#0AH
                                          AJMP GFLASHOUT
                                GFLASH6:  MOV 73H,#0AH                       ;调分闪
                                          MOV 72H,#0AH
                                          AJMP GFLASHOUT
                            ;*********************************
                            ;*           加1程序             *
                            ;*********************************
                                   ADD1:  MOV A,R7
                                          ADD A,#01H
                                          DA A
                                          RET
                            ;*********************************
                            ;*           分离程序            *
                            ;*********************************
                                DIVIDE:   MOV A,R0
                                          ANL A,#0FH
                                          MOV R1,A
                                          MOV A,R0
                                          SWAP A
                                          ANL A,#0FH
                                          MOV R2,A
                                          RET
                             ;*********************************
                             ;*         写1302程序            *
                             ;*********************************
                                  WRITE:  CLR SCLK
                                          NOP
                                          SETB RST
                                          NOP
                                          MOV A,DS1302_ADDR
                                          MOV R4,#8
                                  WRITE1: RRC A                       ;送地址给1302
                                          NOP
                                          NOP
                                          CLR SCLK
                                          NOP
                                          NOP
                                          NOP
                                          MOV IO,C
                                          NOP
                                          NOP
                                          NOP
                                          SETB SCLK
                                          NOP
                                          NOP
                                          DJNZ R4,WRITE1
                                          CLR SCLK
                                          NOP
                                          MOV A,DS1302_DATA
                                          MOV R4,#8
                                  WRITE2: RRC A
                                          NOP                        ;送数据给1302
                                          CLR SCLK
                                          NOP
                                          NOP
                                          MOV IO,C
                                          NOP
                                          NOP
                                          NOP
                                          SETB SCLK
                                          NOP
                                          NOP
                                          DJNZ R4,WRITE2
                                          CLR RST
                                          RET
                              ;*******************************
                              ;*         读1302程序          *
                              ;*******************************
                                   READ:  CLR SCLK
                                          NOP
                                          NOP
                                          SETB RST
                                          NOP
                                          MOV A,DS1302_ADDR
                                          MOV R4,#8
                                  READ1:  RRC A
                                          NOP
                                          MOV IO,C
                                          NOP
                                          NOP
                                          NOP
                                          SETB SCLK
                                          NOP
                                          NOP
                                          NOP
                                          CLR SCLK
                                          NOP
                                          NOP
                                          DJNZ R4,READ1
                                          MOV R4,#8
                                  READ2:  CLR SCLK
                                          NOP
                                          NOP
                                          NOP
                                          MOV C,IO
                                          NOP
                                          NOP
                                          NOP
                                          NOP
                                          NOP
                                          RRC A
                                          NOP
                                          NOP
                                          NOP
                                          NOP
                                          SETB SCLK
                                          NOP
                                          DJNZ R4,READ2
                                          MOV DS1302_DATA,A
                                          CLR RST
                                          RET
                              ;*********************************
                              ;*    BCD码转换为十进制程序      *
                              ;*********************************
                                 BCD_10:  MOV A,R0
                                          ANL A,#0FH
                                          MOV R1,A                   ;高位*10,加低位
                                          MOV A,R0
                                          SWAP A
                                          ANL A,#0FH
                                          MOV B,#10
                                          MUL AB
                                          ADD A,R1
                                          MOV R0,A
                                          RET
                              ;********************************
                              ;*       查一年数据程序         *
                              ;********************************
                              CHECKMONTH: LCALL BCD_10
                                          MOV A,R0
                                          MOV B,#04
                                          MUL AB
                                          MOV R1,A
                                          MOV DPTR,#TAB
                                          MOVC A,@A+DPTR
                                          MOV R7,A                      ;第1字节送R7
                                          INC R1
                                          MOV A,R1
                                          MOVC A,@A+DPTR
                                          MOV R6,A                       ;第2字节送R6
                                          INC R1
                                          MOV A,R1
                                          MOVC A,@A+DPTR
                                          MOV R5,A                        ;第3字节送R5
                                          INC R1
                                          MOV A,R1
                                          MOVC A,@A+DPTR
                                          MOV R4,A                       ;第4字节送R4
                                          RET
                               ;******************************
                               ;*        自动更新农历        *
                               ;******************************
                                GENGXIN:  MOV R2,#00H
                                          MOV R3,#00H
                                          MOV A,MONTH
                                          CJNE A,#01H,GM2
                                          MOV R0,DAY                    ;当前月为1月
                                          LCALL BCD_10                  ;当前日转换为十进制,送R2
                                          MOV A,R0
                                          MOV R2,A
                                          AJMP TIAOZHENG1
                                    GM2:  CJNE A,#02H,GM3
                                          MOV R0,DAY                    ;当前月为2月
                                          LCALL BCD_10                  ;当前日转换为十进制
                                          MOV A,R0                      ;再加31送R2
                                          ADD A,#31
                                          MOV R2,A
                                          AJMP TIAOZHENG1
                                    GM3:  CJNE A,#03H,GM4
                                          MOV R0,DAY                    ;当前月为3月
                                          LCALL BCD_10                  ;当前日转换为十进制
                                          MOV A,R0                      ;再加59送R2
                                          ADD A,#59
                                          MOV R2,A
                                          AJMP TIAOZHENG1
                                    GM4:  CJNE A,#04H,GM5
                                          MOV R0,DAY                    ;当前月为4月
                                          LCALL BCD_10                  ;当前日转换为十进制
                                          MOV A,R0                      ;再加90送R2
                                          ADD A,#90
                                          MOV R2,A
                                          AJMP TIAOZHENG1
                                    GM5:  CJNE A,#05H,GM6
                                          MOV R0,DAY                    ;当前月为5月
                                          LCALL BCD_10                  ;当前日转换为十进制
                                          MOV A,R0                      ;再加120送R2
                                          ADD A,#120
                                          MOV R2,A
                                          AJMP TIAOZHENG1
                                    GM6:  CJNE A,#06H,GM7
                                          MOV R0,DAY                    ;当前月为6月
                                          LCALL BCD_10                  ;当前日转换为十进制
                                          MOV A,R0                      ;再加151送R2
                                          ADD A,#151
                                          MOV R2,A
                                          AJMP TIAOZHENG1
                                    GM7:  CJNE A,#07H,GM8
                                          MOV R0,DAY                    ;当前月为7月
                                          LCALL BCD_10                  ;当前日转换为十进制
                                          MOV A,R0                      ;再加181送R2
                                          ADD A,#181
                                          MOV R2,A
                                          AJMP TIAOZHENG1
                                    GM8:  CJNE A,#08H,GM9
                                          MOV R0,DAY                    ;当前月为8月
                                          LCALL BCD_10                  ;当前日转换为十进制
                                          MOV A,R0                      ;再加212送R2
                                          ADD A,#212
                                          MOV R2,A
                                          AJMP TIAOZHENG1
                                    GM9:  CJNE A,#09H,GM10
                                          MOV R0,DAY                    ;当前月为9月
                                          LCALL BCD_10                  ;当前日转换为十进制
                                          MOV A,R0                      ;再加243
                                          CLR C
                                          ADD A,#243
                                          JC GGG
                                          MOV R2,A                      ;A没溢出,送R2
                                          AJMP TIAOZHENG1
                                     GGG: MOV R3,#0FFH                   ;R3中送#0FFH
                                          INC A                          ;A溢出,A加1送R2
                                          MOV R2,A
                                          AJMP TIAOZHENG1
                                   GM10:  CJNE A,#10H,GM11
                                          MOV R0,DAY                    ;当前月为10月
                                          LCALL BCD_10                  ;当前日转换为十进制
                                          MOV A,R0                      ;再加18送R2
                                          ADD A,#18
                                          MOV R2,A                      ;R3中送#0FFH
                                          MOV R3,#0FFH
                                          AJMP TIAOZHENG1
                                   GM11:  CJNE A,#11H,GM12
                                          MOV R0,DAY                    ;当前月为11月
                                          LCALL BCD_10                  ;当前日转换为十进制
                                          MOV A,R0                      ;再加49送R2
                                          ADD A,#49
                                          MOV R2,A                       ;R3中送#0FFH
                                          MOV R3,#0FFH
                                          AJMP TIAOZHENG1
                                   GM12:  MOV R0,DAY                    ;当前月为12月
                                          LCALL BCD_10                  ;当前日转换为十进制
                                          MOV A,R0                      ;再加79送R2
                                          ADD A,#79
                                          MOV R2,A
                                          MOV R3,#0FFH                  ;R3中送#0FFH
                                          AJMP TIAOZHENG1
                             TIAOZHENG1:  MOV A,YEAR
                                          MOV B,#04
                                          DIV AB
                                          MOV A,B
                                          JNZ GGG1
                                          MOV A,65H                  ;当前月是1
                                          CJNE A,#01H,AAAA
                                          AJMP GGG1                  ;当前月是2
                                   AAAA:  CJNE A,#02H,BBBB
                                          AJMP GGG1
                                   BBBB:  CJNE R2,#0FFH,GGG2
                                          MOV R3,#0FFH               ;当前月不是1和2
                                          MOV R2,#01H                ;R1和R2总和加1
                                          AJMP GGG1
                                    GGG2: INC R2
                                    GGG1: MOV R0,YEAR                ;查意一年数据
                                          LCALL CHECKMONTH
                                          MOV A,R2
                                          CLR C
                                          SUBB A,R7
                                          MOV P1.6,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 P1.6,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 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
                                          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
                                          LJMP RY4                  ;R2减润4月天数
                                    RM44: MOV A,R2                     ;不够减,判断R3为0否
                                          ADD A,R3                  ;不为0,R3加到R2中
                                          MOV R2,A                ;再让闰4月减
                                          MOV R3,#00H                  ;还不够转RY4
                                          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
                                          AJMP M5
                                     MM5: LCALL CHECKRE            ;查5月,如果不为闰月
                                          CJNE A,#05H,M6              ;转6月
                                     RM5: MOV A,R4
                                          ANL A,#0FH                  ;R2减闰5月天数
                                          JNZ RM51
                                          MOV A,R2
                                          CLR C
                                          SUBB A,#30
                                          MOV R1,A
                                          AJMP 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
                                          LJMP RY5                   ;R2减润5月天数
                                    RM54: MOV A,R2                     ;不够减,判断R3为0否
                                          ADD A,R3                  ;不为0,R3加到R2中
                                          MOV R2,A                ;再让闰5月减
                                          MOV R3,#00H                  ;还不够转RY5
                                          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
                                          AJMP 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
                                          AJMP 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
                                          AJMP 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
                                          LJMP RY6                   ;R2减润6月天数
                                    RM64: MOV A,R2                     ;不够减,判断R3为0否
                                          ADD A,R3                  ;不为0,R3加到R2中
                                          MOV R2,A                ;再让闰6月减
                                          MOV R3,#00H                  ;还不够转RY6
                                          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
                                          AJMP MM7
                                     M72: CJNE R3,#00H,M73            ;R2减7月天数
                                          LJMP Y7                ;不够减,判断R3为0否
                                     M73: MOV A,R2                 ;不为0,R3加到R2中
                                          ADD A,R3                 ;再让7月减
                                          MOV R2,A                  ;还不够,则转Y7
                                          MOV R3,#00H
                                          AJMP 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
                                          AJMP 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
                                          LJMP RY7                   ;R2减润5月天数
                                    RM74: MOV A,R2                     ;不够减,判断R3为0否
                                          ADD A,R3                  ;不为0,R3加到R2中
                                          MOV R2,A                ;再让闰7月减
                                          MOV R3,#00H                  ;还不够转RY7
                                          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
                                          AJMP MM9                ;转9月
                                     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
                                          AJMP 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                  ;还不够,则转Y7
                                          MOV R3,#00H
                                          AJMP M9
                                     MM9: LCALL CHECKRE            ;查7月,如果不为闰月
                                          CJNE A,#09H,M10              ;转10月
                                     RM9: MOV A,R4
                                          ANL A,#0FH                  ;R2减闰9月天数
                                          JNZ RM91
                                          MOV A,R2
                                          CLR C
                                          SUBB A,#30
                                          MOV R1,A
                                          AJMP 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
                                          LJMP RY9                  ;R2减润9月天数
                                    RM94: MOV A,R2                     ;不够减,判断R3为0否
                                          ADD A,R3                  ;不为0,R3加到R2中
                                          MOV R2,A                ;再让闰9月减
                                          MOV R3,#00H                  ;还不够转RY9
                                          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
                                          LJMP M11                  ;转11月
                                    M102: CJNE R3,#00H,M93            ;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
                                          LJMP M12
                                    M112: CJNE R3,#00H,M113            ;R2减11月天数
                                          LJMP Y11                ;不够减,判断R3为0否
                                    M113: MOV A,R2                 ;不为0,R3加到R2中
                                          ADD A,R3                 ;再让10月减
                                          MOV R2,A                  ;还不够,则转Y10
                                          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
                                          MOV A,R2
                                          CLR C
                                          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                 ;再让10月减
                                          MOV R2,A                  ;还不够,则转Y10
                                          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                  ;R2为0,则为前一月最后一天
                                          MOV A,R6
                                          JB ACC.4,RY32
                                          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
                                          ANL A,#0FH                    ;R2中为0,则为前一个月的最后一天
                                          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
                                          MOV R0,A                  ;R2中为日的值
                                          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
                                          ANL A,#0FH                    ;R2中为0,则为前一个月的最后一天
                                          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,Y44
                                          MOV 56H,#30H
                                     Y54: MOV 57H,#04H
                                          CLR F0
                                          LJMP S_PLAY
                                     Y51: MOV A,R2
                                          MOV R0,A                  ;R2中为日的值
                                          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
                                          ANL A,#0FH                    ;R2中为0,则为前一个月的最后一天
                                          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
                                          MOV R0,A                  ;R2中为日的值
                                          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
                                          ANL A,#0FH                    ;R2中为0,则为前一个月的最后一天
                                          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
                                          MOV R0,A                  ;R2中为日的值
                                          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,R6
                                          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
                                          ANL A,#0FH                    ;R2中为0,则为前一个月的最后一天
                                          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,R6
                                          JB ACC.6,Y84
                                          MOV 56H,#30H
                                     Y84: MOV 57H,#07H
                                          CLR F0
                                          LJMP S_PLAY
                                     Y81: MOV A,R2
                                          MOV R0,A                  ;R2中为日的值
                                          LCALL D_BCD
                                          MOV 56H,A
                                          MOV 57H,#08H
                                          CLR F0
                                          LJMP S_PLAY
                                      Y9: CJNE R2,#00H,Y91
                                          MOV 56H,#29H                  
                                          MOV A,R5
                                          JB ACC.5,Y94
                                          MOV 56H,#30H
                                     Y94: MOV 57H,#08H
                                          CLR F0
                                          LJMP S_PLAY
                                     Y91: MOV A,R2
                                          MOV R0,A                  ;R2中为日的值
                                          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
                                          ANL A,#0FH                    ;R2中为0,则为前一个月的最后一天
                                          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
                                          MOV R0,A                  ;R2中为日的值
                                          LCALL D_BCD
                                          MOV 56H,A
                                          MOV 57H,#010H
                                          CLR F0
                                          LJMP S_PLAY
                                    Y11:  CJNE R2,#00H,Y111
                                          MOV 56H,#29H                  
                                          MOV A,R5
                                          JB ACC.2,Y112
                                          MOV 56H,#30H
                                    Y112: MOV 57H,#10H
                                          CLR F0
                                          LJMP S_PLAY
                                    Y111: MOV A,R2
                                          MOV R0,A                  ;R2中为日的值
                                          LCALL D_BCD
                                          MOV 56H,A
                                          MOV 57H,#11H
                                          CLR F0
                                          LJMP S_PLAY
                                     Y12: CJNE R2,#00H,Y121
                                          MOV 56H,#29H                  
                                          MOV A,R5
                                          JB ACC.1,Y122
                                          MOV 56H,#30H
                                    Y122: MOV 57H,#11H
                                          CLR F0
                                          LJMP S_PLAY
                                    Y121: MOV A,R2
                                          MOV R0,A                  ;R2中为日的值
                                          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
                             ;********************************
                             ;*    十进制转换为BCD码程序     *
                             ;********************************
                                   D_BCD: MOV A,R0
                                          MOV B,#10
                                          DIV AB
                                          SWAP A
                                          ORL A,B
                                          RET
                             ;********************************
                             ;*          显示程序            *
                             ;********************************
                                 DISPLAY:
					  MOV 7EH,#02H
                                          MOV 7DH,#00H


                                          MOV R0,#76H
                                          MOV R1,#70H

                                          MOV R2,79H
                                          MOV R3,#79H
                                          MOV R5,#0FEH

                                   PLAY1: 
					  MOV A,#0FFH
                                          MOV P2,A
                                          MOV A,@R0
                                          MOV DPTR,#TAB1
                                          MOVC A,@A+DPTR
                                          MOV SBUF,A             ;送第1字节
                                          JNB TI,$
                                          CLR TI
                                          MOV A,@R1
                                          MOV DPTR,#TAB1
                                          MOVC A,@A+DPTR
                                          MOV SBUF,A             ;送第2字节
                                          JNB TI,$
                                          CLR TI
                                          MOV A,@R1
                                          MOV DPTR,#TAB1
                                          MOVC A,@A+DPTR
                                          MOV SBUF,A             ;送第3字节
                                          JNB TI,$
                                          CLR TI
                                          INC R0
                                          INC R1
                                          INC R3
                                          MOV A,R3
                                          SETB PSW.4               ;选2组寄存器
                                          MOV R0,A
                                          MOV A,@R0
                                          CLR PSW.4
                                          MOV R2,A
                                          MOV A,R0
                                          CJNE A,#78H,PLAY2
                                          MOV R0,#50H
                                   PLAY2: 
					  CJNE A,#54H,PLAY3
                                          MOV R0,#78H
                                   PLAY3: 
					  MOV A,R5
                                          MOV P2,A
                                          LCALL DL1MS
                                          MOV A,R5
                                          JNB ACC.6,PLAYOUT
                                          RL A
                                          MOV R5,A
                                          LJMP PLAY1
                                PLAYOUT:  
					  SETB P2.6
                                          RET
                                   DL1MS:
					  MOV R6,#14H
                                     DL1: 
					  MOV R7,#19H
                                     DL2: 
					  DJNZ R7,DL2
                                          DJNZ R6,DL1
                                          RET
                                ;*****************************
                                ;*        数据表             *
                                ;*****************************
                                    TAB1: DB 03H,9FH,25H,0DH,99H
                                          DB 49H,41H,1FH,01H,09H,0FFH
                                     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,04H,71H,48,66H,42H,00H,37,33H,32H,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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程