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