万年历,源码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.2IO    EQU  P3.3RST   EQU  P3.4YEAR  DATA 66HMONTH DATA 65HWEEK  DATA 64HDAY   DATA 63HHOUR  DATA 62HMINTUE DATA 61HSECOND  DATA 60HDS1302_ADDR DATA 32HDS1302_DATA DATA 31HORG  0000HAJMP STARTORG  0003HRETIORG  000BHRETIORG  0013HRETIORG  001BHLJMP INTT1ORG  0023HRETIORG  002BHRETI;************************************;*            主程序                *;************************************START:   SETB EAMOV SCON,#00H    ;串行输出,方式0MOV TMOD,#10H    ;计数器1,方式1MOV TL1,#00HMOV TH1,#00HMOV DS1302_ADDR,#8EHMOV DS1302_DATA,#00H       ;允许写1302LCALL WRITEMOV DS1302_ADDR,#90HMOV DS1302_DATA,#0A6H       ;1302充电,充电电流1.1mALCALL WRITEMAIN1:      MOV DS1302_ADDR,#8DH         ;READ OUT YEARLCALL READMOV YEAR,DS1302_DATAMOV DS1302_ADDR,#8BH        ;READ OUT WEEKLCALL READMOV WEEK,DS1302_DATAMOV DS1302_ADDR,#89H          ;READ OUT MONTHLCALL READMOV MONTH,DS1302_DATAMOV DS1302_ADDR,#87H          ;READ OUT DAYLCALL READMOV DAY,DS1302_DATAMOV DS1302_ADDR,#85H       ;READ OUT HOURLCALL READMOV HOUR,DS1302_DATAMOV DS1302_ADDR,#83H       ;READ OUT MINTUELCALL READMOV MINTUE,DS1302_DATAMOV DS1302_ADDR,#81H       ;READ OUT SECONDLCALL READMOV SECOND,DS1302_DATAMOV R0,YEAR                ;年分离,送显示缓存LCALL DIVIDEMOV 7BH,R1MOV 4BH,R1MOV 7CH,R2MOV 4CH,R2MOV 78H,WEEKMOV 48H,WEEKMOV R0,MONTH                ;月分离,送显示缓存LCALL DIVIDEMOV 79H,R1MOV 49H,R1MOV 7AH,R2MOV 4AH,R2MOV R0,DAY                ;日分离,送显示缓存LCALL DIVIDEMOV 76H,R1MOV 46H,R1MOV 77H,R2MOV 47H,R2MOV R0,HOUR                ;小时分离,送显示缓存LCALL DIVIDEMOV 74H,R1MOV 44H,R1MOV 75H,R2MOV 45H,R2MOV R0,MINTUE                ;分分离,送显示缓存LCALL DIVIDEMOV 72H,R1MOV 42H,R1MOV 73H,R2MOV 43H,R2MOV R0,SECOND                ;秒分离,送显示缓存LCALL DIVIDEMOV 70H,R1MOV 40H,R1MOV 71H,R2MOV 41H,R2LCALL DISPLAYLCALL GENGXIN            ;更新农历程序JNB P1.1,SETGJNB F0,SSSCLR P1.3                 ;闰月,则p1.3清0,指示灯亮LJMP MAIN1SSS:      SETB P1.3                 ;非闰月,则p1.3置位,指示灯灭LJMP MAIN1;*******************************;*       公历设置程序          *;*******************************SETG:  SETB TR1SETB ET1CLR 08HCLR 09HCLR 0AHCLR 0BHCLR 0CHCLR 0DHCLR 0EHCLR 0FHMOV DS1302_ADDR,#8EHMOV DS1302_DATA,#00H            ;允许写1302LCALL WRITEMOV DS1302_ADDR,#80HMOV DS1302_DATA,#80H            ;1302停止振荡LCALL WRITEGWAIT:   LCALL DISPLAYJNB P1.1,GWAITSETG1:   LCALL DISPLAYJNB P1.1,SETG2JNB P1.2,GADDYEARAJMP SETG1GADDYEAR:    MOV R7,66H                ;年加1LCALL ADD1MOV 66H,ACJNE A,#51H,GADDYEAR1MOV 66H,#01HGADDYEAR1:   MOV DS1302_ADDR,#8CH        ;年值送1302MOV DS1302_DATA,66HLCALL WRITEMOV R0,66HLCALL DIVIDE             ;年分离送显示缓冲MOV 4BH,R1MOV 7BH,R1MOV 4CH,R2MOV 7CH,R2WAITT1:   LCALL DISPLAYJNB P1.2,WAITT1AJMP SETG1SETG2:    SETB 0AH                    ;调月时闪标志GWAIT2:    LCALL DISPLAYJNB P1.1,GWAIT2SETG3:    LCALL DISPLAYJNB P1.1,SETG4JNB P1.2,GADDMONTHAJMP SETG3GADDMONTH:   MOV R7,65H                ;月加1LCALL ADD1MOV 65H,ACJNE A,#13H,GADDMONTH1MOV 65H,#01HGADDMONTH1:  MOV DS1302_ADDR,#88H        ;月值送1302MOV DS1302_DATA,65HLCALL WRITEMOV R0,65HLCALL DIVIDE             ;月分离送显示缓冲MOV 79H,R1MOV 49H,R1MOV 7AH,R2MOV 4AH,R2WAITT2:   LCALL DISPLAYJNB P1.2,WAITT2AJMP SETG3SETG4:    SETB 0BH                    ;调日时闪标志GWAIT4:    LCALL DISPLAYJNB P1.1,GWAIT4SETG5:    LCALL DISPLAYJNB P1.1,SETG6JNB P1.2,GADDDAYAJMP SETG5GADDDAY:    MOV R7,63H                ;日加1LCALL ADD1MOV 63H,ACJNE A,#32H,GADDDAY1MOV 63H,#01HGADDDAY1:    MOV DS1302_ADDR,#86H        ;日值送1302MOV DS1302_DATA,63HLCALL WRITEMOV R0,63HLCALL DIVIDE             ;日分离送显示缓冲MOV 76H,R1MOV 46H,R1MOV 77H,R2MOV 47H,R2WAITT3:   LCALL DISPLAYJNB P1.2,WAITT3AJMP SETG5SETG6:    SETB 0CH                    ;调星期时闪标志GWAIT6:    LCALL DISPLAYJNB P1.1,GWAIT6SETG7:    LCALL DISPLAYJNB P1.1,SETG8JNB P1.2,GADDWEEKAJMP SETG7GADDWEEK:    MOV R7,64H                ;星期加1LCALL ADD1MOV 64H,ACJNE A,#08H,GADDWEEK1MOV 64H,#01HGADDWEEK1:   MOV DS1302_ADDR,#8AH        ;星期值送1302MOV DS1302_DATA,64HLCALL WRITEMOV R0,64HLCALL DIVIDE             ;星期分离送显示缓冲MOV 48H,R1MOV 78H,R1WAITT4:   LCALL DISPLAYJNB P1.2,WAITT4AJMP SETG7SETG8:    SETB 0DH                    ;调小时时闪标志GWAIT8:    LCALL DISPLAYJNB P1.1,GWAIT8SETG9:    LCALL DISPLAYJNB P1.1,SETG10JNB P1.2,GADDHOURAJMP SETG9GADDHOUR:    MOV R7,62H                ;小时加1LCALL ADD1MOV 62H,ACJNE A,#24H,GADDHOUR1MOV 62H,#00HGADDHOUR1:   MOV DS1302_ADDR,#84H        ;小时值送1302MOV DS1302_DATA,62HLCALL WRITEMOV R0,62HLCALL DIVIDE             ;小时分离送显示缓冲MOV 74H,R1MOV 44H,R1MOV 75H,R2MOV 45H,R2WAITT5:   LCALL DISPLAYJNB P1.2,WAITT5AJMP SETG9SETG10:   SETB 0EH                    ;调分时闪标志GWAIT10:   LCALL DISPLAYJNB P1.1,GWAIT10SETG11:   LCALL DISPLAYJNB P1.1,SETGOUTJNB P1.2,GADDMINTUEAJMP SETG11GADDMINTUE:    MOV R7,61H                ;分加1LCALL ADD1MOV 61H,ACJNE A,#60H,GADDMINTUE1MOV 61H,#00HGADDMINTUE1: MOV DS1302_ADDR,#82H        ;分值送1302MOV DS1302_DATA,61HLCALL WRITEMOV R0,61HLCALL DIVIDE             ;分分离送显示缓冲MOV 72H,R1MOV 42H,R1MOV 73H,R2MOV 43H,R2WAITT6:   LCALL DISPLAYJNB P1.2,WAITT6AJMP SETG11SETGOUT:  LCALL DISPLAYJNB P1.1,SETGOUTLCALL GENGXINMOV DS1302_ADDR,#80HMOV DS1302_DATA,#00H                 ;1302晶振开始振荡LCALL WRITEMOV DS1302_ADDR,#8EHMOV DS1302_DATA,#80H                ;禁止写入1302LCALL WRITECLR 08HCLR 09HCLR 0AHCLR 0BHCLR 0CHCLR 0DHCLR 0EHCLR 0FHCLR ET1CLR TR1                      ;关闪中断LJMP MAIN1;***********************************;*          闪动调时程序           *;***********************************INTT1: PUSH ACCPUSH PSWGFLASH:  CPL 0FHJB 0FH,GFLASH1MOV 7CH,4CH                 ;全部显示MOV 7BH,4BHMOV 7AH,4AHMOV 79H,49HMOV 78H,48HMOV 77H,47HMOV 76H,46HMOV 75H,45HMOV 74H,44HMOV 73H,43HMOV 72H,42HMOV 71H,41HMOV 70H,40HGFLASHOUT:   POP PSWPOP ACCRETIGFLASH1:  JB 0AH,GFLASH2                     ;调年闪MOV 7CH,#0AHMOV 7BH,#0AHAJMP GFLASHOUTGFLASH2:  JB 0BH,GFLASH3                     ;调月闪MOV 7AH,#0AHMOV 79H,#0AHAJMP GFLASHOUTGFLASH3:  JB 0CH,GFLASH4                     ;调日闪MOV 77H,#0AHMOV 76H,#0AHAJMP GFLASHOUTGFLASH4:  JB 0DH,GFLASH5                     ;调星期闪MOV 78H,#0AHAJMP GFLASHOUTGFLASH5:  JB 0EH,GFLASH6                     ;调小时闪MOV 75H,#0AHMOV 74H,#0AHAJMP GFLASHOUTGFLASH6:  MOV 73H,#0AH                       ;调分闪MOV 72H,#0AHAJMP GFLASHOUT;*********************************;*           加1程序             *;*********************************ADD1:  MOV A,R7ADD A,#01HDA ARET;*********************************;*           分离程序            *;*********************************DIVIDE:   MOV A,R0ANL A,#0FHMOV R1,AMOV A,R0SWAP AANL A,#0FHMOV R2,ARET;*********************************;*         写1302程序            *;*********************************WRITE:  CLR SCLKNOPSETB RSTNOPMOV A,DS1302_ADDRMOV R4,#8WRITE1: RRC A                       ;送地址给1302NOPNOPCLR SCLKNOPNOPNOPMOV IO,CNOPNOPNOPSETB SCLKNOPNOPDJNZ R4,WRITE1CLR SCLKNOPMOV A,DS1302_DATAMOV R4,#8WRITE2: RRC ANOP                        ;送数据给1302CLR SCLKNOPNOPMOV IO,CNOPNOPNOPSETB SCLKNOPNOPDJNZ R4,WRITE2CLR RSTRET;*******************************;*         读1302程序          *;*******************************READ:  CLR SCLKNOPNOPSETB RSTNOPMOV A,DS1302_ADDRMOV R4,#8READ1:  RRC ANOPMOV IO,CNOPNOPNOPSETB SCLKNOPNOPNOPCLR SCLKNOPNOPDJNZ R4,READ1MOV R4,#8READ2:  CLR SCLKNOPNOPNOPMOV C,IONOPNOPNOPNOPNOPRRC ANOPNOPNOPNOPSETB SCLKNOPDJNZ R4,READ2MOV DS1302_DATA,ACLR RSTRET;*********************************;*    BCD码转换为十进制程序      *;*********************************BCD_10:  MOV A,R0ANL A,#0FHMOV R1,A                   ;高位*10,加低位MOV A,R0SWAP AANL A,#0FHMOV B,#10MUL ABADD A,R1MOV R0,ARET;********************************;*       查一年数据程序         *;********************************CHECKMONTH: LCALL BCD_10MOV A,R0MOV B,#04MUL ABMOV R1,AMOV DPTR,#TABMOVC A,@A+DPTRMOV R7,A                      ;第1字节送R7INC R1MOV A,R1MOVC A,@A+DPTRMOV R6,A                       ;第2字节送R6INC R1MOV A,R1MOVC A,@A+DPTRMOV R5,A                        ;第3字节送R5INC R1MOV A,R1MOVC A,@A+DPTRMOV R4,A                       ;第4字节送R4RET;******************************;*        自动更新农历        *;******************************GENGXIN:  MOV R2,#00HMOV R3,#00HMOV A,MONTHCJNE A,#01H,GM2MOV R0,DAY                    ;当前月为1月LCALL BCD_10                  ;当前日转换为十进制,送R2MOV A,R0MOV R2,AAJMP TIAOZHENG1GM2:  CJNE A,#02H,GM3MOV R0,DAY                    ;当前月为2月LCALL BCD_10                  ;当前日转换为十进制MOV A,R0                      ;再加31送R2ADD A,#31MOV R2,AAJMP TIAOZHENG1GM3:  CJNE A,#03H,GM4MOV R0,DAY                    ;当前月为3月LCALL BCD_10                  ;当前日转换为十进制MOV A,R0                      ;再加59送R2ADD A,#59MOV R2,AAJMP TIAOZHENG1GM4:  CJNE A,#04H,GM5MOV R0,DAY                    ;当前月为4月LCALL BCD_10                  ;当前日转换为十进制MOV A,R0                      ;再加90送R2ADD A,#90MOV R2,AAJMP TIAOZHENG1GM5:  CJNE A,#05H,GM6MOV R0,DAY                    ;当前月为5月LCALL BCD_10                  ;当前日转换为十进制MOV A,R0                      ;再加120送R2ADD A,#120MOV R2,AAJMP TIAOZHENG1GM6:  CJNE A,#06H,GM7MOV R0,DAY                    ;当前月为6月LCALL BCD_10                  ;当前日转换为十进制MOV A,R0                      ;再加151送R2ADD A,#151MOV R2,AAJMP TIAOZHENG1GM7:  CJNE A,#07H,GM8MOV R0,DAY                    ;当前月为7月LCALL BCD_10                  ;当前日转换为十进制MOV A,R0                      ;再加181送R2ADD A,#181MOV R2,AAJMP TIAOZHENG1GM8:  CJNE A,#08H,GM9MOV R0,DAY                    ;当前月为8月LCALL BCD_10                  ;当前日转换为十进制MOV A,R0                      ;再加212送R2ADD A,#212MOV R2,AAJMP TIAOZHENG1GM9:  CJNE A,#09H,GM10MOV R0,DAY                    ;当前月为9月LCALL BCD_10                  ;当前日转换为十进制MOV A,R0                      ;再加243CLR CADD A,#243JC GGGMOV R2,A                      ;A没溢出,送R2AJMP TIAOZHENG1GGG: MOV R3,#0FFH                   ;R3中送#0FFHINC A                          ;A溢出,A加1送R2MOV R2,AAJMP TIAOZHENG1GM10:  CJNE A,#10H,GM11MOV R0,DAY                    ;当前月为10月LCALL BCD_10                  ;当前日转换为十进制MOV A,R0                      ;再加18送R2ADD A,#18MOV R2,A                      ;R3中送#0FFHMOV R3,#0FFHAJMP TIAOZHENG1GM11:  CJNE A,#11H,GM12MOV R0,DAY                    ;当前月为11月LCALL BCD_10                  ;当前日转换为十进制MOV A,R0                      ;再加49送R2ADD A,#49MOV R2,A                       ;R3中送#0FFHMOV R3,#0FFHAJMP TIAOZHENG1GM12:  MOV R0,DAY                    ;当前月为12月LCALL BCD_10                  ;当前日转换为十进制MOV A,R0                      ;再加79送R2ADD A,#79MOV R2,AMOV R3,#0FFH                  ;R3中送#0FFHAJMP TIAOZHENG1TIAOZHENG1:  MOV A,YEARMOV B,#04DIV ABMOV A,BJNZ GGG1MOV A,65H                  ;当前月是1CJNE A,#01H,AAAAAJMP GGG1                  ;当前月是2AAAA:  CJNE A,#02H,BBBBAJMP GGG1BBBB:  CJNE R2,#0FFH,GGG2MOV R3,#0FFH               ;当前月不是1和2MOV R2,#01H                ;R1和R2总和加1AJMP GGG1GGG2: INC R2GGG1: MOV R0,YEAR                ;查意一年数据LCALL CHECKMONTHMOV A,R2CLR CSUBB A,R7MOV P1.6,CCJNE A,#01H,GGG3MOV R2,#01HMOV A,R3CJNE A,#00H,NEW1MOV 57H,#01H                ;R2和R3总和减R7MOV 56H,#01H                ;为0,则为春节LJMP S_PLAYGGG3: CJNE A,#00H,GGG6MOV R2,AAJMP OLDGGG6: JNB P1.6,NEW2MOV A,R7CLR CSUBB A,R2MOV R7,ACJNE R3,#0FFH,GGG5MOV A,R3CLR CSUBB A,R7MOV R2,AMOV R3,#00HAJMP NEWGGG5:  MOV A,R7MOV R2,AAJMP OLDNEW1:  MOV R2,#0FFHMOV R3,#01HAJMP NEWNEW2:  MOV R2,AMOV A,R3CJNE A,#0FFH,GGG4MOV A,R2MOV R3,AMOV R2,#0FFHGGG4: AJMP NEW;***************************;*        OLD              *;***************************;农历为公历的前一年OLD: MOV A,YEARDEC AMOV R0,ALCALL CHECKMONTHMOV A,R2CLR CSUBB A,#29MOV P1.6,CMOV R6,AMOV A,R5JB ACC.0,AAA                   ;12月为小月,转到AAAMOV A,R2CLR CSUBB A,#30MOV P1.6,CMOV R6,AAAA: MOV A,R6CJNE A,#00H,BBBMOV 56H,#29H                    ;为0,则为11月最后一天MOV A,R5                       ;小月为11月29JB ACC.1,CCCMOV 56H,#30H                  ;大月为11月30CCC: MOV 57H,#11HLJMP S_PLAYBBB: JNB P1.6,DDDMOV A,#29                    ;CY位置位,为12月CLR CSUBB A,R2MOV R4,AMOV A,R5JB ACC.0,EEEMOV A,#30CLR CSUBB A,R2MOV R4,AMOV A,R5JB ACC.0,EEEMOV A,#30CLR CSUBB A,R2MOV R4,AEEE: MOV A,R4MOV R0,ALCALL D_BCDMOV 56H,AMOV 57H,#12HLJMP S_PLAYDDD: MOV A,#29              ;CY为0,为11月CLR CSUBB A,R4MOV R1,AMOV A,R5JB ACC.1,FFFMOV A,#30CLR CSUBB A,R4MOV R1,AFFF: MOV A,R1MOV R0,ALCALL D_BCDMOV 56H,AMOV 57H,#11HLJMP S_PLAY;*************************;*         NEW           *;*************************;农历和公历为同一年,此时R2中值为FFH时,R3有值,否则为0NEW: NOPM1: MOV A,R2                 ;R2减1月天数CLR CSUBB A,#29MOV R1,AMOV A,R6JB ACC.6,SM11MOV A,R2CLR CMOV A,#30MOV R1,ASM11: JC SM12MOV A,R1                 ;R2减1月天数 够减MOV R2,A                 ;转2月AJMP M2SM12: CJNE R3,#00H,M13          ;R2减1月天数LJMP Y1                  ;不够减,判断R3为0否M13: MOV A,R2                 ;不为0,R3加到R2中ADD A,R3                ;再让1月减MOV R2,A               ;还不够转Y1MOV R3,#00HAJMP M1M2:  CLR C                 ;R2减1月天数 够减MOV A,R2              ;转3月SUBB A,#29MOV R1,AMOV A,R6JB ACC.5,M21MOV A,R2CLR CSUBB A,#30MOV R1,AM21: JC M22MOV A,R1                ;R2减2月天数 够减MOV R2,AAJMP MM2M22: CJNE R3,#00H,M23            ;R2减2月天数LJMP Y2                  ;不够减,判断R3为0否M23: MOV A,R2                 ;不为0,R3加到R2中ADD A,R3                 ;再让2月减MOV R2,A                  ;还不够转Y2MOV R3,#00HAJMP M2MM2: LCALL CHECKRE            ;查2月,如果不为闰月CJNE A,#02H,M3               ;转3月RM2: MOV A,R4ANL A,#0FH                   ;R2减闰2月天数JNZ RM21MOV A,R2CLR CSUBB A,#30MOV R1,AAJMP RM22RM21: MOV A,R2CLR CSUBB A,#29MOV R1,ARM22: JC RM23MOV A,R1                ;R2减闰2月天数,够减MOV R2,A                ;转3月AJMP M3RM23: CJNE R3,#00H,RM24           ;R2减润2月天数LJMP RY2                    ;不够减,判断R3为0否RM24: MOV A,R2                     ;不为0,R3加到R2中ADD A,R3                    ;再让闰2月减MOV R3,#00H                  ;还不够转RY2AJMP  RM2M3: MOV A,R2                     ;R2减3月天数CLR CSUBB A,#29MOV R1,AMOV A,R6JB ACC.4,M31CLR CMOV A,R2SUBB A,#30MOV R1,AM31: JC M32MOV A,R1                ;R2减3月天数,够减MOV R2,AAJMP MM3M32: CJNE R3,#00H,M33            ;R2减3月天数LJMP Y3                 ;不够减,判断R3为0否M33: MOV A,R2                 ;不为0,R3加到R2中ADD A,R3                 ;再让3月减MOV R2,A                  ;还不够,则转Y3MOV R3,#00HAJMP M3MM3: LCALL CHECKRE            ;查3月,如果不为闰月CJNE A,#03H,M4              ;转4月RM3: MOV A,R4ANL A,#0FH                  ;R2减闰3月天数JNZ RM31MOV A,R2CLR CSUBB A,#30MOV R1,AAJMP RM32RM31: MOV A,R2CLR CSUBB A,#29MOV R1,ARM32: JC RM33MOV A,R1                ;R2减闰3月天数,够减MOV R2,A                ;转4月AJMP M4RM33: CJNE R3,#00H,RM34LJMP RY3                   ;R2减润3月天数RM34: MOV A,R2                     ;不够减,判断R3为0否ADD A,R3                  ;不为0,R3加到R2中MOV R2,A                ;再让闰3月减MOV R3,#00H                  ;还不够转RY3AJMP  RM3M4: MOV A,R2                     ;R2减4月天数CLR CSUBB A,#29MOV R1,AMOV A,R6JB ACC.2,M41CLR CMOV A,R2SUBB A,#30MOV R1,AM41: JC M42MOV A,R1                ;R2减4月天数,够减MOV R2,AAJMP MM4M42: CJNE R3,#00H,M43            ;R2减4月天数LJMP Y4                 ;不够减,判断R3为0否M43: MOV A,R2                 ;不为0,R3加到R2中ADD A,R3                 ;再让4月减MOV R2,A                  ;还不够,则转Y4MOV R3,#00HAJMP M4MM4: LCALL CHECKRE            ;查4月,如果不为闰月CJNE A,#04H,M5             ;转5月RM4: MOV A,R4ANL A,#0FH                  ;R2减闰4月天数JNZ RM41MOV A,R2CLR CSUBB A,#30MOV R1,AAJMP RM42RM41: MOV A,R2CLR CSUBB A,#29MOV R1,ARM42: JC RM43MOV A,R1                ;R2减闰4月天数,够减MOV R2,A                ;转5月AJMP M5RM43: CJNE R3,#00H,RM44LJMP RY4                  ;R2减润4月天数RM44: MOV A,R2                     ;不够减,判断R3为0否ADD A,R3                  ;不为0,R3加到R2中MOV R2,A                ;再让闰4月减MOV R3,#00H                  ;还不够转RY4AJMP  RM4M5: MOV A,R2                     ;R2减5月天数CLR CSUBB A,#29MOV R1,AMOV A,R6JB ACC.1,M51MOV A,R2CLR CSUBB A,#30MOV R1,AM51: JC M52MOV A,R1                ;R2减5月天数,够减MOV R2,AAJMP MM5M52: CJNE R3,#00H,M53            ;R2减5月天数LJMP Y5                ;不够减,判断R3为0否M53: MOV A,R2                 ;不为0,R3加到R2中ADD A,R3                 ;再让5月减MOV R2,A                  ;还不够,则转Y5MOV R3,#00HAJMP M5MM5: LCALL CHECKRE            ;查5月,如果不为闰月CJNE A,#05H,M6              ;转6月RM5: MOV A,R4ANL A,#0FH                  ;R2减闰5月天数JNZ RM51MOV A,R2CLR CSUBB A,#30MOV R1,AAJMP RM52RM51: MOV A,R2CLR CSUBB A,#29MOV R1,ARM52: JC RM53MOV A,R1                ;R2减闰5月天数,够减MOV R2,A                ;转6月LJMP M6RM53: CJNE R3,#00H,RM54LJMP RY5                   ;R2减润5月天数RM54: MOV A,R2                     ;不够减,判断R3为0否ADD A,R3                  ;不为0,R3加到R2中MOV R2,A                ;再让闰5月减MOV R3,#00H                  ;还不够转RY5LJMP  RM5M6: MOV A,R2                     ;R2减6月天数CLR CSUBB A,#29MOV R1,AMOV A,R6JB ACC.0,M61MOV A,R2CLR CSUBB A,#30MOV R1,AM61: JC M62MOV A,R1                ;R2减6月天数,够减MOV R2,AAJMP MM6M62: CJNE R3,#00H,M63            ;R2减6月天数LJMP Y6               ;不够减,判断R3为0否M63: MOV A,R2                 ;不为0,R3加到R2中ADD A,R3                 ;再让6月减MOV R2,A                  ;还不够,则转Y6MOV R3,#00HAJMP M6MM6: LCALL CHECKRE            ;查6月,如果不为闰月CJNE A,#06H,M7              ;转7月RM6: MOV A,R4ANL A,#0FH                  ;R2减闰6月天数JNZ RM61MOV A,R2CLR CSUBB A,#30MOV R1,AAJMP RM62RM61: MOV A,R2CLR CSUBB A,#29MOV R1,ARM62: JC RM63MOV A,R1                ;R2减闰6月天数,够减MOV R2,A                ;转7月LJMP M7RM63: CJNE R3,#00H,RM64LJMP RY6                   ;R2减润6月天数RM64: MOV A,R2                     ;不够减,判断R3为0否ADD A,R3                  ;不为0,R3加到R2中MOV R2,A                ;再让闰6月减MOV R3,#00H                  ;还不够转RY6LJMP  RM6M7: MOV A,R2                     ;R2减7月天数CLR CSUBB A,#29MOV R1,AMOV A,R5JB ACC.6,M71MOV A,R2CLR CSUBB A,#30MOV R1,AM71: JC M72MOV A,R1                ;R2减7月天数,够减MOV R2,AAJMP MM7M72: CJNE R3,#00H,M73            ;R2减7月天数LJMP Y7                ;不够减,判断R3为0否M73: MOV A,R2                 ;不为0,R3加到R2中ADD A,R3                 ;再让7月减MOV R2,A                  ;还不够,则转Y7MOV R3,#00HAJMP M7MM7: LCALL CHECKRE            ;查7月,如果不为闰月CJNE A,#07H,M8              ;转8月RM7: MOV A,R4ANL A,#0FH                  ;R2减闰7月天数JNZ RM71MOV A,R2CLR CSUBB A,#30MOV R1,AAJMP RM72RM71: MOV A,R2CLR CSUBB A,#29MOV R1,ARM72: JC RM73MOV A,R1                ;R2减闰7月天数,够减MOV R2,A                ;转8月LJMP M8RM73: CJNE R3,#00H,RM74LJMP RY7                   ;R2减润5月天数RM74: MOV A,R2                     ;不够减,判断R3为0否ADD A,R3                  ;不为0,R3加到R2中MOV R2,A                ;再让闰7月减MOV R3,#00H                  ;还不够转RY7LJMP  RM7M8: MOV A,R2                     ;R2减8月天数CLR CSUBB A,#29MOV R1,AMOV A,R5JB ACC.5,M81MOV A,R2CLR CSUBB A,#30MOV R1,AM81: JC M82MOV A,R1                ;R2减8月天数,够减MOV R2,AAJMP 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                  ;还不够,则转Y8MOV R3,#00HLJMP M8M9: MOV A,R2                     ;R2减9月天数CLR CSUBB A,#29MOV R1,AMOV A,R5JB ACC.4,M91MOV A,R2CLR CSUBB A,#30MOV R1,AM91: JC M92MOV A,R1                ;R2减9月天数,够减MOV R2,AAJMP MM9M92: CJNE R3,#00H,M93            ;R2减9月天数LJMP Y9                ;不够减,判断R3为0否M93: MOV A,R2                 ;不为0,R3加到R2中ADD A,R3                 ;再让9月减MOV R2,A                  ;还不够,则转Y7MOV R3,#00HAJMP M9MM9: LCALL CHECKRE            ;查7月,如果不为闰月CJNE A,#09H,M10              ;转10月RM9: MOV A,R4ANL A,#0FH                  ;R2减闰9月天数JNZ RM91MOV A,R2CLR CSUBB A,#30MOV R1,AAJMP RM92RM91: MOV A,R2CLR CSUBB A,#29MOV R1,ARM92: JC RM93MOV A,R1                ;R2减闰9月天数,够减MOV R2,A                ;转10月LJMP M10RM93: CJNE R3,#00H,RM94LJMP RY9                  ;R2减润9月天数RM94: MOV A,R2                     ;不够减,判断R3为0否ADD A,R3                  ;不为0,R3加到R2中MOV R2,A                ;再让闰9月减MOV R3,#00H                  ;还不够转RY9LJMP  RM9M10: MOV A,R2                     ;R2减10月天数CLR CSUBB A,#29MOV R1,AMOV A,R5JB ACC.2,M101MOV A,R2CLR CSUBB A,#30MOV R1,AM101: JC M102MOV A,R1                ;R2减10月天数,够减MOV R2,ALJMP 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                  ;还不够,则转Y10MOV R3,#00HLJMP M10M11: MOV A,R2                     ;R2减11月天数CLR CSUBB A,#29MOV R1,AMOV A,R5JB ACC.1,M111MOV A,R2CLR CSUBB A,#30MOV R1,AM111: JC M112MOV A,R1                ;R2减11月天数,够减MOV R2,ALJMP M12M112: CJNE R3,#00H,M113            ;R2减11月天数LJMP Y11                ;不够减,判断R3为0否M113: MOV A,R2                 ;不为0,R3加到R2中ADD A,R3                 ;再让10月减MOV R2,A                  ;还不够,则转Y10MOV R3,#00HLJMP M11M12: MOV A,R2                     ;R2减12月天数CLR CSUBB A,#29MOV R1,AMOV A,R5JB ACC.0,M121MOV A,R2CLR CSUBB A,#30MOV R1,AM121: CJNE R3,#00H,M122            ;R2减12月天数LJMP Y12                ;不够减,判断R3为0否M122: MOV A,R2                 ;不为0,R3加到R2中ADD A,R3                 ;再让10月减MOV R2,A                  ;还不够,则转Y10MOV R3,#00HLJMP M12Y1: MOV A,R2MOV R0,A                  ;R2中为日的值LCALL D_BCDMOV 56H,AMOV 57H,#01HCLR F0                     ;非闰月LJMP S_PLAYY2: CJNE R2,#00H,Y21MOV A,R6                  ;R2为0,则为前一月最后一天MOV 56H,#29HJB ACC.6,Y22MOV 56H,#30HY22: MOV 57H,#01HCLR F0LJMP S_PLAYY21: MOV A,R2MOV R0,A                  ;R2中为日的值LCALL D_BCDMOV 56H,AMOV 57H,#02HCLR F0LJMP S_PLAYRY2:  CJNE R2,#00H,RY21MOV 56H,#29H                  ;R2为0,则为前一月最后一天MOV A,R6JB ACC.5,RY22MOV 56H,#30HRY22: MOV 57H,#02HCLR F0LJMP S_PLAYRY21: MOV A,R2                       ;R2中为日的值MOV R0,ALCALL D_BCDMOV 56H,AMOV 57H,#02HSETB F0                        ;闰月LJMP S_PLAYY3: CJNE R2,#00H,Y31LCALL CHECKRE                 ;查前一个月是否为闰月CJNE A,#02H,Y32MOV 56H,#29H                   ;前一个月是闰月MOV A,R4ANL A,#0FH                    ;R2中为0,则为前一个月的最后一天JNZ Y33MOV 56H,#30HMOV 57H,#02HSETB F0LJMP S_PLAYY33:  MOV 57H,#02HSETB F0LJMP S_PLAYY32: MOV 56H,#29H                    ;前一个月不是闰月MOV A,R6JB ACC.5,Y34MOV 56H,#30HY34: MOV 57H,#02HCLR F0LJMP S_PLAYY31: MOV A,R2MOV R0,A                  ;R2中为日的值LCALL D_BCDMOV 56H,AMOV 57H,#03HCLR F0LJMP S_PLAYRY3:  CJNE R2,#00H,RY31MOV 56H,#29H                  ;R2为0,则为前一月最后一天MOV A,R6JB ACC.4,RY32MOV 56H,#30HRY32: MOV 57H,#03HCLR F0LJMP S_PLAYRY31: MOV A,R2                       ;R2中为日的值MOV R0,ALCALL D_BCDMOV 56H,AMOV 57H,#03HSETB F0                        ;闰月LJMP S_PLAYY4: CJNE R2,#00H,Y41LCALL CHECKRE                 ;查前一个月是否为闰月CJNE A,#03H,Y42MOV 56H,#29H                   ;前一个月是闰月MOV A,R4ANL A,#0FH                    ;R2中为0,则为前一个月的最后一天JNZ Y43MOV 56H,#30HMOV 57H,#03HSETB F0LJMP S_PLAYY43:  MOV 57H,#03HSETB F0LJMP S_PLAYY42: MOV 56H,#29H                    ;前一个月不是闰月MOV A,R6JB ACC.4,Y44MOV 56H,#30HY44: MOV 57H,#03HCLR F0LJMP S_PLAYY41: MOV A,R2MOV R0,A                  ;R2中为日的值LCALL D_BCDMOV 56H,AMOV 57H,#04HCLR F0LJMP S_PLAYRY4:  CJNE R2,#00H,RY41MOV 56H,#29H                  ;R2为0,则为前一月最后一天MOV A,R6JB ACC.2,RY42MOV 56H,#30HRY42: MOV 57H,#04HCLR F0LJMP S_PLAYRY41: MOV A,R2                       ;R2中为日的值MOV R0,ALCALL D_BCDMOV 56H,AMOV 57H,#04HSETB F0                        ;闰月LJMP S_PLAYY5: CJNE R2,#00H,Y51LCALL CHECKRE                 ;查前一个月是否为闰月CJNE A,#04H,Y52MOV 56H,#29H                   ;前一个月是闰月MOV A,R4ANL A,#0FH                    ;R2中为0,则为前一个月的最后一天JNZ Y53MOV 56H,#30HMOV 57H,#04HSETB F0LJMP S_PLAYY53:  MOV 57H,#04HSETB F0LJMP S_PLAYY52: MOV 56H,#29H                    ;前一个月不是闰月MOV A,R6JB ACC.2,Y44MOV 56H,#30HY54: MOV 57H,#04HCLR F0LJMP S_PLAYY51: MOV A,R2MOV R0,A                  ;R2中为日的值LCALL D_BCDMOV 56H,AMOV 57H,#05HCLR F0LJMP S_PLAYRY5:  CJNE R2,#00H,RY51MOV 56H,#29H                  ;R2为0,则为前一月最后一天MOV A,R6JB ACC.1,RY52MOV 56H,#30HRY52: MOV 57H,#05HCLR F0LJMP S_PLAYRY51: MOV A,R2                       ;R2中为日的值MOV R0,ALCALL D_BCDMOV 56H,AMOV 57H,#05HSETB F0                        ;闰月LJMP S_PLAYY6: CJNE R2,#00H,Y61LCALL CHECKRE                 ;查前一个月是否为闰月CJNE A,#05H,Y62MOV 56H,#29H                   ;前一个月是闰月MOV A,R4ANL A,#0FH                    ;R2中为0,则为前一个月的最后一天JNZ Y63MOV 56H,#30HMOV 57H,#05HSETB F0LJMP S_PLAYY63:  MOV 57H,#05HSETB F0LJMP S_PLAYY62: MOV 56H,#29H                    ;前一个月不是闰月MOV A,R6JB ACC.1,Y64MOV 56H,#30HY64: MOV 57H,#05HCLR F0LJMP S_PLAYY61: MOV A,R2MOV R0,A                  ;R2中为日的值LCALL D_BCDMOV 56H,AMOV 57H,#06HCLR F0LJMP S_PLAYRY6:  CJNE R2,#00H,RY61MOV 56H,#29H                  ;R2为0,则为前一月最后一天MOV A,R6JB ACC.0,RY62MOV 56H,#30HRY62: MOV 57H,#06HCLR F0LJMP S_PLAYRY61: MOV A,R2                       ;R2中为日的值MOV R0,ALCALL D_BCDMOV 56H,AMOV 57H,#06HSETB F0                        ;闰月LJMP S_PLAYY7: CJNE R2,#00H,Y71LCALL CHECKRE                 ;查前一个月是否为闰月CJNE A,#06H,Y72MOV 56H,#29H                   ;前一个月是闰月MOV A,R4ANL A,#0FH                    ;R2中为0,则为前一个月的最后一天JNZ Y73MOV 56H,#30HMOV 57H,#06HSETB F0LJMP S_PLAYY73:  MOV 57H,#06HSETB F0LJMP S_PLAYY72: MOV 56H,#29H                    ;前一个月不是闰月MOV A,R6JB ACC.0,Y74MOV 56H,#30HY74: MOV 57H,#06HCLR F0LJMP S_PLAYY71: MOV A,R2MOV R0,A                  ;R2中为日的值LCALL D_BCDMOV 56H,AMOV 57H,#07HCLR F0LJMP S_PLAYRY7:  CJNE R2,#00H,RY71MOV 56H,#29H                  ;R2为0,则为前一月最后一天MOV A,R6JB ACC.6,RY72MOV 56H,#30HRY72: MOV 57H,#07HCLR F0LJMP S_PLAYRY71: MOV A,R2                       ;R2中为日的值MOV R0,ALCALL D_BCDMOV 56H,AMOV 57H,#07HSETB F0                        ;闰月LJMP S_PLAYY8: CJNE R2,#00H,Y81LCALL CHECKRE                 ;查前一个月是否为闰月CJNE A,#07H,Y82MOV 56H,#29H                   ;前一个月是闰月MOV A,R4ANL A,#0FH                    ;R2中为0,则为前一个月的最后一天JNZ Y83MOV 56H,#30HMOV 57H,#07HSETB F0LJMP S_PLAYY83:  MOV 57H,#07HSETB F0LJMP S_PLAYY82: MOV 56H,#29H                    ;前一个月不是闰月MOV A,R6JB ACC.6,Y84MOV 56H,#30HY84: MOV 57H,#07HCLR F0LJMP S_PLAYY81: MOV A,R2MOV R0,A                  ;R2中为日的值LCALL D_BCDMOV 56H,AMOV 57H,#08HCLR F0LJMP S_PLAYY9: CJNE R2,#00H,Y91MOV 56H,#29H                  MOV A,R5JB ACC.5,Y94MOV 56H,#30HY94: MOV 57H,#08HCLR F0LJMP S_PLAYY91: MOV A,R2MOV R0,A                  ;R2中为日的值LCALL D_BCDMOV 56H,AMOV 57H,#09HCLR F0LJMP S_PLAYRY9:  CJNE R2,#00H,RY91MOV 56H,#29H                  ;R2为0,则为前一月最后一天MOV A,R5JB ACC.4,RY92MOV 56H,#30HRY92: MOV 57H,#09HCLR F0LJMP S_PLAYRY91: MOV A,R2                       ;R2中为日的值MOV R0,ALCALL D_BCDMOV 56H,AMOV 57H,#09HSETB F0                        ;闰月LJMP S_PLAYY10: CJNE R2,#00H,Y101LCALL CHECKRE                 ;查前一个月是否为闰月CJNE A,#09H,Y102MOV 56H,#29H                   ;前一个月是闰月MOV A,R4ANL A,#0FH                    ;R2中为0,则为前一个月的最后一天JNZ Y103MOV 56H,#30HMOV 57H,#09HSETB F0LJMP S_PLAYY103:  MOV 57H,#09HSETB F0LJMP S_PLAYY102: MOV 56H,#29H                    ;前一个月不是闰月MOV A,R5JB ACC.4,Y104MOV 56H,#30HY104: MOV 57H,#09HCLR F0LJMP S_PLAYY101: MOV A,R2MOV R0,A                  ;R2中为日的值LCALL D_BCDMOV 56H,AMOV 57H,#010HCLR F0LJMP S_PLAYY11:  CJNE R2,#00H,Y111MOV 56H,#29H                  MOV A,R5JB ACC.2,Y112MOV 56H,#30HY112: MOV 57H,#10HCLR F0LJMP S_PLAYY111: MOV A,R2MOV R0,A                  ;R2中为日的值LCALL D_BCDMOV 56H,AMOV 57H,#11HCLR F0LJMP S_PLAYY12: CJNE R2,#00H,Y121MOV 56H,#29H                  MOV A,R5JB ACC.1,Y122MOV 56H,#30HY122: MOV 57H,#11HCLR F0LJMP S_PLAYY121: MOV A,R2MOV R0,A                  ;R2中为日的值LCALL D_BCDMOV 56H,AMOV 57H,#12HCLR F0LJMP S_PLAYS_PLAY: MOV R0,57HLCALL DIVIDE                 ;月分离送显示缓存MOV 52H,R1MOV 53H,R2MOV R0,56HLCALL DIVIDE                 ;日分离送显示缓存MOV 50H,R1MOV 51H,R2RET;********************************;*       查是否闰月程序         *;********************************CHECKRE: MOV A,R4SWAP AANL A,#0FHRET;********************************;*    十进制转换为BCD码程序     *;********************************D_BCD: MOV A,R0MOV B,#10DIV ABSWAP AORL A,BRET;********************************;*          显示程序            *;********************************DISPLAY:MOV 7EH,#02HMOV 7DH,#00HMOV R0,#76HMOV R1,#70HMOV R2,79HMOV R3,#79HMOV R5,#0FEHPLAY1: MOV A,#0FFHMOV P2,AMOV A,@R0MOV DPTR,#TAB1MOVC A,@A+DPTRMOV SBUF,A             ;送第1字节JNB TI,$CLR TIMOV A,@R1MOV DPTR,#TAB1MOVC A,@A+DPTRMOV SBUF,A             ;送第2字节JNB TI,$CLR TIMOV A,@R1MOV DPTR,#TAB1MOVC A,@A+DPTRMOV SBUF,A             ;送第3字节JNB TI,$CLR TIINC R0INC R1INC R3MOV A,R3SETB PSW.4               ;选2组寄存器MOV R0,AMOV A,@R0CLR PSW.4MOV R2,AMOV A,R0CJNE A,#78H,PLAY2MOV R0,#50HPLAY2: CJNE A,#54H,PLAY3MOV R0,#78HPLAY3: MOV A,R5MOV P2,ALCALL DL1MSMOV A,R5JNB ACC.6,PLAYOUTRL AMOV R5,ALJMP PLAY1PLAYOUT:  SETB P2.6RETDL1MS:MOV R6,#14HDL1: MOV R7,#19HDL2: DJNZ R7,DL2DJNZ R6,DL1RET;*****************************;*        数据表             *;*****************************TAB1: DB 03H,9FH,25H,0DH,99HDB 49H,41H,1FH,01H,09H,0FFHTAB: DB 35,15H,51H,00H,23,11H,52H,41H,42,12H,65H,00HDB 31,11H,32H,00H,21,42H,52H,21H,39,52H,25H,00HDB 28,25H,04H,71H,48,66H,42H,00H,37,33H,32H,00HDB 25,15H,24H,51H,44,05H,52H,00H,33,22H,65H,00HDB 22,21H,25H,41H,40,24H,52H,00H,30,52H,42H,91HDB 49,55H,05H,00H,38,26H,44H,00H,27,53H,50H,60HDB 46,53H,24H,00H,35,25H,54H,00H,24,41H,52H,41HDB 42,45H,25H,00H,31,24H,52H,00H,21,51H,12H,21HDB 40,55H,11H,00H,28,26H,21H,61H,47,26H,61H,00HDB 36,13H,31H,00H,25,05H,31H,51H,43,12H,54H,00HDB 33,51H,25H,00H,22,42H,25H,31H,41,32H,22H,00HDB 30,55H,02H,71H,49,55H,22H,00H,38,26H,62H,00HDB 27,13H,64H,60H,45,13H,32H,00H,34,12H,55H,00HDB 23,10H,53H,51H,42,22H,45H,00H,31,52H,22H,00HDB 21,52H,44H,21H,40,55H,44H,00H,29,26H,50H,71HDB 47,26H,64H,00H,36,25H,32H,00H,25,23H,32H,50HDB 44,44H,55H,00H,32,24H,45H,00H,22,55H,11H,30HEND

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部