单片机程序设计_基于单片机控制的电子万年历_.docx_第1页
单片机程序设计_基于单片机控制的电子万年历_.docx_第2页
单片机程序设计_基于单片机控制的电子万年历_.docx_第3页
单片机程序设计_基于单片机控制的电子万年历_.docx_第4页
单片机程序设计_基于单片机控制的电子万年历_.docx_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

烟台南山学院单片机课程设计姓 名: 学 号: 专业班级: 指导老师: 2011年 月 日目 录前言.1课程设计题目要求.2总体设计.3硬件电路设计.4源程序.4仿真.11心得体会.12参考文献.13 前言 在生活和生产的各领域中,凡是有自动控制要求的地方都有单片机的身影出现,从简单到复杂,从空中到地下凡是能想象到的地方几乎都用单片机现在 尽管单片机的应用已经很普遍,但是仍有许多可以用的单片机而尚未实现的项目,因此,单片机的应用大有想象和拓展空间,单片机的应用有利于产品的小型化,多功能化和智能化,有助于提高劳动效率。减轻劳动强度提高产品质量,改善劳动环境,减少能源和材料消耗,保证安全等。但单片机的应用的意义绝不仅限于他的广阔范围以及所带来的经济效益上。更重要的意义还在于单片机的应用从根本上改变着传统控制系统设计,思想和设计方法。从前必须有模拟电路或数字电路的大部分功能现在已经使用单片机通过软件方法实现了。这种技术成为微控制技术。微控制技术是一种全新的技术,是一次革命,随着单片机的,推广普及。微控制技术必将不断发展,日益完善和更加充实。 课程设计题目要求 电子万年历能显示阳历年月日小时分钟秒。按照系统设计功能的要求,初步确定系统有主控制模块时钟模块显示模块,和键盘接口模块四个模块组成。主控制芯片使用51系列的AT89C52单片机,时钟芯片时钟美国DELLASA公司推出的一种高性能,低功能。带RAM的实时时钟DS1302,采DS1302作为及时芯片,可以做到几时准备更重要的是,DA1302可以再很小的电流的储备电源下工作。而且DS1302可以变成选择多种充电电流来对后辈电源进行慢速充电,可以保证后备电源基本不消耗电。显示模块采用普通的共阳极LED数码管。键输入采用查询法实现功能调整。 总体设计1主控制器AT89C528KB FLASH ROM 可以擦除1000次以上,数据保存10年,256字节内部RAM时钟可以停止回复空闲模式掉电模式6各中断源。四个终端优先级2时钟电路DS1302DS1302再任何数据传送时必须先初始化,把RST脚置高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被访问再开始的8各时钟周期把命令字节装入移位寄存器后,另外的始终的个数再单字节下位8+8。再多字节工作方式下8+字节最多可达248字节数。3显示电路显示部分采用普通的共阳极数码管显示,采用动态扫描以减少硬件电路考虑到一次扫鸟19位数码管显示时会出现闪烁情况,没有及时19各数码管分三排同时扫描,第一排6个数码显示管,分别为年的各位年的十位百位千位4电路原理及说明 DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置 “0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图4所示。图5为DS1302的控制字,此控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。表6为DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。5如图2-6所示,采用动态扫描显示,由个数码管,3-8译码器74LS138接1K限流电阻,再接8550三极管接到共阳数码管的CoM端作为选通位码,每位选择相应的列。74ls47接240限流电阻,再接共行的LED数码管的断码。3.1程序流程框图置阳历总天数当前月加1总天数中加入该月天数月加与当前月同?总天数中加入号计算阳历天数结束,总天数中的数据为当前日期在阳历中的第几天当前号数是总天数开始开始初始化读、写日期、时间和温度分离日期时间温度显示值显示子程序农历自动更新子程序日期、时间修改子程序闰月子程返回定时闹铃子程序图3-1 主程序流程图 图3-2计算阳历程序流程图图3-3 时间调整程序流程图 硬件 源程序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 INTT1START: ;初值 LCALL ZJ SETB EA MOV SCON,#00H ; 串行输出,方式0 MOV TMOD,#10H ;计数器1,方式1 MOV TL1,#00H MOV TH1,#00H MOV 32H,#8EH MOV 31H,#00H ;允许写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 ;读出小时 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 ;小时分离,送显示缓存 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 SETB EA LCALL DISPLAY LCALL GENGXIAN ;更新农历程序 JNB P0.1,SETG111 JNB F0,SSS setb P0.4 ;非闰月,则p0.4清零,指示灯亮 LJMP MAIN1SETG111: LJMP SETGSSS: 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 RETCHUSHI: LCALL RESET MOV A,#0CCH LCALL WRITE111 MOV A,#4EH LCALL WRITE111 MOV A,#CONFIG12 LCALL WRITE111 RETRDTEMP: 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 RETRESET:LA: SETB DAT MOV 52H,#200LB: CLR DAT DJNZ 52H,LB SETB DAT MOV 52H,#30LC: DJNZ 52H,LC CLR C ORL C,DAT JC LB MOV 58H,#80LD: ORL C,DAT JC LP DJNZ 58H,LD SJMP LALP: MOV 52H,#250LF: DJNZ 52H,LF RETWRITE111: MOV 53H,#8W51HA: SETB DAT MOV 54H,#8 RRC A CLR DATW52HA: DJNZ 54H,W52HA MOV DAT,C MOV 54H,#30W53HA: DJNZ 54H,W53HA DJNZ 53H,W51HA SETB DAT RETERAD111: CLR EA MOV 58H,#8RD1A: CLR DAT MOV 54H,#6 NOP SETB DATRD2A: DJNZ 54H,RD2A MOV C,DAT RRC A MOV 55H,#30RD3A: DJNZ 55H,RD3A DJNZ 58H,RD1A SETB DAT RET;公历设置程序SETG : SETB TR1 SETB ET1 MOV 32H,#8EH MOV 31H,#00H ;允许写1302 LCALL WRITE MOV 32H,#80H MOV 31H,#80H ;1302停止振荡 LCALL WRITEGWAIT: ; LCALL DISPLAY JNB P0.1,GWAITSETG1: LCALL DISPLAY JNB P0.1,SETG2 JNB P0.2,GADDYEAR JNB P0.3,JIANYEAR AJMP SETG1GADDYEAR: MOV R7,66H ;年加一 LCALL ADD1 MOV 66H,A CJNE A,#51H,GADDYEAR1 MOV 66H,#00H AJMP GADDYEAR1JIANYEAR: MOV R7,66H ;年减一 LCALL JIAN1 MOV 66H,A CJNE A,#00H,GADDYEAR1 MOV 66H,#51HGADDYEAR1: 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,R2WAITT1: ; LCALL DISPLAY JNB P0.2,WAITT1 JNB P0.3,WAITT1 AJMP SETG1SETG2: SETB 0AH ;调月时闪标志GWAIT2: LCALL DISPLAY JNB P0.1,GWAIT2SETG3: LCALL DISPLAY JNB P0.1,SETG4 JNB P0.2,GADDMONTH JNB P0.3,JIANMONTH AJMP SETG3GADDMONTH: MOV R7,65H ;月加一 LCALL ADD1 MOV 65H,A CJNE A,#13H,GADDMONTH1 MOV 65H,#01H AJMP GADDMONTH1JIANMONTH: MOV R7,65H ;月减一 LCALL JIAN1 MOV 65H,A CJNE A,#00H,GADDMONTH1 MOV 65H,#12HGADDMONTH1: 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,R2WAITT2: ; LCALL DISPLAY JNB P0.2,WAITT2 JNB P0.3,WAITT2 AJMP SETG3SETG4: SETB 0BH ;调日时闪标志GWAIT4: LCALL DISPLAY JNB P0.1,GWAIT4SETG5: LCALL DISPLAY JNB P0.1,SETG6 JNB P0.2,GADDDAY JNB P0.3,JIANDAY AJMP SETG5GADDDAY: MOV R7,63H ;日加一 LCALL ADD1 MOV 63H,A CJNE A,#32H,GADDDAY1 MOV 63H,#01HJIANDAY: MOV R7,63H ;日减一 LCALL JIAN1 MOV 63H,A CJNE A,#00H,GADDDAY1 MOV 63H,#31HGADDDAY1: 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,R2WAITT3: ; LCALL DISPLAY JNB P0.2,WAITT3 JNB P0.3,WAITT3 AJMP SETG5SETG6: SETB 0CH ;调星期时闪标志GWAIT6: LCALL DISPLAY JNB P0.1,GWAIT6SETG7: LCALL DISPLAY JNB P0.1,SETG8 JNB P0.2,GADDWEEK JNB P0.3,JIANWEEK AJMP SETG7GADDWEEK: MOV R7,64H ;星期加一 LCALL ADD1 MOV 64H,A CJNE A,#07H,GADDWEEK1 MOV 64H,#00H AJMP GADDWEEK1JIANWEEK: MOV R7,64H ;星期减一 LCALL JIAN1 MOV 64H,A CJNE A,#00H,GADDWEEK1 MOV 64H,#06HGADDWEEK1: MOV 32H,#8AH MOV 31H,64H ;星期值送人1302 LCALL WRITE MOV R0,64H LCALL DIVIDE ;星期值分离送显示缓存 MOV 48H,R1 MOV 78H,R1WAITT4: ; LCALL DISPLAY JNB P0.2,WAITT4 JNB P0.3,WAITT4 AJMP SETG7SETG8: SETB 0DH ;调小时时闪标志GWAIT8: LCALL DISPLAY JNB P0.1,GWAIT8SETG9: LCALL DISPLAY JNB P0.1,SETG10 JNB P0.2,GADDHOUR JNB P0.3,JIANHOUR AJMP SETG9GADDHOUR: MOV R7,62H ;小时加一 LCALL ADD1 MOV 62H,A CJNE A,#24H,GADDHOUR1 MOV 62H,#00H AJMP GADDHOUR1JIANHOUR: MOV R7,62H ;小时减一 LCALL JIAN1 MOV 62H,A CJNE A,#00H,GADDHOUR1 MOV 62H,#23HGADDHOUR1: MOV 32H,#84H ;小时值送人1302 MOV 31H,62H LCALL WRITE MOV R0,62H LCALL DIVIDE ;小时值分离送显示缓存 MOV 74H,R1 MOV 44H,R1 MOV 75H,R2 MOV 45H,R2WAITT5: ; LCALL DISPLAY JNB P0.2,WAITT5 JNB P0.3,WAITT5 AJMP SETG9SETG10: SETB 0EH ;调分时候闪标志GWAIT10: LCALL DISPLAY JNB P0.1,GWAIT10SETG11: LCALL DISPLAY JNB P0.1,SETGOUT JNB P0.2,GADDMINTUE JNB P0.3,JIANMINTUE AJMP SETG11GADDMINTUE: MOV R7,61H ;分钟加一 LCALL ADD1 MOV 61H,A CJNE A,#60H,GADDMINTUE1 MOV 61H,#00H AJMP GADDMINTUE1JIANMINTUE: MOV R7,61H ;分钟减一 LCALL JIAN1 MOV 61H,A CJNE A,#00H,GADDMINTUE1 MOV 61H,#59HGADDMINTUE1: 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,R2WAITT6: LCALL DISPLAY JNB P0.2,WAITT6 JNB P0.3,WAITT6 AJMP SETG11SETGOUT: LCALL DISPLAY JNB P0.1,SETGOUT LCALL GENGXIAN MOV 32H,#80H MOV 31H,#00H ;1302晶振开始振荡 LCALL WRITE MOV 32H,#8EH MOV 31H,#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 PSWGFLASH: 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,40HGFLASHOUT: POP PSW POP ACC RETIGFLASH1: JB 0AH,GFLASH2 ;调年闪 MOV 7CH,#0FH MOV 7BH,#0FH AJMP GFLASHOUTGFLASH2: JB 0BH,GFLASH3 ;调月闪 MOV 7AH,#0FH MOV 79H,#0FH AJMP GFLASHOUTGFLASH3: JB 0CH,GFLASH4 ;调日闪 MOV 77H,#0FH MOV 76H,#0FH AJMP GFLASHOUTGFLASH4: JB 0DH,GFLASH5 ;调星期闪 MOV 78H,#0FH AJMP GFLASHOUTGFLASH5: JB 0EH,GFLASH6 ;调小时闪 MOV 75H,#0FH MOV 74H,#0FH AJMP GFLASHOUTGFLASH6: MOV 73H,#0FH ;调分钟闪 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,#49HKK1: CJNE A,#3FH,KK2 MOV A,#39HKK2: CJNE A,#2FH,KK3 MOV A,#29HKK3: CJNE A,#1FH,KK4 MOV A,#19HKK4: CJNE A,#0FH,KK5 MOV A,#09HKK5: 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,32H MOV R4,#8WRITE1: 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,#8WRITE2: 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,32H MOV R4,#8READ1: RRC A ;送地址给1302 NOP MOV IO,C NOP NOP NOP SETB SCLK NOP NOP NOP CLR SCLK NOP NOP DJNZ R4,READ1 MOV R4,#8READ2: CLR SCLK NOP ;从1302中读出数据 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码转换为10进制程序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 ;第一字节送R7 INC R1 MOV A,R1 MOVC A,A+DPTR MOV R6,A ;第二字节送R6 INC R1 MOV A,R1 MOVC A,A+DPTR MOV R5,A ;第三字节送R6 INC R1 MOV A,R1 MOVC A,A+DPTR MOV R4,A ;第四字节送R4 RET;自动更新农历GENGXIAN: MOV R2,#00H MOV R3,#00H MOV A,month CJNE A,#01H,GM2 MOV R0,day ;当前月为一月 LCALL BCD_10 ;当前日转换为10进制,送R2 MOV A,R0 MOV R2,A AJMP TIAOZHENG1GM2: CJNE A,#02H,GM3 MOV R0,day ;当前月为二月 LCALL BCD_10 ;当前日转换为10进制, MOV A,R0 ;再加31,送R2 ADD A,#31 MOV R2,A AJMP TIAOZHENG1GM3: CJNE A,#03H,GM4 MOV R0,day ;当前月为三月 LCALL BCD_10 ;当前日转换为10进制, MOV A,R0 ;再加59,送R2 ADD A,#59 MOV R2,A AJMP TIAOZHENG1GM4: CJNE A,#04H,GM5 MOV R0,day ;当前月为四月 LCALL BCD_10 ;当前日转换为10进制, MOV A,R0 ;再加90,送R2 ADD A,#90 MOV R2,A AJMP TIAOZHENG1GM5: CJNE A,#05H,GM6 MOV R0,day ;当前月为五月 LCALL BCD_10 ;当前日转换为10进制, MOV A,R0 ;再加120,送R2 ADD A,#120 MOV R2,A AJMP TIAOZHENG1GM6: CJNE A,#06H,GM7 MOV R0,day ;当前月为六月 LCALL BCD_10 ;当前日转换为10进制, MOV A,R0 ;再加151,送R2 ADD A,#151 MOV R2,A AJMP TIAOZHENG1GM7: CJNE A,#07H,GM8 MOV R0,day ;当前月位七月 LCALL BCD_10 ;当前日转换为10进制, MOV A,R0 ;再加181,送R2 ADD A,#181 MOV R2,A AJMP TIAOZHENG1GM8: CJNE A,#08H,GM9 MOV R0,day ;当前月为八月 LCALL BCD_10 ;当前日转换为10进制, MOV A,R0 ;再加212,送R2 ADD A,#212 MOV R2,A AJMP TIAOZHENG1GM9: CJNE A,#09H,GM10 MOV R0,day ;当前月为九月 LCALL BCD_10 ;当前日转换为10进制, MOV A,R0 ;再加243 CLR C ADD A,#243 JC GGG MOV R2,A ;A没有溢出,送R2 AJMP TIAOZHENG1GGG: MOV R3,#0FFH ;A溢出,A加一送R2 INC A ;R3中送#0ffh MOV R2,A AJMP TIAOZHENG1GM10: CJNE A,#10H,GM11 MOV R0,day ;当前月为10月 LCALL BCD_10 ;当前日转换为10进制, MOV A,R0 ;再加18,送R2 ADD A,#18 ;R3中送0FFH MOV R2,A MOV R3,#0FFH AJMP TIAOZHENG1GM11: CJNE A,#11H,GM12 MOV R0,day ;当前月为11月 LCALL BCD_10 ;当前日转换为10进制, MOV A,R0 ;再加49,送R2 ADD A,#49 ;R3中送0FFH MOV R2,A MOV R3,#0FFH AJMP TIAOZHENG1GM12: MOV R0,day ;当前月为12月 LCALL BCD_10 ;当前日转换为10进制, 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 ;当前年为闰年 CJNE A,#01H,AAAA AJMP GGG1 ;当前月是1AAAA: CJNE A,#02H,BBBB AJMP GGG1 ;当前月是2BBBB: CJNE R2,#0FFH,GGG2 MOV R3,#0FFH ;当前月不是1和2, MOV R2,#01H ;R1和R2总和加一 AJMP GGG1GGG2: INC R2GGG1: MOV R0,year ;查一年数据 LCALL CHECKMONTH MOV A,R2 CLR C SUBB A,R7 MOV P0.5,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_PLAYGGG3: CJNE A,#00H,GGG6 MOV R2,A AJMP OLDGGG6: JNB P0.5,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 NEWGGG5: MOV A,R7 MOV R2,A AJMP OLDNEW1: MOV R2,#0FFH MOV R3,#01H AJMP NEWNEW2: MOV R2,A MOV A,R3 CJNE A,#0FFH,GGG4 MOV A,R2 MOV R3,A MOV R2,#0FFHGGG4: AJMP NEW; OLD农历为公历的前一年OLD: MOV A,year DEC A MOV R0,A LCALL CHECKMONTH MOV A,R2 CLR C SUBB A,#29 MOV P0.5,C MOV R6,A MOV A,R5 JB ACC.0,AAA ;12月为小月,转到AAA MOV A,R2 CLR C SUBB A,#30 MOV P0.5,C MOV R6,AAAA: 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月30CCC: MOV 57H,#11H LJMP S_PLAYBBB: JNB P0.5, 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,AEEE: MOV A,R4 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#12H LJMP S_PLAYDDD: 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,AFFF: MOV A,R1 MOV R0,A LCALL D_BCD MOV 56H,A MOV 57H,#11H LJMP S_PLAY;农历和公历为同一年,;NEW此时R2中的值为FFH时,R3有值,否则为0NEW: NOPM1: MOV A,R2 ;R2减一月天数 CLR C SUBB A,#29 MOV R1,A MOV A,R6 JB ACC.6,SM11 MOV A,R2 CLR C SUBB A,#30 MOV R1,ASM11: JC SM12 MOV A,R1 ;R2减1月天数,够减 MOV R2,A ;转二月 AJMP M2SM12: CJNE R3,#00H,M13 ;R2减1月天数 LJMP Y1 ;不够减,判R3为0否M13: MOV A,R2 ;不为0,R3加到R2中 ADD A,R3 ;再让一月减 MOV R2,A ;还不够,则转Y1 MOV R3,#00H AJMP M1M2: CLR C ;R2减一月天数,够减 MOV A,R2 ;转三月 SUBB A,#29 MOV R1,A MOV A,R6 JB ACC.5,M21 MOV A,R2 CLR C SUBB A,#30 MOV R1,AM21: JC M22 MOV A,R1 ;R2减2月天数,够减 MOV R2,A AJMP MM2M22: CJNE R3,#00H,M23 ;R2减2月天数 LJMP Y2 ;不够减,判,R3为0否M23: MOV A,R2 ;不为0,R3加到R2中 ADD A,R3 ;再让二月减 M

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论