 摘 要: 隨著科技的快速發(fā)展,時(shí)間的流逝,至從觀(guān)太陽(yáng)、擺鐘到現(xiàn)在電子鐘,人類(lèi)不斷研究,不斷創(chuàng)新紀(jì)錄。美國(guó)DALLAS公司推出的具有涓細(xì)電流充電能的低功耗實(shí)時(shí)時(shí)鐘電路DS1302。它可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能,而且DS1302的使用壽命長(zhǎng),誤差小。對(duì)于數(shù)字電子萬(wàn)年歷采用直觀(guān)的數(shù)字顯示,可以同時(shí)顯示年、月、日、周日、時(shí)、分、秒和溫度等信息,還具有時(shí)間校準(zhǔn)等功能。該電路采用AT89S52單片機(jī)作為核心,功耗小,能在3V的低壓工作,電壓可選用3~5V電壓供電。 綜上所述此萬(wàn)年歷具有讀取方便、顯示直觀(guān)、功能多樣、電路簡(jiǎn)潔、成本低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢(shì),具有廣闊的市場(chǎng)前景。 關(guān)鍵詞: 時(shí)鐘電鐘;DS1302;DS18B20;動(dòng)態(tài)掃描;單片機(jī) ~~~~~~目錄~~~~~~ 一、設(shè)計(jì)要求與方案論證 ………………………………………………………………………4 1.1 設(shè)計(jì)要求 ……………………………………………………………………………………4 1.2 系統(tǒng)基本方案選擇和論證 …………………………………………………………………4 1.2.1單片機(jī)芯片的選擇方案和論證 …………………………………………………………4 1.2.2 顯示模塊選擇方案和論證 ………………………………………………………………4 1.2.3 時(shí)鐘芯片的選擇方案和論證 ……………………………………………………………4 1.2.4 溫度傳感器的選擇方案與論證 …………………………………………………………5 二.系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)………………………………………………………………………5 2.1 電路設(shè)計(jì)框圖 ………………………………………………………………………………5 2.2 系統(tǒng)硬件概述 ………………………………………………………………………………5 2.3 主要單元電路的設(shè)計(jì) ………………………………………………………………………6 2.3.1單片機(jī)主控制模塊的設(shè)計(jì) ………………………………………………………………6 2.3.2時(shí)鐘電路模塊的設(shè)計(jì) ……………………………………………………………………6 2.3.3溫度采集模塊設(shè)計(jì) ………………………………………………………………………7 2.3.4 電路原理及說(shuō)明 …………………………………………………………………………7 2.3.5顯示模塊的設(shè)計(jì) …………………………………………………………………………8 三、系統(tǒng)的軟件設(shè)計(jì) ……………………………………………………………………………9 3.1程序流程框圖 ………………………………………………………………………………9 3.2 子程序的設(shè)計(jì) ………………………………………………………………………………9 3.2.1 DS18B20溫度子程序 ……………………………………………………………………9 3.2.2 讀、寫(xiě)DS1302子程序 …………………………………………………………………10 四. 指標(biāo)測(cè)………………………………………………………………………………………11 4.1 測(cè)試儀器……………………………………………………………………………………11 4.2硬件測(cè)試……………………………………………………………………………………11 4.3軟件測(cè)試……………………………………………………………………………………11 4.4測(cè)試結(jié)果分析與結(jié)論………………………………………………………………………12 4.4.1 測(cè)試結(jié)果分析……………………………………………………………………………12 4.4.2 測(cè)試結(jié)論…………………………………………………………………………………12 五、作品總結(jié)……………………………………………………………………………………12 六、致謝詞………………………………………………………………………………………12 參考文獻(xiàn)…………………………………………………………………………………………13 附錄一:系統(tǒng)電路圖……………………………………………………………………………14 附錄二:系統(tǒng)程序清單…………………………………………………………………………15 附錄三:系統(tǒng)使用說(shuō)明書(shū)………………………………………………………………………40 CONFIG12 EQU 7FH TEMPH EQU 21H TEMPL EQU 20H REG2 EQU 22H REG3 EQU 23H REG4 EQU 24H DAT EQU P0.7 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 ORG 0000H LJMP START ORG 001BH LJMP INTT1 START: ;初值 LCALL ZJ SETB EA MOV TMOD,#10H ;計(jì)數(shù)器1,方式1 MOV TL1,#00H MOV TH1,#00H MOV 32H,#8EH MOV 31H,#00H ;允許寫(xiě)1302 LCALL WRITE MOV 32H,#90H MOV 31H,#0A6H ;1302充電,充電電流1.1MA LCALL WRITE ;主程序~~~~~~~~~~~~~~~~~~~~~ MAIN1: MOV 32H,#8DH ;讀出年 LCALL READ MOV year,31H MOV 32H,#8BH ;讀出星期 LCALL READ MOV week,31H MOV 32H,#89H ;讀出月 LCALL READ MOV month,31H MOV 32H,#87H ;讀出日 LCALL READ MOV day,31H MOV 32H,#85H ;讀出小時(shí) LCALL READ MOV hour,31H MOV 32H,#83H ;讀出分鐘 LCALL READ MOV mintue,31H MOV 32H,#81H ;讀出秒 LCALL READ MOV second,31H ;~~~~~~~~~~~~分離緩存~~~~~~~~ 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 ;小時(shí)分離,送顯示緩存 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 CLR EA LCALL TOUTOU LCALL NS SETB EA LCALL DISPLAY LCALL GENGXIAN ;更新農(nóng)歷程序 JNB P0.1,SETG111 JNB F0,SSS SETB P0.4 ;非閏月,則p0.4清零,指示燈亮 LJMP MAIN1 SETG111: LJMP SETG SSS: CLR P0.4 ;閏月,則p0.4置位,指示燈不亮 LJMP MAIN1 ;~~~~~~~~~~~~~~~~~~~~~~~~~ 溫度 TOUTOU: LCALL CHUSHI LCALL RDTEMP MOV A,TEMPL ANL A,#11110000B MOV TEMPL,A MOV A,TEMPH ANL A,#00000111B ORL A,TEMPL SWAP A MOV 25H,A MOV A,25H MOV B,#64H DIV AB MOV A,B MOV B,#0AH DIV AB SWAP A ORL A,B MOV 10H,A RET CHUSHI: LCALL RESET MOV A,#0CCH LCALL WRITE111 MOV A,#4EH LCALL WRITE111 MOV A,#CONFIG12 LCALL WRITE111 RET RDTEMP: LCALL RESET MOV A,#0CCH LCALL WRITE111 MOV A,#44H LCALL WRITE111 LCALL DL1MS LCALL RESET MOV A,#0CCH LCALL WRITE111 MOV A,#0BEH LCALL WRITE111 LCALL ERAD111 MOV TEMPL,A LCALL ERAD111 MOV TEMPH,A RET RESET: LA: SETB DAT MOV 52H,#200 LB: CLR DAT DJNZ 52H,LB SETB DAT MOV 52H,#30 LC: DJNZ 52H,LC CLR C ORL C,DAT JC LB MOV 58H,#80 LD: ORL C,DAT JC LP DJNZ 58H,LD SJMP LA LP: MOV 52H,#250 LF: DJNZ 52H,LF RET WRITE111: MOV 53H,#8 W51HA: SETB DAT MOV 54H,#8 RRC A CLR DAT W52HA: DJNZ 54H,W52HA MOV DAT,C MOV 54H,#30 W53HA: DJNZ 54H,W53HA DJNZ 53H,W51HA SETB DAT RET ERAD111: CLR EA MOV 58H,#8 RD1A: CLR DAT MOV 54H,#6 NOP SETB DAT RD2A: DJNZ 54H,RD2A MOV C,DAT RRC A MOV 55H,#30 RD3A: DJNZ 55H,RD3A DJNZ 58H,RD1A SETB DAT RET ;公歷設(shè)置程序~~~~~~
