




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
论文基于51单片机电子 万年历 论文(定稿) 基于51单片机电子万年历毕业论文摘要电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。 它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。 对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。 该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用35V电压供电。 本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。 在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。 在硬件与软件设计时,没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要那种硬件,程序该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。 在编写程序过程中发现以现有的相关知识要独自完成编写任务困难重重,在老师和同学的帮助下才完成了程序部分的编写。 万年历的设计过程在硬件与软件方面进行同步设计。 硬件部分主要由AT89C52单片机,LED显示电路,以及调时按键电路等组成。 在单片机的选择上本人使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。 显示器使用2片7SEG-MPX8-CA和一片7SEG-MPX4-CA。 7SEG-MPX8-CA是一种八个共阳二极管显示器,7SEG-MPX4-CA是一种四个共阳二极管显示器。 为了能更轻松的控制这三片显示器,本人使用了3片74HC164来驱动。 74HC164是8位边沿触发式移位寄存器,串行输入数据,然后并行输出。 软件方面主要包括日历程序、时间调整程序,公历转阴历程序,显示程序等。 程序采用汇编语言编写,以便更简单地实现调整时间及阴历显示功能。 所有程序编写完成后,在wave软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。 最后总在老师同学的帮助以及自己的努力下完成了此次电子万年历的设计。 关键词时钟电钟;DS1302;DS18B20;动态扫描;单片机El ectronic:calendar isa veryextensive dailytiming toolfor modernsociety ismore andmore popular.It can be toyear,month,day,Sunday,when,minutes andseconds forthe time,also hasa leapyear pensationand otherfunctions,and theDS1302long servicelife andsmall error.For digitalelectronic calendarusing intuitivedigital display,can alsoshows thatyear,month,day,Sunday,when,minutes andseconds andtemperature,information,but alsohas timecalibration etc.Function.This circuitAT89S52SCM asthe core,power consumptionis small,canbein3V oflow-pressure work,voltage canchoose35V voltagepower supply.This designis basedon the single chip microputer51series ofelectronic calendardesign,can displaydate andweeks determinedwhen information,which canadjust thedate andtime of the function.In the design ofthe single chip microputerand thetheory foundationand peripheralexpansion paredto prehensiveknowledge.In thehardware andsoftware design,no goodbasic knowledgeand practicalexperience isvery limited,every functionimplementation needthat kindof hardware,and the program thishow towrite,how torealize thealgorithm,not afoundation willnot bevery goodimplementation.In theprogramming processfound onexisting knowledgeto finishwriting taskdifficult,the teachersand studentsof helpto finishtheprogrampart ofthe code.The designprocess ofthe calendarin thehardware andsoftware designof synchronization.Mainly byAT89C52single chip microputer hardwarepart,LED displaycircuit,and whenthe keycircuits etc.The processoron thechoice ofAT89C52singlechipI used,the singlechip microputersuitable formany moreplex controlapplications.Monitor USES2slices of7SEG-MPX8-CA anda pieceof7SEG-MPX4-CA.7SEG-MPX8-CA isa kindof eightwere Yangled display,7SEG-MPX4-CA isa kindof fourwere Yangled display.In orderto moreeasily controlthe threepieces ofthe display,I usethree ofthe74HC164to drive.74HC164is eightedge triggeredthe shiftregister,serial inputdata,then paralleloutput.Software ismainly includingcalendar program,time toadjust program,turn the lunar calendarprogram,show program,etc.The assemblerprogram language,so thatmore implementedsimply adjusttime andthelunarcalendar displayfunction.All programming,after thepletion ofwave softwaredebugging in,make sureno,after Proteussoftware embeddedin withinthesinglechipmicroputersimulation.The lasttotal inthe teachersand classmateshelp andtheir effortsto pletethedesignoftheelectronic calendar.Key words:The clockDianZhong;DS1302;DS18B20;Dynamic scanning;Single-chipmicroputer目录摘要(中文)摘要(英文)引言第一章设计要求与方案论证1.1设计要求1.2系统基本方案选择和论证1.2.1单片机芯片的选择方案和论证1.2.2显示模块选择方案和论证1.2.3时钟芯片的选择方案和论证第二章系统的硬件设计与实现2.1电路设计框图2.2系统硬件概述2.3主要单元电路的设计2.3.1单片机主控制模块的设计2.3.2时钟电路模块的设计2.3.3电路原理及说明2.34显示模块的设计第三章系统的软件设计3.1程序流程框图3.2子程序的设计3.2.1读、写DS1302子程序总结致谢词参考文献附录一系统电路图附录二系统程序清单附录三系统使用说明书第一章设计要求与方案论证1.1设计要求()基本要求具有年、月、日、星期、时、分、秒等功能;万年历具有闰月识别显示功能;具备年、月、日、星期、时、分、秒校准功能; (2)创新要求万年历具有阴历显示功能;具有测量室内温度功能;1.2系统基本方案选择和论证1.2.1单片机芯片的选择方案和论证方案一:采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。 方案二:采用AT89S52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。 所以选择采用AT89S52作为主控制系统.1.2.2显示模块选择方案和论证方案一采用LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用LED液晶显示屏.方案二采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示.方案三采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。 所以采用了LED数码管作为显示。 1.2.3时钟芯片的选择方案和论证方案一直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。 采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。 所以不采用此方案。 方案二采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V5.5V范围内,2.5V时耗电小于300nA.1.3电路设计最终方案决定综上各方案所述,对此次作品的方案选定:采用AT89S52作为主控制系统;DS1302提供时钟;数字式温度传感器;LED数码管动态扫描作为显示。 二.系统的硬件设计与实现2.1电路设计框图2.2系统硬件概述本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。 采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。 DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。 可产生年、月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;温度的AT89S52主控制模块DS1302时钟模块LED数码管动态扫描显示模块键盘模块采集由DS18B20构成;显示部份由个数码管,74ls 138、74ls47译码器构成。 使用动态扫描显示方式对数字的显示。 2.3主要单元电路的设计2.3.1单片机主控制模块的设计AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P 0、P 1、P 2、P3),每一条I/O线都能独立地作输出或输入。 单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端.如图-1所示图-1主控制系统2.3.2时钟电路模块的设计图-2示出DS1302的引脚排列,其中V1为后备电源,V2为主电源。 在主电源关闭的情况下,也能保持时钟的连续运行。 DS1302由V1或V2两者中的较大者供电。 当V2大于V1+0.2V时,V2给DS1302供电。 当V2小于V1时,DS1302由V1供电。 X1和X2是振荡源,外接32.KHz晶振。 RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。 RST输入有两种功能首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。 当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。 如果在传送过程中RSTS置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。 上电动行时,在V大于等于2.5V之前,RST必须保持低电平。 中有在SCLK为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。 SCLK始终是输入端。 图-2DS1302的引脚图2.3.3电路原理及说明 (1)时钟芯片DS1302的工作原理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时,写保护位防止对任一寄存器的写操作。 (2)DS1302的控制字节DS1302的控制字如表-1所示。 控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出RAM RD1A4A3A2A1A0/CK/WR表-1DS1302的控制字格式 (3)数据输入输出(I/O)在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。 同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。 如下图-4所示图-4DS1302读/写时序图 (4)DS1302的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表-2。 表-2DS1302的日历、时间寄存器此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。 时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 2.3.4显示模块的设计如图5所示,采用动态扫描显示,由个数码管,3-8译码器74LS138接1K限流电阻,再接8550三极管接到共阳数码管的CoM端作为选通位码,每位选择相应的列。 74ls47接240限流电阻,再接共行的LED数码管的断码。 图-5LED动态扫描显示 三、系统的软件设计3.1程序流程框图开始初始化读、写日期、时间和温度分离日期时间温度显示值显示子程序农历自动更新子程序日期、时间修改子程序闰月子程定时闹铃子程序图-A主程序流程图图-B计算阳历程序流程图图-C时间调整程序流程图3.2子程序的设计3.2.1读、写DS1302子程序;写1302程序WRITE:CLR SCLK NOP SETB RST NOP MOV A,32H MOV R4,#8WRITE1:RRC A;送地址给1302NOP NOP CLR SCLK NOP NOP NOP MOV IO,C NOP NOP NOP SETB SCLKNOP NOP DJNZ R4,WRITE1CLR SCLKNOP MOV A,31H MOV R4,#8WRITE2:RRC ANOP;送数据给1302CLR SCLKNOP NOP MOV IO,C NOP NOP NOP SETB SCLKNOP NOP DJNZ R4,WRITE2CLR RST RET;读1302程序READ:CLR SCLKNOP NOPSETB RST NOP MOV A,32H MOV R4,#8READ1:RRC A;送地址给1302NOP MOVIO,C NOP NOP NOPSETB SCLKNOP NOP NOP CLR SCLKNOP NOP DJNZ R4,READ1MOV R4,#8READ2:CLR SCLKNOP;从1302中读出数据NOP NOP MOV C,IO NOP NOP NOP NOP NOPRRC ANOP NOP NOP NOPSETB SCLKNOP DJNZ R4,READ2MOV31H,A CLR RST RET 五、作品总结在整个设计过程中,发挥团队精神,分工合作,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识。 较好的完成了作品。 达到了预期的目的,在最初的设计中,发挥“三个臭皮匠,顶个诸葛亮”的作用。 相互学习、相互讨论、研究。 完了最初的设想。 在电路焊接时虽然没什么大问题,但从中也知道了焊接在整个作品中的重要性,电路工程量大,不能心急,一个个慢慢来不能急于求成。 反而达到事半功倍的效果。 对电路的设计、布局要先有一个好的构思,才显得电路板美观、大方。 程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,和同组员的讨论,理清了思路,反而得心应手。 在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,一步一脚印。 也练就了我们的耐心,做什么事都在有耐心。 此次比赛中学到了很多很多东西,这是最重要的。 总之,参加电子竞赛我们的能力得到了全方位的提高。 致谢词感谢学院给我们提供了一个展现自己的舞台,给我们一次难得煅炼的机会,使得我们的动手能力和专业技能都有了很大的提高。 在做作品的日子里得到了刘老师的悉心指导,在此向我们的指导教师致以诚挚的谢意。 感谢提供相关技术帮助的老师和同学,你们的支持和鼓励使我们对这次的作品完成有了信心和动力,也给了我们很多无私的帮助和支持,我们在此深表谢意。 姓名龚泽汗参考文献1刘勇编数字电路电子工业出版社xx2陈正振编电子电路设计与制作广西交通职业技术学院信息工程系xx3杨子文编单片机原理及应用西安电子科技大学出版社xx4王法能编单片机原理及应用科学出版社xx附录一系统电路图附录二系统程序清单CONFIG12EQU7FH TEMPHEQU21H TEMPLEQU20H REG2EQU22H REG3EQU23H REG4EQU24H DATEQU P0.7SCLK EQUP3.2IO EQUP3.3RST EQUP3.4year DATA66H monthDATA65H weekDATA64H dayDATA63H hourDATA62H mintueDATA61H secondDATA60H ORG0000H LJMP START ORG001BH LJMPINTT1START:;初值LCALL ZJSETB EA MOV SCON,#00H;串行输出,方式0MOV TMOD,#10H;计数器1,方式1MOV TL1,#00H MOVTH1,#00H MOV32H,#8EH MOV31H,#00H;允许写1302LCALL WRITE MOV32H,#90H MOV31H,#0A6H;1302充电,充电电流1.1MA LCALL WRITE;主程序MAIN1:MOV32H,#8DH;读出年LCALL READMOV year,31H MOV32H,#8BH;读出星期LCALL READMOV week,31H MOV32H,#89H;读出月LCALL READMOV month,31H MOV32H,#87H;读出日LCALL READMOV day,31H MOV32H,#85H;读出小时LCALL READMOV hour,31H MOV32H,#83H;读出分钟LCALL READMOV mintue,31H MOV32H,#81H;读出秒LCALL READMOV second,31H;分离缓存MOV R0,year;年分离,送显示缓存LCALL DIVIDEMOV7BH,R1MOV4BH,R1MOV7CH,R2MOV4CH,R2MOV78H,week MOV48H,week MOV R0,month;月分离,送显示缓存LCALL DIVIDEMOV79H,R1MOV49H,R1MOV7AH,R2MOV4AH,R2MOV R0,day;日分离,送显示缓存LCALL DIVIDEMOV76H,R1MOV46H,R1MOV77H,R2MOV47H,R2MOV R0,hour;小时分离,送显示缓存LCALL DIVIDEMOV74H,R1MOV44H,R1MOV75H,R2MOV45H,R2MOV R0,mintue;分钟分离,送显示缓存LCALL DIVIDEMOV72H,R1MOV42H,R1MOV73H,R2MOV43H,R2MOV R0,second;秒分离,送显示缓存LCALL DIVIDEMOV70H,R1MOV40H,R1MOV71H,R2MOV41H,R2CLR EA LCALL TOUTOUSETB EA LCALL DISPLAYLCALL GENGXIAN;更新农历程序JNB P0.1,SETG111JNB F0,SSS setbP0.4;非闰月,则p0.4清零,指示灯亮LJMP MAIN1SETG111:LJMP SETGSSS:clr P0.4;闰月,则p0.4置位,指示灯不亮LJMP MAIN1;温度TOUTOU:LCALL CHUSHILCALL RDTEMPMOV A,TEMPL ANL A,#11110000B MOV TEMPL,A MOV A,TEMPH ANL A,#00000111B ORLA,TEMPL SWAP A MOV25H,A MOV A,25H MOVB,#64H DIVAB MOV A,B MOVB,#0AH DIVAB SWAP A ORLA,B MOV10H,A RETCHUSHI:LCALL RESET MOV A,#0CCH LCALL WRITE111MOV A,#4EH LCALL WRITE111MOV A,#CONFIG12LCALL WRITE111RET RDTEMP:LCALL RESETMOV A,#0CCH LCALL WRITE111MOV A,#44H LCALL WRITE111LCALL DL1MS LCALLRESETMOV A,#0CCH LCALLWRITE111MOV A,#0BEH LCALLWRITE111LCALL ERAD111MOVTEMPL,A LCALLERAD111MOV TEMPH,A RETRESET:LA:SETB DAT MOV52H,#200LB:CLR DATDJNZ52H,LB SETB DATMOV52H,#30LC:DJNZ52H,LC CLR C ORL C,DAT JCLB MOV58H,#80LD:ORLC,DAT JCLP DJNZ58H,LD SJMPLA LP:MOV52H,#250LF:DJNZ52H,LF RETWRITE111:MOV53H,#8W51HA:SETBDATMOV54H,#8RRC A CLR DATW52HA:DJNZ54H,W52HA MOVDAT,C MOV54H,#30W53HA:DJNZ54H,W53HA DJNZ53H,W51HA SETBDAT RETERAD111:CLR EA MOV58H,#8RD1A:CLR DATMOV54H,#6NOPSETBDAT RD2A:DJNZ54H,RD2A MOV C,DAT RRC A MOV55H,#30RD3A:DJNZ55H,RD3A DJNZ58H,RD1A SETBDAT RET;公历设置程序SETG:SETB TR1SETB ET1MOV32H,#8EH MOV31H,#00H;允许写1302LCALLWRITE MOV32H,#80H MOV31H,#80H;1302停止振荡LCALLWRITEGWAIT:;LCALL DISPLAYJNB P0.1,GWAIT SETG1:LCALL DISPLAYJNB P0.1,SETG2JNB P0.2,GADDYEAR JNB P0.3,JIANYEAR AJMP SETG1GADDYEAR:MOV R7,66H;年加一LCALL ADD1MOV66H,A CJNE A,#51H,GADDYEAR1MOV66H,#00H AJMPGADDYEAR1JIANYEAR:MOV R7,66H;年减一LCALL JIAN1MOV66H,A CJNE A,#00H,GADDYEAR1MOV66H,#51H GADDYEAR1:MOV32H,#8CH;年值送人1302MOV31H,66H LCALLWRITE MOV R0,66H LCALL DIVIDE;年分离送显示缓存MOV4BH,R1MOV7BH,R1MOV4CH,R2MOV7CH,R2WAITT1:;LCALL DISPLAYJNB P0.2,WAITT1JNB P0.3,WAITT1AJMP SETG1SETG2:SETB0AH;调月时闪标志GWAIT2:LCALL DISPLAYJNB P0.1,GWAIT2SETG3:LCALL DISPLAYJNB P0.1,SETG4JNB P0.2,GADDMONTH JNB P0.3,JIANMONTH AJMP SETG3GADDMONTH:MOV R7,65H;月加一LCALL ADD1MOV65H,A CJNE A,#13H,GADDMONTH1MOV65H,#01H AJMPGADDMONTH1JIANMONTH:MOV R7,65H;月减一LCALL JIAN1MOV65H,A CJNE A,#00H,GADDMONTH1MOV65H,#12H GADDMONTH1:MOV32H,#88H;月值送人1302MOV31H,65H LCALLWRITE MOV R0,65H LCALL DIVIDE;月分离,送显示缓存MOV79H,R1MOV49H,R1MOV7AH,R2MOV4AH,R2WAITT2:;LCALL DISPLAYJNB P0.2,WAITT2JNB P0.3,WAITT2AJMP SETG3SETG4:SETB0BH;调日时闪标志GWAIT4:LCALL DISPLAYJNB P0.1,GWAIT4SETG5:LCALL DISPLAYJNB P0.1,SETG6JNB P0.2,GADDDAY JNB P0.3,JIANDAY AJMP SETG5GADDDAY:MOV R7,63H;日加一LCALL ADD1MOV63H,A CJNE A,#32H,GADDDAY1MOV63H,#01H JIANDAY:MOV R7,63H;日减一LCALL JIAN1MOV63H,A CJNE A,#00H,GADDDAY1MOV63H,#31H GADDDAY1:MOV32H,#86H;日值送人1302MOV31H,63H LCALLWRITE MOV R0,63H LCALL DIVIDE;日分离,送显示缓存MOV76H,R1MOV46H,R1MOV77H,R2MOV47H,R2WAITT3:;LCALL DISPLAYJNB P0.2,WAITT3JNB P0.3,WAITT3AJMP SETG5SETG6:SETB0CH;调星期时闪标志GWAIT6:LCALL DISPLAYJNB P0.1,GWAIT6SETG7:LCALL DISPLAYJNB P0.1,SETG8JNB P0.2,GADDWEEK JNB P0.3,JIANWEEK AJMPSETG7GADDWEEK:MOV R7,64H;星期加一LCALL ADD1MOV64H,A CJNE A,#07H,GADDWEEK1MOV64H,#00H AJMPGADDWEEK1JIANWEEK:MOV R7,64H;星期减一LCALL JIAN1MOV64H,A CJNE A,#00H,GADDWEEK1MOV64H,#06H GADDWEEK1:MOV32H,#8AH MOV31H,64H;星期值送人1302LCALLWRITEMOV R0,64H LCALLDIVIDE;星期值分离送显示缓存MOV48H,R1MOV78H,R1WAITT4:;LCALL DISPLAYJNB P0.2,WAITT4JNB P0.3,WAITT4AJMPSETG7SETG8:SETB0DH;调小时时闪标志GWAIT8:LCALL DISPLAYJNB P0.1,GWAIT8SETG9:LCALL DISPLAYJNB P0.1,SETG10JNB P0.2,GADDHOUR JNB P0.3,JIANHOUR AJMPSETG9GADDHOUR:MOV R7,62H;小时加一LCALL ADD1MOV62H,A CJNE A,#24H,GADDHOUR1MOV62H,#00H AJMPGADDHOUR1JIANHOUR:MOV R7,62H;小时减一LCALL JIAN1MOV62H,A CJNE A,#00H,GADDHOUR1MOV62H,#23H GADDHOUR1:MOV32H,#84H;小时值送人1302MOV31H,62H LCALLWRITEMOV R0,62H LCALLDIVIDE;小时值分离送显示缓存MOV74H,R1MOV44H,R1MOV75H,R2MOV45H,R2WAITT5:;LCALL DISPLAYJNB P0.2,WAITT5JNB P0.3,WAITT5AJMPSETG9SETG10:SETB0EH;调分时候闪标志GWAIT10:LCALL DISPLAYJNBP0.1,GWAIT10SETG11:LCALL DISPLAYJNBP0.1,SETGOUT JNBP0.2,GADDMINTUE JNBP0.3,JIANMINTUE AJMPSETG11GADDMINTUE:MOV R7,61H;分钟加一LCALL ADD1MOV61H,A CJNE A,#60H,GADDMINTUE1MOV61H,#00H AJMPGADDMINTUE1JIANMINTUE:MOV R7,61H;分钟减一LCALL JIAN1MOV61H,A CJNE A,#00H,GADDMINTUE1MOV61H,#59H GADDMINTUE1:MOV32H,#82H;分钟值送人1302MOV31H,61H LCALLWRITEMOV R0,61H LCALLDIVIDE;分钟值分离送显示缓存MOV72H,R1MOV42H,R1MOV73H,R2MOV43H,R2WAITT6:LCALL DISPLAYJNBP0.2,WAITT6JNBP0.3,WAITT6AJMPSETG11SETGOUT:LCALL DISPLAYJNBP0.1,SETGOUT LCALLGENGXIAN MOV32H,#80H MOV31H,#00H;1302晶振开始振荡LCALLWRITEMOV32H,#8EH MOV31H,#80H;禁止写入1302LCALLWRITECLR08H CLR09H CLR0AH CLR0BH CLR0CH CLR0DH CLR0EH CLR0FH CLRET1;关闪中断CLR TR1LJMP MAIN1;闪动调时程序INTT1:PUSH ACCPUSH PSWGFLASH:CPL0FH JB0FH,GFLASH1MOV7CH,4CH;全部显示MOV7BH,4BH MOV7AH,4AH MOV79H,49H MOV78H,48H MOV77H,47H MOV76H,46H MOV75H,45H MOV74H,44H MOV73H,43H MOV72H,42H MOV71H,41H MOV70H,40H GFLASHOUT:POP PSWPOP ACCRETI GFLASH1:JB0AH,GFLASH2;调年闪MOV7CH,#0FH MOV7BH,#0FH AJMPGFLASHOUT GFLASH2:JB0BH,GFLASH3;调月闪MOV7AH,#0FH MOV79H,#0FH AJMPGFLASHOUT GFLASH3:JB0CH,GFLASH4;调日闪MOV77H,#0FH MOV76H,#0FH AJMPGFLASHOUT GFLASH4:JB0DH,GFLASH5;调星期闪MOV78H,#0FH AJMPGFLASHOUT GFLASH5:JB0EH,GFLASH6;调小时闪MOV75H,#0FH MOV74H,#0FH AJMPGFLASHOUT GFLASH6:MOV73H,#0FH;调分钟闪MOV72H,#0FH AJMPGFLASHOUT;加一程序ADD1:MOV A,R7ADD A,#1DA A RET;减一程序JIAN1:MOV A,R7DEC ACJNEA,#4FH,KK1MOV A,#49H KK1:CJNEA,#3FH,KK2MOV A,#39H KK2:CJNEA,#2FH,KK3MOV A,#29H KK3:CJNEA,#1FH,KK4MOV A,#19H KK4:CJNEA,#0FH,KK5MOV A,#09H KK5:RET;分离程序DIVIDE:MOV A,R0ANL A,#0FH MOV R1,A MOV A,R0SWAPAANL A,#0FH MOV R2,A RET;写1302程序WRITE:CLR SCLKNOPSETBRSTNOP MOV A,32H MOV R4,#8WRITE1:RRC A;送地址给1302NOP NOPCLR SCLKNOP NOP NOP MOVIO,C NOP NOP NOPSETB SCLKNOP NOPDJNZ R4,WRITE1CLR SCLKNOPMOV A,31H MOV R4,#8WRITE2:RRC ANOP;送数据给1302CLR SCLKNOPNOPMOVIO,C NOPNOPNOPSETB SCLKNOPNOPDJNZ R4,WRITE2CLRRSTRET;读1302程序READ:CLR SCLKNOPNOPSETBRSTNOPMOV A,32H MOV R4,#8READ1:RRC A;送地址给1302NOPMOVIO,C NOPNOPNOPSETB SCLKNOPNOPNOPCLRSCLKNOPNOPDJNZR4,READ1MOV R4,#8READ2:CLRSCLKNOP;从1302中读出数据NOPNOPMOVC,IO NOPNOPNOPNOPNOPRRCANOPNOPNOPNOPSETB SCLKNOPDJNZR4,READ2MOV31H,ACLRRSTRET;BCD码转换为10进制程序BCD_10:MOV A,R0ANL A,#0FH MOV R1,A;高位10,加低位MOV A,R0SWAPAANL A,#0FH MOVB,#10MUL ABADD A,R1MOV R0,ARET;查一年数据程序CHECKMONTH:LCALL BCD_10;农历和公历为同一年,;NEW此时R2中的值为FFH时,R3有值,否则为0NEW:NOPM1:MOV A,R2;R2减一月天数CLR CSUBB A,#29MOV R1,A MOV A,R6JB ACC.6,SM11MOV A,R2CLR CSUBB A,#30MOV R1,A SM11:JC SM12MOV 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;还不够,则转Y1MOV R3,#00H AJMP M1M2:CLR C;R2减一月天数,够减MOV A,R2;转三月SUBB A,#29MOV R1,A MOV A,R6JB ACC.5,M21MOV A,R2CLR CSUBB A,#30MOV R1,AM21:JC M22MOV A,R1;R2减2月天数,够减MOV R2,A AJMPMM2M22:CJNE R3,#00H,M23;R2减2月天数LJMP Y2;不够减,判,R3为0否M23:MOV A,R2;不为0,R3加到R2中ADD A,R3;再让二月减MOV R2,A;还不够,则转Y2MOV R3,#00H AJMPM2MM2:LCALL CHECKRE;查2月,如果不为闰月CJNEA,#02H,M3;转3月RM2:MOV A,R4ANL A,#0FH JNZRM21MOV A,R2CLR CSUBB A,#30MOV R1,A AJMPRM22RM21:MOV A,R2CLRCSUBB A,#29MOV R1,A RM22:JC RM23MOV A,R1;R2减闰2月天数,够减MOV R2,A;转3月AJMPM3RM23:CJNE R3,#00H,RM24;R2减闰2月天数LJMP RY2;不够减,判,R3为0否RM24:MOV A,R2;不为0,R3加到R2中ADD A,R3;再让闰2月减MOV R3,#00H;还不够,则转RY2SUBB A,#30MOV R1,AM121:CJNE R3,#00H,M122;R2减12月天数LJMP Y12;不够减,判,R3为0否M122:MOV A,R2;不为0,R3加到R2中ADD A,R3;再让12月减MOV R2,A;还不够,则转Y12MOV R3,#00H LJMPM12Y1:MOV A,R2MOVR0,A;R2中为日的值LCALLD_BCD MOV56H,A MOV57H,#01H CLRF0;非闰月LJMP S_PLAY Y2:CJNE R2,#00H,Y21MOV A,R6;R2中为0,则为前一个月MOV56H,#29H;的的最后一天JB ACC.6,Y22MOV56H,#30H Y22:MOV57H,#01H CLRF0LJMP S_PLAY Y21:MOV A,R2MOVR0,A;R2中为日的值LCALLD_BCD MOV56H,A MOV57H,#02H CLRF0LJMP S_PLAY RY2:CJNE R2,#00H,RY21MOV56H,#29H;R2中为0,则为前一个月MOV A,R6;的的最后一天JB ACC.5,RY22MOV56H,#30H RY22:MOV57H,#02H CLRF0LJMP S_PLAY RY21:MOV A,R2;R2中为日的值MOVR0,A LCALLD_BCD MOV56H,A MOV57H,#02H SETBF0;闰月LJMP S_PLAY Y3:CJNE R2,#00H,Y31LCALL CHECKRE;查前一个月是否为闰月CJNEA,#02H,Y32MOV56H,#29H;前一个月是闰月MOV A,R4ANL A,#0FH;R2中为0,则为前一个月JNZ Y33;的的最后一天MOV56H,#30H MOV57H,#02H SETBF0LJMP S_PLAY Y33:MOV57H,#02H SETBF0LJMP S_PLAY Y32:M
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电力生产质量培训
- 文化遗产保护项目2025年资金申请政策解读报告
- 高压安全技术操作考试题及答案
- 文化旅游产业与创意产业融合的2025年资金申请报告
- 工商银行2025绍兴市数据分析师笔试题及答案
- 邮储银行2025三沙市笔试英文行测高频题含答案
- 2025年3D打印技术的快速成型制造研究
- 邮储银行2025淮北市秋招群面案例总结模板
- 2025年3D打印技术的创新应用领域
- 建设银行2025来宾市秋招笔试英语题专练及答案
- 卡拉瓦乔课件
- 李东垣《脾胃论》【译文】
- 东方财富通的函数修订版
- 第17册中药成方制剂 卫生部颁药品标准
- 《医院员工激励问题研究11000字(论文)》
- 品管圈计划书(模板)
- GB/T 26559-2011机械式停车设备分类
- GB/T 2423.22-2012环境试验第2部分:试验方法试验N:温度变化
- 水土保持工程质量评定表
- 人像摄影:户外人像摄影课件
- 纸张消耗统计表
评论
0/150
提交评论