SETG : SETB TR1 SETB ET1 MOV 32H,#8EH MOV 31H,#00H ;允許寫(xiě)1302 LCALL WRITE MOV 32H,#80H MOV 31H,#80H ;1302停止振蕩 LCALL WRITE GWAIT: ;~ LCALL DISPLAY JNB P0.1,GWAIT SETG1: LCALL DISPLAY JNB P0.1,SETG2 JNB P0.2,GADDYEAR JNB P0.3,JIANYEAR AJMP SETG1 GADDYEAR: MOV R7,66H ;年加一 LCALL ADD1 MOV 66H,A CJNE A,#51H,GADDYEAR1 MOV 66H,#00H AJMP GADDYEAR1 JIANYEAR: MOV R7,66H ;年減一 LCALL JIAN1 MOV 66H,A CJNE A,#00H,GADDYEAR1 MOV 66H,#51H GADDYEAR1: MOV 32H,#8CH ;年值送人1302 MOV 31H,66H LCALL WRITE MOV R0,66H LCALL DIVIDE ;年分離送顯示緩存 MOV 4BH,R1 MOV 7BH,R1 MOV 4CH,R2 MOV 7CH,R2 WAITT1: ;~~~~~~~ LCALL DISPLAY JNB P0.2,WAITT1 JNB P0.3,WAITT1 AJMP SETG1 SETG2: SETB 0AH ;調(diào)月時(shí)閃標(biāo)志 GWAIT2: LCALL DISPLAY JNB P0.1,GWAIT2 SETG3: LCALL DISPLAY JNB P0.1,SETG4 JNB P0.2,GADDMONTH JNB P0.3,JIANMONTH AJMP SETG3 GADDMONTH: MOV R7,65H ;月加一 LCALL ADD1 MOV 65H,A CJNE A,#13H,GADDMONTH1 MOV 65H,#01H AJMP GADDMONTH1 JIANMONTH: MOV R7,65H ;月減一 LCALL JIAN1 MOV 65H,A CJNE A,#00H,GADDMONTH1 MOV 65H,#12H GADDMONTH1: MOV 32H,#88H ;月值送人1302 MOV 31H,65H LCALL WRITE MOV R0,65H LCALL DIVIDE ;月分離,送顯示緩存 MOV 79H,R1 MOV 49H,R1 MOV 7AH,R2 MOV 4AH,R2 WAITT2: ;~ LCALL DISPLAY JNB P0.2,WAITT2 JNB P0.3,WAITT2 AJMP SETG3 SETG4: SETB 0BH ;調(diào)日時(shí)閃標(biāo)志 GWAIT4: LCALL DISPLAY JNB P0.1,GWAIT4 SETG5: LCALL DISPLAY JNB P0.1,SETG6 JNB P0.2,GADDDAY JNB P0.3,JIANDAY AJMP SETG5 GADDDAY: MOV R7,63H ;日加一 LCALL ADD1 MOV 63H,A CJNE A,#32H,GADDDAY1 MOV 63H,#01H JIANDAY: MOV R7,63H ;日減一 LCALL JIAN1 MOV 63H,A CJNE A,#00H,GADDDAY1 MOV 63H,#31H GADDDAY1: MOV 32H,#86H ;日值送人1302 MOV 31H,63H LCALL WRITE MOV R0,63H LCALL DIVIDE ;日分離,送顯示緩存 MOV 76H,R1 MOV 46H,R1 MOV 77H,R2 MOV 47H,R2 WAITT3: ;~~~ LCALL DISPLAY JNB P0.2,WAITT3 JNB P0.3,WAITT3 AJMP SETG5 SETG6: SETB 0CH ;調(diào)星期時(shí)閃標(biāo)志 GWAIT6: LCALL DISPLAY JNB P0.1,GWAIT6 SETG7: LCALL DISPLAY JNB P0.1,SETG8 JNB P0.2,GADDWEEK JNB P0.3,JIANWEEK AJMP SETG7 GADDWEEK: MOV R7,64H ;星期加一 LCALL ADD1 MOV 64H,A CJNE A,#07H,GADDWEEK1 MOV 64H,#00H AJMP GADDWEEK1 JIANWEEK: MOV R7,64H ;星期減一 LCALL JIAN1 MOV 64H,A CJNE A,#00H,GADDWEEK1 MOV 64H,#06H GADDWEEK1: MOV 32H,#8AH MOV 31H,64H ;星期值送人1302 LCALL WRITE MOV R0,64H LCALL DIVIDE ;星期值分離送顯示緩存 MOV 48H,R1 MOV 78H,R1 WAITT4: ;~~~~ LCALL DISPLAY JNB P0.2,WAITT4 JNB P0.3,WAITT4 AJMP SETG7 SETG8: SETB 0DH ;調(diào)小時(shí)時(shí)閃標(biāo)志 GWAIT8: LCALL DISPLAY JNB P0.1,GWAIT8 SETG9: LCALL DISPLAY JNB P0.1,SETG10 JNB P0.2,GADDHOUR JNB P0.3,JIANHOUR AJMP SETG9 GADDHOUR: MOV R7,62H ;小時(shí)加一 LCALL ADD1 MOV 62H,A CJNE A,#24H,GADDHOUR1 MOV 62H,#00H AJMP GADDHOUR1 JIANHOUR: MOV R7,62H ;小時(shí)減一 LCALL JIAN1 MOV 62H,A CJNE A,#00H,GADDHOUR1 MOV 62H,#23H GADDHOUR1: MOV 32H,#84H ;小時(shí)值送人1302 MOV 31H,62H LCALL WRITE MOV R0,62H LCALL DIVIDE ;小時(shí)值分離送顯示緩存 MOV 74H,R1 MOV 44H,R1 MOV 75H,R2 MOV 45H,R2 WAITT5: ;~~~~~ LCALL DISPLAY JNB P0.2,WAITT5 JNB P0.3,WAITT5 AJMP SETG9 SETG10: SETB 0EH ;調(diào)分時(shí)候閃標(biāo)志 GWAIT10: LCALL DISPLAY JNB P0.1,GWAIT10 SETG11: LCALL DISPLAY JNB P0.1,SETGOUT JNB P0.2,GADDMINTUE JNB P0.3,JIANMINTUE AJMP SETG11 GADDMINTUE: MOV R7,61H ;分鐘加一 LCALL ADD1 MOV 61H,A CJNE A,#60H,GADDMINTUE1 MOV 61H,#00H AJMP GADDMINTUE1 JIANMINTUE: MOV R7,61H ;分鐘減一 LCALL JIAN1 MOV 61H,A CJNE A,#00H,GADDMINTUE1 MOV 61H,#59H GADDMINTUE1: MOV 32H,#82H ;分鐘值送人1302 MOV 31H,61H LCALL WRITE MOV R0,61H LCALL DIVIDE ;分鐘值分離送顯示緩存 MOV 72H,R1 MOV 42H,R1 MOV 73H,R2 MOV 43H,R2 WAITT6: LCALL DISPLAY JNB P0.2,WAITT6 JNB P0.3,WAITT6 AJMP SETG11 SETGOUT: LCALL DISPLAY JNB P0.1,SETGOUT LCALL GENGXIAN MOV 32H,#80H MOV 31H,#00H ;1302晶振開(kāi)始振蕩 LCALL WRITE MOV 32H,#8EH MOV 31H,#80H ;禁止寫(xiě)入1302 LCALL WRITE CLR 08H CLR 09H CLR 0AH CLR 0BH CLR 0CH CLR 0DH CLR 0EH CLR 0FH CLR ET1 ;關(guān)閃中斷 CLR TR1 LJMP MAIN1 ;;閃動(dòng)調(diào)時(shí)程序~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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 ;調(diào)年閃 MOV 7CH,#0FH MOV 7BH,#0FH AJMP GFLASHOUT GFLASH2: JB 0BH,GFLASH3 ;調(diào)月閃 MOV 7AH,#0FH MOV 79H,#0FH AJMP GFLASHOUT GFLASH3: JB 0CH,GFLASH4 ;調(diào)日閃 MOV 77H,#0FH MOV 76H,#0FH AJMP GFLASHOUT GFLASH4: JB 0DH,GFLASH5 ;調(diào)星期閃 MOV 78H,#0FH AJMP GFLASHOUT GFLASH5: JB 0EH,GFLASH6 ;調(diào)小時(shí)閃 MOV 75H,#0FH MOV 74H,#0FH AJMP GFLASHOUT GFLASH6: MOV 73H,#0FH ;調(diào)分鐘閃 MOV 72H,#0FH AJMP GFLASHOUT ;加一程序~~~~~~~~~~~~~~~~~~~~~~~~~ ADD1: MOV A,R7 ADD A,#1 DA A RET ;減一程序~~~~~~~~~~~~~~~~~~~~~~~~~ JIAN1: MOV A,R7 DEC A CJNE A,#4FH,KK1 MOV A,#49H KK1: CJNE A,#3FH,KK2 MOV A,#39H KK2: CJNE A,#2FH,KK3 MOV A,#29H KK3: CJNE A,#1FH,KK4 MOV A,#19H KK4: CJNE A,#0FH,KK5 MOV A,#09H KK5: RET ;分離程序~~~~~~~~~~~~~~~~~~~~~~~~~ DIVIDE: MOV A,R0 ANL A,#0FH MOV R1,A MOV A,R0 SWAP A ANL A,#0FH MOV R2,A RET ;寫(xiě)1302程序~~~~~~~ WRITE: CLR SCLK NOP SETB RST NOP MOV A,32H 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,31H MOV R4,#8 WRITE2: RRC A NOP ;送數(shù)據(jù)給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,32H MOV R4,#8 READ1: RRC A ;送地址給1302 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 ;從1302中讀出數(shù)據(jù) NOP NOP MOV C,IO NOP NOP NOP NOP NOP RRC A NOP NOP NOP NOP SETB SCLK NOP DJNZ R4,READ2 MOV 31H,A CLR RST RET ;BCD碼轉(zhuǎn)換為10進(jìn)制程序~~~~~ 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 ;查一年數(shù)據(jù)程序~~~~~~~~~~~~~~~~ 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 ;第一字節(jié)送R7 INC R1 MOV A,R1 MOVC A,@A+DPTR MOV R6,A ;第二字節(jié)送R6 INC R1 MOV A,R1 MOVC A,@A+DPTR MOV R5,A ;第三字節(jié)送R6 INC R1 MOV A,R1 MOVC A,@A+DPTR MOV R4,A ;第四字節(jié)送R4 RET ;;;;;自動(dòng)更新農(nóng)歷;;; ;;;;;;;;;;;;;;;;;;;; GENGXIAN: MOV R2,#00H MOV R3,#00H MOV A,month CJNE A,#01H,GM2 MOV R0,day ;當(dāng)前月為一月 LCALL BCD_10 ;當(dāng)前日轉(zhuǎn)換為10進(jìn)制,送R2 MOV A,R0 MOV R2,A AJMP TIAOZHENG1 GM2: CJNE A,#02H,GM3 MOV R0,day ;當(dāng)前月為二月 LCALL BCD_10 ;;當(dāng)前日轉(zhuǎn)換為10進(jìn)制, MOV A,R0 ;再加31,送R2 ADD A,#31 MOV R2,A AJMP TIAOZHENG1 GM3: CJNE A,#03H,GM4 MOV R0,day ;當(dāng)前月為三月 LCALL BCD_10 ;當(dāng)前日轉(zhuǎn)換為10進(jìn)制, MOV A,R0 ;再加59,送R2 ADD A,#59 MOV R2,A AJMP TIAOZHENG1 GM4: CJNE A,#04H,GM5 MOV R0,day ;當(dāng)前月為四月 LCALL BCD_10 ;;當(dāng)前日轉(zhuǎn)換為10進(jìn)制, MOV A,R0 ;再加90,送R2 ADD A,#90 MOV R2,A AJMP TIAOZHENG1 GM5: CJNE A,#05H,GM6 MOV R0,day ;當(dāng)前月為五月 LCALL BCD_10 ;當(dāng)前日轉(zhuǎn)換為10進(jìn)制, MOV A,R0 ;再加120,送R2 ADD A,#120 MOV R2,A AJMP TIAOZHENG1 GM6: CJNE A,#06H,GM7 MOV R0,day ;當(dāng)前月為六月 LCALL BCD_10 ;當(dāng)前日轉(zhuǎn)換為10進(jìn)制, MOV A,R0 ;再加151,送R2 ADD A,#151 MOV R2,A AJMP TIAOZHENG1 GM7: CJNE A,#07H,GM8 MOV R0,day ;當(dāng)前月位七月 LCALL BCD_10 ;當(dāng)前日轉(zhuǎn)換為10進(jìn)制, MOV A,R0 ;再加181,送R2 ADD A,#181 MOV R2,A AJMP TIAOZHENG1 GM8:CJNE A,#08H,GM9 MOV R0,day ;當(dāng)前月為八月 LCALL BCD_10 ;當(dāng)前日轉(zhuǎn)換為10進(jìn)制, MOV A,R0 ;再加212,送R2 ADD A,#212 MOV R2,A AJMP TIAOZHENG1 GM9:CJNE A,#09H,GM10 MOV R0,day ;當(dāng)前月為九月 LCALL BCD_10 ;當(dāng)前日轉(zhuǎn)換為10進(jìn)制, MOV A,R0 ;再加243 CLR C ADD A,#243 JC GGG MOV R2,A ;A沒(méi)有溢出,送R2 AJMP TIAOZHENG1 GGG: MOV R3,#0FFH ;A溢出,A加一送R2 INC A ;R3中送#0ffh MOV R2,A AJMP TIAOZHENG1 GM10: CJNE A,#10H,GM11 MOV R0,day ;當(dāng)前月為10月 LCALL BCD_10 ;當(dāng)前日轉(zhuǎn)換為10進(jìn)制, MOV A,R0 ;再加18,送R2 ADD A,#18 ;R3中送#0FFH MOV R2,A MOV R3,#0FFH AJMP TIAOZHENG1 GM11:CJNE A,#11H,GM12 MOV R0,day ;當(dāng)前月為11月 LCALL BCD_10 ;當(dāng)前日轉(zhuǎn)換為10進(jìn)制, MOV A,R0 ;再加49,送R2 ADD A,#49 ;R3中送#0FFH MOV R2,A MOV R3,#0FFH AJMP TIAOZHENG1 GM12: MOV R0,day ;當(dāng)前月為12月 LCALL BCD_10 ;當(dāng)前日轉(zhuǎn)換為10進(jìn)制, MOV A,R0 ;再加79,送R2 ADD A,#79 ;R3中送#0FFH MOV R2,A MOV R3,#0FFH AJMP TIAOZHENG1 TIAOZHENG1: MOV A,year MOV B,#04 DIV AB MOV A,B JNZ GGG1 MOV A,65H ;當(dāng)前年為閏年 CJNE A,#01H,AAAA AJMP GGG1 ;當(dāng)前月是1 AAAA: CJNE A,#02H,BBBB AJMP GGG1 ;當(dāng)前月是2 BBBB: CJNE R2,#0FFH,GGG2 MOV R3,#0FFH ;當(dāng)前月不是1和2, MOV R2,#01H ;R1和R2總和加一 AJMP GGG1 GGG2: INC R2 GGG1: MOV R0,year ;查一年數(shù)據(jù) LCALL CHECKMONTH MOV A,R2 CLR C SUBB A,R7 MOV P2.7,C CJNE A,#01H,GGG3 MOV R2,#01H MOV A,R3 CJNE A,#00H,NEW1 MOV 57H,#01H ;R2和R3總和減R7 MOV 56H,#01H ;為0,則為春節(jié) LJMP S_PLAY GGG3: CJNE A,#00H,GGG6 MOV R2,A AJMP OLD GGG6: JNB P2.7,NEW2 MOV A,R7 CLR C SUBB A,R2 MOV R7,A CJNE R3,#0FFH,GGG5 MOV A,R3 CLR C SUBB A,R7 MOV R2,A MOV R3,#00H AJMP NEW GGG5: MOV A,R7 MOV R2,A AJMP OLD NEW1: MOV R2,#0FFH MOV R3,#01H AJMP NEW NEW2: MOV R2,A MOV A,R3 CJNE A,#0FFH,GGG4 MOV A,R2 MOV R3,A MOV R2,#0FFH GGG4: AJMP NEW ;OLD 農(nóng)歷為公歷的前一年 OLD: MOV A,year DEC A MOV R0,A LCALL CHECKMONTH MOV A,R2 CLR C SUBB A,#29 MOV P2.7,C MOV R6,A MOV A,R5 JB ACC.0,AAA ;12月為小月,轉(zhuǎn)到AAA MOV A,R2 CLR C SUBB A,#30 MOV P2.7,C MOV R6,A AAA:MOV A,R6 CJNE A,#00H,BBB MOV 56H,#29H ;為0,則為11月最后一天 MOV A,R5 ;小月為11月29 JB ACC.1,CCC MOV 56H,#30H ;大月為11月30 CCC:MOV 57H,#11H LJMP S_PLAY BBB:JNB P2.7, DDD MOV A,#29 ; CY位置位,位12月 CLR C SUBB A,R2 MOV R4,A MOV A,R5 JB ACC.0,EEE MOV A,#30 CLR C SUBB A,R2 MOV R4,A EEE: MOV A,R4 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#12H LJMP S_PLAY DDD: MOV A,#29 ;CY為0,為11月 CLR C SUBB A,R4 MOV R1,A MOV A,R5 JB ACC.1, FFF MOV A,#30 CLR C SUBB A,R4 MOV R1,A FFF: MOV A,R1 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#11H LJMP S_PLAY ;NEW此時(shí)R2中的值為FFH時(shí) ; R3有值,否則為0 NEW: NOP M1: MOV A,R2 ;R2減一月天數(shù) CLR C SUBB A,#29 MOV R1,A MOV A,R6 JB ACC.6,SM11 MOV A,R2 CLR C SUBB A,#30 MOV R1,A SM11: JC SM12 MOV A,R1 ;R2減1月天數(shù),夠減 MOV R2,A ;轉(zhuǎn)二月 AJMP M2 SM12: CJNE R3,#00H,M13 ;R2減1月天數(shù) LJMP Y1 ;不夠減,判R3為0否 M13: MOV A,R2 ;不為0,R3加到R2中 ADD A,R3 ;再讓一月減 MOV R2,A ;還不夠,則轉(zhuǎn)Y1 MOV R3,#00H AJMP M1 M2: CLR C ;R2減一月天數(shù),夠減 MOV A,R2 ;轉(zhuǎn)三月 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月天數(shù),夠減 MOV R2,A AJMP MM2 M22: CJNE R3,#00H,M23 ;R2減2月天數(shù) LJMP Y2 ;不夠減,判,R3為0否 M23: MOV A,R2 ;不為0,R3加到R2中 ADD A,R3 ;再讓二月減 MOV R2,A ;還不夠,則轉(zhuǎn)Y2 MOV R3,#00H AJMP M2 MM2: LCALL CHECKRE ;查2月,如果不為閏月 CJNE A,#02H,M3 ;轉(zhuǎn)3月 RM2: MOV A,R4 ANL A,#0FH JNZ RM21 MOV A,R2 CLR C SUBB A,#30 MOV R1,A AJMP RM22 RM21: MOV A,R2 CLR C SUBB A,#29 MOV R1,A RM22: JC RM23 MOV A,R1 ;R2減閏2月天數(shù),夠減 MOV R2,A ;轉(zhuǎn)3月 AJMP M3 RM23: CJNE R3,#00H,RM24 ;R2減閏2月天數(shù) LJMP RY2 ;不夠減,判,R3為0否 RM24: MOV A,R2 ;不為0,R3加到R2中 ADD A,R3 ;再讓閏2月減 MOV R3,#00H ;還不夠,則轉(zhuǎn)RY2 AJMP RM2 M3: MOV A,R2 ;R2減3月天數(shù) 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月天數(shù),夠減 MOV R2,A AJMP MM3 M32: CJNE R3,#00H,M33 ;R2減3月天數(shù) LJMP Y3 ;不夠減,判,R3為0否 M33: MOV A,R2 ;不為0,R3加到R2中 ADD A,R3 ;再讓3月減 MOV R2,A ;還不夠,則轉(zhuǎn)Y3 MOV R3,#00H AJMP M3 MM3: LCALL CHECKRE ;查3月,如果不為閏月 CJNE A,#03H,M4 ;轉(zhuǎn)4月 RM3: MOV A,R4 ANL A,#0FH ;R2減閏3月天數(shù) 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月天數(shù),夠減 MOV R2,A ;轉(zhuǎn)4月 AJMP M4 RM33: CJNE R3,#00H,RM34 ;R2減閏3月天數(shù) LJMP RY3 ;不夠減,判,R3為0否 RM34: MOV A,R2 ;不為0,R3加到R2中 ADD A,R3 ;再讓閏3月減 MOV R2,A ;還不夠,則轉(zhuǎn)RY3 MOV R3,#00H AJMP RM3 M4: MOV A,R2 CLR C ;R2減4月天數(shù) 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月天數(shù),夠減 MOV R2,A AJMP MM4 M42: CJNE R3,#00H,M43 ;R2減4月天數(shù) LJMP Y4 ;不夠減,判,R3為0否 M43: MOV A,R2 ;不為0,R3加到R2中 ADD A,R3 ;再讓4月減 MOV R2,A ;還不夠,則轉(zhuǎn)Y4 MOV R3,#00H AJMP M4 MM4: LCALL CHECKRE ;查4月,如果不為閏月 CJNE A,#04H,M5 ;轉(zhuǎn)5月 RM4: MOV A,R4 ANL A,#0FH ;R2減閏4月天數(shù) 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月天數(shù),夠減 MOV R2,A ;轉(zhuǎn)5月 AJMP M5 RM43: CJNE R3,#00H,RM44 ;R2減閏4月天數(shù) LJMP RY4 ;不夠減,判,R3為0否 RM44: MOV A,R2 ;不為0,R3加到R2中 ADD A,R3 ;再讓閏4月減 MOV R2,A MOV R3,#00H ;還不夠,則轉(zhuǎn)Y4 AJMP RM4 M5: MOV A,R2 ;R2減5月天數(shù) 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月天數(shù),夠減 MOV R2,A AJMP MM5 M52: CJNE R3,#00H,M53 ;R2減5月天數(shù) LJMP Y5 ;不夠減,判,R3為0否 M53: MOV A,R2 ;不為0,R3加到R2中 ADD A,R3 ;再讓5月減 MOV R2,A ;還不夠,則轉(zhuǎn)Y5 MOV R3,#00H LJMP M5 MM5: LCALL CHECKRE ;查5月,如果不為閏月 CJNE A,#05H,M6 ;轉(zhuǎn)6月 RM5: MOV A,R4 ;R2減閏5月天數(shù) ANL A,#0FH JNZ RM51 MOV A,R2 CLR C SUBB A,#30 MOV R1,A LJMP RM52 RM51: MOV A,R2 CLR C SUBB A,#29 MOV R1,A RM52: JC RM53 MOV A,R1 ;R2減閏5月天數(shù),夠減 MOV R2,A ;轉(zhuǎn)6月 LJMP M6 RM53: CJNE R3,#00H,RM54 ;R2減閏5月天數(shù) LJMP RY5 ;不夠減,判,R3為0否 RM54: MOV A,R2 ;不為0,R3加到R2中 ADD A,R3 ;再讓5月減 MOV R2,A ;還不夠,則轉(zhuǎn)RY5 MOV R3,#00H LJMP RM5 M6: MOV A,R2 ;R2減6月天數(shù) 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月天數(shù),夠減 MOV R2,A LJMP MM6 M62: CJNE R3,#00H,M63 ;R2減6月天數(shù) LJMP Y6 ;不夠減,判,R3為0否 M63: MOV A,R2 ;不為0,R3加到R2中 ADD A,R3 ;再讓6月減 MOV R2,A ;還不夠,則轉(zhuǎn)Y6 MOV R3,#00H LJMP M6 MM6: LCALL CHECKRE ;查6月,如果不為閏月 CJNE A,#06H,M7 ;轉(zhuǎn)7月 RM6: MOV A,R4 ANL A,#0FH ;R2減閏6月天數(shù) JNZ RM61 MOV A,R2 CLR C SUBB A,#30 MOV R1,A LJMP RM62 RM61: MOV A,R2 CLR C SUBB A,#29 MOV R1,A RM62: JC RM63 MOV A,R1 ;R2減閏6月天數(shù),夠減 MOV R2,A ;轉(zhuǎn)7月 LJMP M7 RM63: CJNE R3,#00H,RM64 ;R2減閏6月天數(shù) LJMP RY6 ;不夠減,判,R3為0否 RM64: MOV A,R2 ;不為0,R3加到R2中 ADD A,R3 ;再讓閏6月減 MOV R2,A ;還不夠,則轉(zhuǎn)RY6 MOV R3,#00H LJMP RM6 M7: MOV A,R2 ;R2減7月天數(shù) 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月天數(shù),夠減 MOV R2,A LJMP MM7 M72: CJNE R3,#00H,M73 ;R2減7月天數(shù) LJMP Y7 ;不夠減,判,R3為0否 M73: MOV A,R2 ;不為0,R3加到R2中 ADD A,R3 ;再讓6月減 MOV R2,A ;還不夠,則轉(zhuǎn)Y7 MOV R3,#00H LJMP M7 MM7: LCALL CHECKRE ;查7月,如果不為閏月 CJNE A,#07H,M8 ;轉(zhuǎn)8月 RM7: MOV A,R4 ANL A,#0FH ;R2減閏7月天數(shù) JNZ RM71 MOV A,R2 CLR C SUBB A,#30 MOV R1,A LJMP RM72 RM71: MOV A,R2 CLR C SUBB A,#29 MOV R1,A RM72: JC RM73 MOV A,R1 ;R2減閏7月天數(shù),夠減 MOV R2,A ;轉(zhuǎn)8月 LJMP M8 RM73: CJNE R3,#00H,RM74 ;R2減閏7月天數(shù) LJMP RY7 ;不夠減,判,R3為0否 RM74: MOV A,R2 ;不為0,R3加到R2中 ADD A,R3 ;再讓閏7月減 MOV R2,A ;還不夠,則轉(zhuǎn)RY7 MOV R3,#00H LJMP RM7 M8: MOV A,R2 ;R2減8月天數(shù) 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月天數(shù),夠減 MOV R2,A ;轉(zhuǎn)9月 LJMP M9 M82: CJNE R3,#00H,M83 ;R2減8月天數(shù) LJMP Y8 ;不夠減,判,R3為0否 M83: MOV A,R2 ;不為0,R3加到R2中 ADD A,R3 ;再讓8月減 MOV R2,A ;還不夠,則轉(zhuǎn)Y8 MOV R3,#00H LJMP M8 M9: MOV A,R2 ;R2減9月天數(shù) 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月天數(shù),夠減 MOV R2,A LJMP MM9 M92: CJNE R3,#00H,M93 ;R2減9月天數(shù) LJMP Y9 ;不夠減,判,R3為0否 M93: MOV A,R2 ;不為0,R3加到R2中 ADD A,R3 ;再讓9月減 MOV R2,A ;還不夠,則轉(zhuǎn)Y9 MOV R3,#00H LJMP M9 MM9: LCALL CHECKRE ;查9月,如果不為閏月 CJNE A,#09H,M10 ;轉(zhuǎn)10月 RM9: MOV A,R4 ;R2減閏9月天數(shù) ANL A,#0FH JNZ RM91 MOV A,R2 CLR C SUBB A,#30 MOV R1,A LJMP RM92 RM91: MOV A,R2 CLR C SUBB A,#29 MOV R1,A RM92: JC RM93 MOV A,R1 ;R2減閏9月天數(shù),夠減 MOV R2,A ;轉(zhuǎn)10月 LJMP M10 RM93: CJNE R3,#00H,RM94 ;R2減閏9月天數(shù) LJMP RY9 ;不夠減,判,R3為0否 RM94: MOV A,R2 ;不為0,R3加到R2中 ADD A,R3 ;再讓閏9月減 MOV R2,A ;還不夠,則轉(zhuǎn)RY9 MOV R3,#00H LJMP RM9 M10: MOV A,R2 ;R2減10月天數(shù) 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月天數(shù),夠減 MOV R2,A ;轉(zhuǎn)11月 LJMP M11 M102: CJNE R3,#00H,M103 ;R2減10月天數(shù) LJMP Y10 ;不夠減,判,R3為0否 M103: MOV A,R2 ;不為0,R3加到R2中 ADD A,R3 ;再讓10月減 MOV R2,A ;還不夠,則轉(zhuǎn)Y10 MOV R3,#00H LJMP M10 M11: MOV A,R2 ;R2減11月天數(shù) 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月天數(shù),夠減 MOV R2,A ;轉(zhuǎn)12月 LJMP M12 M112: CJNE R3,#00H,M113 ;R2減11月天數(shù) LJMP Y11 ;不夠減,判,R3為0否 M113: MOV A,R2 ;不為0,R3加到R2中 ADD A,R3 ;再讓11月減 MOV R2,A ;還不夠,則轉(zhuǎn)Y11 MOV R3,#00H LJMP M11 M12: MOV A,R2 ;R2減12月天數(shù) CLR C SUBB A,#29 MOV R1,A MOV A,R5 JB ACC.0,M121 CLR C MOV A,R2 SUBB A,#30 MOV R1,A M121: CJNE R3,#00H,M122 ;R2減12月天數(shù) LJMP Y12 ;不夠減,判,R3為0否 M122: MOV A,R2 ;不為0,R3加到R2中 ADD A,R3 ;再讓12月減 MOV R2,A ;還不夠,則轉(zhuǎn)Y12 MOV R3,#00H LJMP M12 Y1: MOV A,R2 MOV R0,A ;R2中為日的值 LCALL D_BCD MOV 56H,A MOV 57H,#01H CLR F0 ;非閏月 LJMP S_PLAY Y2: CJNE R2,#00H,Y21 MOV A,R6 ;R2中為0,則為前一個(gè)月 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,則為前一個(gè)月 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 ;查前一個(gè)月是否為閏月 CJNE A,#02H,Y32 MOV 56H,#29H ;前一個(gè)月是閏月 MOV A,R4 ANL A,#0FH ;R2中為0,則為前一個(gè)月 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 ;前一個(gè)月不是閏月 MOV A,R6 JB ACC.5,Y34 MOV 56H,#30H Y34: MOV 57H,#02H CLR F0 LJMP S_PLAY Y31: MOV A,R2 MOV R0,A ;R2中為日的值 LCALL D_BCD MOV 56H,A MOV 57H,#03H CLR F0 LJMP S_PLAY RY3: CJNE R2,#00H,RY31 MOV 56H,#29H MOV A,R6 JB ACC.4,RY32 ;R2中為0,則為前一個(gè)月 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 ;查前一個(gè)月是否為閏月 CJNE A,#03H,Y42 MOV 56H,#29H ;前一個(gè)月是閏月 MOV A,R4 ;R2中為0,則為前一個(gè)月 ANL A,#0FH ;的最后一天 JNZ Y43 MOV 56H,#30H MOV 57H,#03H SETB F0 LJMP S_PLAY Y43: MOV 57H,#03H SETB F0 LJMP S_PLAY Y42: MOV 56H,#29H ;前一個(gè)月不是閏月 MOV A,R6 JB ACC.4,Y44 MOV 56H,#30H Y44: MOV 57H,#03H CLR F0 LJMP S_PLAY Y41: MOV A,R2 ;R2中為日的值 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#04H CLR F0 LJMP S_PLAY RY4: CJNE R2,#00H,RY41 MOV 56H,#29H ;R2中為0,則為前一個(gè)月 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 ;查前一個(gè)月是否為閏月 CJNE A,#04H,Y52 MOV 56H,#29H ;前一個(gè)月是閏月 MOV A,R4 ;R2中為0,則為前一個(gè)月 ANL A,#0FH ;的最后一天 JNZ Y53 MOV 56H,#30H MOV 57H,#04H SETB F0 LJMP S_PLAY Y53: MOV 57H,#04H SETB F0 LJMP S_PLAY Y52: MOV 56H,#29H ;前一個(gè)月不是閏月 MOV A,R6 JB ACC.2,Y54 MOV 56H,#30H Y54: MOV 57H,#04H CLR F0 LJMP S_PLAY Y51: MOV A,R2 ;R2中為日的值 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#05H CLR F0 LJMP S_PLAY RY5: CJNE R2,#00H,RY51 MOV 56H,#29H ;R2中為0,則為前一個(gè)月 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 ;查前一個(gè)月是否為閏月 CJNE A,#05H,Y62 MOV 56H,#29H ;前一個(gè)月是閏月 MOV A,R4 ;R2中為0,則為前一個(gè)月 ANL A,#0FH ;的最后一天 JNZ Y63 MOV 56H,#30H MOV 57H,#05H SETB F0 LJMP S_PLAY Y63: MOV 57H,#05H SETB F0 LJMP S_PLAY Y62: MOV 56H,#29H ;前一個(gè)月不是閏月 MOV A,R6 JB ACC.1,Y64 MOV 56H,#30H Y64: MOV 57H,#05H CLR F0 LJMP S_PLAY Y61: MOV A,R2 ;R2中為日的值 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#06H CLR F0 LJMP S_PLAY RY6: CJNE R2,#00H,RY61 MOV 56H,#29H ;R2中為0,則為前一個(gè)月 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 ;查前一個(gè)月是否為閏月 CJNE A,#06H,Y72 MOV 56H,#29H ;前一個(gè)月是閏月 MOV A,R4 ;R2中為0,則為前一個(gè)月 ANL A,#0FH ;的最后一天 JNZ Y73 MOV 56H,#30H MOV 57H,#06H SETB F0 LJMP S_pLAY Y73: MOV 57H,#06H SETB F0 LJMP S_PLAY Y72: MOV 56H,#29H ;前一個(gè)月不是閏月 MOV A,R6 JB ACC.0,Y74 MOV 56H,#30H Y74: MOV 57H,#06H CLR F0 LJMP S_PLAY Y71: MOV A,R2 ;R2中為日的值 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#07H CLR F0 LJMP S_PLAY RY7: CJNE R2,#00H,RY71 MOV 56H,#29H ;R2中為0,則為前一個(gè)月 MOV A,R5 ;的最后一天 JB ACC.6,RY72 MOV 56H,#30H RY72: MOV 57H,#07H CLR F0 LJMP S_PLAY RY71: MOV A,R2 ;R2中為日的值 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#07H SETB F0 LJMP S_PLAY Y8: CJNE R2,#00H,Y81 LCALL CHECKRE ;查前一個(gè)月是否為閏月 CJNE A,#07H,Y82 MOV 56H,#29H ;前一個(gè)月是閏月 MOV A,R4 ;R2中為0,則為前一個(gè)月 ANL A,#0FH ;的最后一天 JNZ Y83 MOV 56H,#30H MOV 57H,#07H SETB F0 LJMP S_PLAY Y83: MOV 57H,#07H SETB F0 LJMP S_PLAY Y82: MOV 56H,#29H ;前一個(gè)月不是閏月 MOV A,R5 JB ACC.6,Y84 MOV 56H,#30H Y84: MOV 57H,#07H CLR F0 LJMP S_PLAY Y81: MOV A,R2 ;R2中為日的值 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#08H CLR F0 LJMP S_PLAY Y9: CJNE R2,#00H,Y91 MOV 56H,#29H ;R2中為0,則為前一個(gè)月 MOV A,R5 ;的最后一天 JB ACC.5,Y92 MOV 56H,#30H Y92: MOV 57H,#08H CLR F0 LJMP S_PLAY Y91: MOV A,R2 ;R2中為日的值 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#09H CLR F0 LJMP S_PLAY RY9: CJNE R2,#00H,RY91 MOV 56H,#29H ;R2中為0,則為前一個(gè)月 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 ;查前一個(gè)月是否為閏月 CJNE A,#09H,Y102 MOV 56H,#29H ;前一個(gè)月是閏月 MOV A,R4 ;R2中為0,則為前一個(gè)月 ANL A,#0FH ;的最后一天 JNZ Y103 MOV 56H,#30H MOV 57H,#09H SETB F0 LJMP S_PLAY Y103: MOV 57H,#09H SETB F0 LJMP S_PLAY Y102: MOV 56H,#29H ;前一個(gè)月不是閏月 MOV A,R5 JB ACC.4,Y104 MOV 56H,#30H Y104: MOV 57H,#09H CLR F0 LJMP S_PLAY Y101: MOV A,R2 ;R2中為日的值 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#10H CLR F0 LJMP S_PLAY Y11: CJNE R2,#00H,Y111 MOV 56H,#29H ;R2中為0,則為前一個(gè)月 MOV A,R5 ;的最后一天 JB ACC.2,Y112 MOV 56H,#30H Y112: MOV 57H,#10H CLR F0 LJMP S_PLAY Y111: MOV A,R2 ;R2中為日的值 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#11H CLR F0 LJMP S_PLAY Y12: CJNE R2,#00H,Y121 MOV 56H,#29H ;R2中為0,則為前一個(gè)月 MOV A,R5 ;的最后一天 JB ACC.1,Y122 MOV 56H,#30H Y122: MOV 57H,#11H CLR F0 LJMP S_PLAY Y121: MOV A,R2 ;R2中為日的值 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#12H CLR F0 LJMP S_PLAY S_PLAY: MOV R0,57H LCALL DIVIDE ;月分離送顯示緩存 MOV 52H,R1 MOV 53H,R2 MOV R0,56H LCALL DIVIDE ;日分離送顯示緩存 MOV 50H,R1 MOV 51H,R2 RET ;查是否閏月程序;; CHECKRE: MOV A,R4 SWAP A ANL A,#0FH RET ;10進(jìn)制轉(zhuǎn)換為BCD碼程序; D_BCD: MOV A,R0 MOV B,#10 DIV AB SWAP A ORL A,B RET ;~~~~~鬧鈴~~~~~~~~~~~~~~ NS: MOV A,75H SWAP A ADD A,74H MOV 12H,A MOV A,73H SWAP A ADD A,72H MOV 13H,A MOV A,71H SWAP A ADD A,70H MOV 14H,A SH1: MOV A,12H CJNE A,#07H,XH1 MOV A,13H CJNE A,#50H,XH1 MOV A,14H CJNE A,#00H,XH1 SETB P0.6 LCALL MPD RET XH1: CLR P0.6 MOV A,12H CJNE A,#08H,SH2 MOV A,13H CJNE A,#30H,SH2 MOV A,14H CJNE A,#00H,SH2 SETB P0.6 LCALL MPD RET SH2: MOV A,12H CJNE A,#08H,XH2 MOV A,13H CJNE A,#40H,XH2 MOV A,14H CJNE A,#00H,XH2 SETB P0.6 LCALL MPD RET XH2: CLR P0.6 MOV A,12H CJNE A,#09H,SH3 MOV A,13H CJNE A,#20H,SH3 MOV A,14H CJNE A,#00H,SH3 SETB P0.6 LCALL MPD RET SH3: MOV A,12H CJNE A,#09H,XH3 MOV A,13H CJNE A,#40H,XH3 MOV A,14H CJNE A,#00H,XH3 SETB P0.6 LCALL MPD RET XH3: CLR P0.6 MOV A,12H CJNE A,#10H,SH4 MOV A,13H CJNE A,#20H,SH4 MOV A,14H CJNE A,#00H,SH4 SETB P0.6 LCALL MPD RET SH4: MOV A,12H CJNE A,#10H,XH4 MOV A,13H CJNE A,#30H,XH4 MOV A,14H CJNE A,#00H,XH4 SETB P0.6 LCALL MPD RET XH4: CLR P0.6 MOV A,12H CJNE A,#11H,SH5 MOV A,13H CJNE A,#10H,SH5 MOV A,14H CJNE A,#00H,SH5 SETB P0.6 LCALL MPD RET SH5: MOV A,12H CJNE A,#11H,XH5 MOV A,13H CJNE A,#20H,XH5 MOV A,14H CJNE A,#00H,XH5 SETB P0.6 LCALL MPD RET XH5: CLR P0.6 MOV A,12H CJNE A,#12H,XSH1 MOV A,13H CJNE A,#00H,XSH1 MOV A,14H CJNE A,#00H,XSH1 SETB P0.6 LCALL MPD RET XSH1: MOV A,12H CJNE A,#15H,XXH1 MOV A,13H CJNE A,#00H,XXH1 MOV A,14H CJNE A,#00H,XXH1 SETB P0.6 LCALL MPD RET XXH1: CLR P0.6 MOV A,12H CJNE A,#15H,XSH2 MOV A,13H CJNE A,#40H,XSH2 MOV A,14H CJNE A,#00H,XSH2 SETB P0.6 LCALL MPD RET XSH2: MOV A,12H CJNE A,#15H,XXH2 MOV A,13H CJNE A,#50H,XXH2 MOV A,14H CJNE A,#00H,XXH2 SETB P0.6 LCALL MPD RET XXH2: CLR P0.6 MOV A,12H CJNE A,#16H,XSH3 MOV A,13H CJNE A,#30H,XSH3 MOV A,14H CJNE A,#00H,XSH3 SETB P0.6 LCALL MPD RET XSH3: MOV A,12H CJNE A,#16H,XXH3 MOV A,13H CJNE A,#40H,XXH3 MOV A,14H CJNE A,#00H,XXH3 SETB P0.6 LCALL MPD RET XXH3: CLR P0.6 MOV A,12H CJNE A,#17H,ZZ2 MOV A,13H CJNE A,#20H,ZZ2 MOV A,14H CJNE A,#00H,ZZ2 SETB P0.6 LCALL MPD ZZ2: RET MPD: MOV A,14H CJNE A,#10H,ZZ2 CLR P0.6 RET ;;顯示程序;;; DISPLAY: MOV A,10H ANL A,#00001111B MOV 59H,A MOV A,76H ;第八列LED ANL A,#00001111B SWAP A ADD A,59H MOV P1,A MOV A,70H ANL A,#00001111B ADD A,#00000000B MOV P2,A LCALL DL1MS MOV A,10H ANL A,#11110000B SWAP A MOV 5AH,A MOV A,77H ;第七列LED ANL A,#00001111B SWAP A ADD A,5AH MOV P1,A MOV A,71H ANL A,#00001111B ADD A,#00010000B MOV P2,A LCALL DL1MS MOV A,56H ;第六列LED SWAP A ANL A,#11110000B ADD A,79H SWAP A MOV P1,A MOV A,72H ANL A,#00001111B ADD A,#00100000B MOV P2,A LCALL DL1MS MOV A,56H ;第五列LED ANL A,#11110000B ADD A,7AH SWAP A MOV P1,A MOV A,73H ANL A,#00001111B ADD A,#00110000B MOV P2,A LCALL DL1MS MOV A,57H ;第四列LED SWAP A ANL A,#11110000B ADD A,7BH SWAP A MOV P1,A MOV A,74H ANL A,#00001111B ADD A,#01000000B MOV P2,A LCALL DL1MS MOV A,57H ;第三列LED ANL A,#11110000B ADD A,7CH SWAP A MOV P1,A MOV A,75H ANL A,#00001111B ADD A,#01010000B MOV P2,A LCALL DL1MS MOV P1,#00001111B MOV P2,#01101111B ;第二列LED LCALL DL1MS MOV A,78H ;第一列LED ANL A,#00001111B ADD A,#00100000B MOV P1,A MOV P2,#01111111B LCALL DL1MS MOV P1,#0FFH RET ZJ: MOV 01H,#150 ZZZ1: MOV P2,#00001000B MOV P1,#88H LCALL DL1MS MOV P2,#00011000B MOV P1,#88H LCALL DL1MS MOV P2,#00101000B MOV P1,#88H LCALL DL1MS MOV P2,#00111000B MOV P1,#88H LCALL DL1MS MOV P2,#01001000B MOV P1,#88H LCALL DL1MS MOV P2,#01011000B MOV P1,#88H LCALL DL1MS MOV P2,#01101000B MOV P1,#88H LCALL DL1MS MOV P2,#01111000B MOV P1,#88H LCALL DL1MS DJNZ 01H,ZZZ1 MOV P1,#0FFH RET DL1MS: MOV R6,#14H DL1: MOV R7,#19H DL2: DJNZ R7,DL2 DJNZ R6,DL1 RET ;數(shù)據(jù)表~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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,22H,00H DB 25,15H,24H,51H,44,05H,52H,00H,33,22H,65H,00H DB 22,21H,25H,41H,40,24H,52H,00H,30,52H,42H,91H DB 49,55H,05H,00H,38,26H,44H,00H,27,53H,50H,60H DB 46,53H,24H,00H,35,25H,54H,00H,24,41H,52H,41H DB 42,45H,25H,00H,31,24H,52H,00H,21,51H,12H,21H DB 40,55H,11H,00H,28,26H,21H,61H,47,26H,61H,00H DB 36,13H,31H,00H,25,05H,31H,51H,43,12H,54H,00H DB 33,51H,25H,00H,22,42H,25H,31H,41,32H,22H,00H DB 30,55H,02H,71H,49,55H,22H,00H,38,26H,62H,00H DB 27,13H,64H,60H,45,13H,32H,00H,34,12H,55H,00H DB 23,10H,53H,51H,42,22H,45H,00H,31,52H,22H,00H DB 21,52H,44H,21H,40,55H,44H,00H,29,26H,50H,71H DB 47,26H,64H,00H,36,25H,32H,00H,25,23H,32H,50H DB 44,44H,55H,00H,32,24H,45H,00H,22,55H,11H,30H END ;******************************************************** 電子萬(wàn)年歷SCH: temp_08012317341108.rar
電子萬(wàn)年歷設(shè)計(jì)報(bào)告書(shū): temp_08012317348943.rar
多功能電子萬(wàn)年歷ASM: temp_08012317353959.rar
|