1、I摘要随着当今世界经济的快速发展和信息化时代的来临,各种各样的小型智能家电产品陆续出现在我们的生活当中。日历是人们不可或缺的日常用品。但一般日历都为纸制用品,使用不便,寿命不长。电子万年历采用智能电子控制和显示技术,改善了纸制日历的缺陷。本设计以AT89S52单片机为核心,构成单片机控制电路,AT89C52是一种带8K字节闪速可编程可擦除只读存储器(PEROM)的低电压、高性能CMOS8位为控制器。该器件采用ATMEL非易失存储器制造技术制造,与工业标准的80C51和80C52指令集和输出管脚相兼容。在基于单片机系统的数字钟电路中,除了基本的单片机系统和外围电路外,还需要外部的控制和显示装置。
2、本电路主要以单片机AT89S52为核心而设计的,通过单片机对信息的分析与处理,控制外围设备。系统由复位模块、时钟模块及显示模块组成,后来在时钟模块的基础上又加载了日历、星期的模块。关键词电子万年历、单片机、时钟芯片IIABSTRACTWITHTHERAPIDDEVELOPMENTOFWORLDECONOMYANDTHEFORTHCOMINGOFINFORMATIONERA,MANYKINDSOFMINITYPEINTELLIGENTDOMESTICELECTRICAPPLIANCESAPPEARINOURLIFEONEAFTERANOTHERCALENDARSARENECESSARYDAILY
3、GOODSINPEOPLESLIFEBUTTHEYAREGENERALLYPAPERGOODSWITHINCONVENIENTUSEANDSHORTLIFEELECTRONICCALENDARADOPTSTHETECHNOLOGYOFINTELLIGENTELECTRONICCONTROLANDDISPLAY,ANDTHENIMPROVESTHEDEFICIENCYOFPAPERCALENDARSTHEDESIGNADOPTSTHECOREOFAT89S52MCU,WHICHISALOWPOWER,HIGHPERFORMANCE,CMOS8BITMICROCOMPUTERWITH8KBYTES
4、OFFLASHPROGRAMMABLEANDERASABLEREADONLYMEMORYMEMORYPEROMTHEDEVICEISMANUFACTUREDUSINGATMELSHIGHDENSITYNONVOLATILEMEMORYTECHNOLOGYANDISCOMPATIBLEWITHTHEINDUSTRYSTANDARD80C51AND80C52INSTRUCTIONSETANDPINOUTINDIGITALCLOCKCIRCUITBASEDMICROCONTROLLERUNITSYSTEM,THEREARETHEEXTERNALCONTROLLINGANDDISPLAYDEVICEB
5、ESIDESTHEFUNDAMENTALMONOLITHICMACHINESYSTEMANDTHEOUTERRINGCIRCUITTHEKEYOFTHECIRCUITINTHISDESIGNISAT89S52,USINGTHEMICROCONTROLSYSTEMTOPROCESSINFORMATIONTOCONTROLTHEOUTERRINGCIRCUITTHESYSTEMISMADEUPOFCIRCUITANDCLOCKCIRCUITDATEANDWEEKMODULISTHEEXTERNALPARTKEYWORDSELECTRONICCALENDARMCUCLOCKCHIPIII目录摘要IA
6、BSTRACTII第1章引言1第2章单片机系统介绍221单片机的发展过程222单片机的技术发展史223单片机的特点和应用领域3第三章89C51单片机结构和原理531单片机的结构和控制原理单片机的基本结构5311CPU系统53289C51引脚封装632189C51引脚说明632289C51系列单片机引脚功能分类7第四章控制系统的硬件设计841单片机万年历系统的应用设计8411功能要求8412方案论证8413系统硬件电路的设计9第五章系统程序的设计1451阳历程序设计1452时间调整程序设计1453阴历程序设计15第六章调试及性能分析19IV61调试步骤1962性能分析19第七章结论20参考文献2
7、1致谢22附录23沈阳工业大学工程学院本科生毕业设计1第1章引言在现代的工业电气生产中,自动化控制在控制领域已经是趋于主导地位,各种形式的控制方法异军突起,均有着各自的特点。单片机控制作为其中的一种,有着其自身的独到之处控制性能和可靠性高、体积小、价格低、易于产品化、安装简单方便等优势,在自动化控制领域中有着不可替代的地位。在现代的各种电子器件中,单片机具有良好的性能价格比。这正是单片机得以广泛应用的重要原因。由于单片机具有良好的控制性能和灵活的嵌入品质,近年来单片机在各种领域都获得了极为广泛的应用。单片机从诞生之日起,在短短的三十几年里,单片机技术发展十分迅速,产品种类琳琅满目。本文设计的电
8、子万年历属于小型智能家用电子产品。利用单片机进行控制,实时时钟芯片进行记时,外加显示电路,可实现时间的调整和显示。电子万年历既可广泛应用于家庭,也可应用于银行、邮电、宾馆、饭店、医院、学校、企业、商店等相关行业的大厅,以及单位会议室、门卫等场所。因而,此设计具有相当重要的现实意义和实用价值。沈阳工业大学工程学院本科生毕业设计2第2章单片机系统介绍21单片机的发展过程MCS51单片机是INTEL公司推出的世界上著名的高性能低功耗非易失性存储器和数字集成电路的一流半导体,它的EEPROM电可擦除技术、闪速存储器技术和质量、高可靠性的生产技术。在CMOS器件生产领域中,INTEL的先进设计水平、优秀
9、的生产工艺及封装技术一直处于世界的领先地位,这些技术用于单片机生产使单片机也具有优秀的品质、在结构、性能和功能等方面都有明显的优势。INTEL公司的单片机是目前世界上一种独具特色而性能卓越的单片机。它在计算机外部设备、通讯设备、自动化工业控制、宇航设备、仪器仪表和各消费类产品中都有着广泛的应用前景。单片机SCMSINGLECHIPMICROCOMPUTER,即MICROCONTROLLER,是把微型计算机主要部分都集成在一个芯片上的单芯片微型计算机。主要包括了微处理器CPU、存储器ROM、RAM、输入/输出口1/0口和定时器/计数器、中断系统等功能部件。单片机自70年代出现以来,已经有了很大的
10、发展,被广泛应用于机械、测量控制、工业自动化、智能接口和智能仪表等许多领域。例如单片机与传统的机械产品相结合后简化产品结构,实现控制智能化,成为新一代的机、电一体化产品利用单片机来构成各种工业控制系统、数据采集系统等在大型工业测控系统中,单片机进行接口的控制与管理,与计算机主机并行工作,可以大大提高系统运行速度。22单片机的技术发展史单片机诞生于20世纪70年代末,经历了SCM、MCU、SOC三大阶段。SCM即单片微型计算机(SINGLECHIPMICROCOMPUTER)阶段,主要是寻求最佳的单片形态嵌入式系统的最佳体系结构。“创新模式”获得成功,奠定了SCM与通用计算机完全不同的发展道路。
11、在开创嵌入式系统独立发展道路上,INTEL公司功不可没。MCU即微控制器(MICROCONTROLLERUNIT)阶段,主要的技术发展方向是不断扩展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其沈阳工业大学工程学院本科生毕业设计3对象的智能化控制能力。它所涉及的领域都与对象系统相关,因此,发展MCU的重任不可避免地落在电气、电子技术厂家。从这一角度来看,INTEL逐渐淡出MCU的发展也有其客观因素。在发展MCU方面,最著名的厂家当数PHILIPS公司。PHILIPS公司以其在嵌入式应用方面的巨大优势,将MCS51从单片微型计算机迅速发展到微控制器。因此,当我们回顾嵌入式系统发展
12、道路时,不要忘记INTEL和PHILIPS的历史功绩。单片机是嵌入式系统的独立发展之路,向MCU阶段发展的重要因素,就是寻求应用系统在芯片上的最大化解决;因此,专用单片机的发展自然形成了SOC化趋势。随着微电子技术、IC设计、EDA工具的发展,基于SOC的单片机应用系统设计会有较大的发展。因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统1。23单片机的特点和应用领域单片机到底是什么呢就是一个电脑,只不过是微型的,麻雀虽小,五脏俱全它内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,
13、不过价钱也是低的,一般不超过10元即可用它来做一些控制电器一类不是很复杂的工作足矣了。我们现在用的全自动滚筒洗衣机,排烟罩VCD等等的家电里面都可以看到它的身影它主要是作为控制部分的核心部件2。它是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干扰能力,较低的成本,这也是和离线式计算机的(比如家用PC)的主要区别。单片机是靠程序的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电
14、路一定是一块大PCB板。但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别。只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性。由于单片机对成本是敏感的,所以目前占统治地位的软件还是最低级汇编语言,它是除了二进制机器码以上最低级的语言了,既然这么低级为什么还要沈阳工业大学工程学院本科生毕业设计4用呢很多高级的语言已经达到了可视化编程的水平为什么不用呢原因很简单,就是单片机没有家用计算机那样的CPU,也没有像硬盘那样的海量存储设备。一个可视化高级语言编写的小程序里面即使只有一个按钮,也会达到几十K的尺寸对于家用PC的硬盘来讲没什么,可是对于单片机来讲是不能接受
15、的。单片机在硬件资源方面的利用率必须很高才行,所以汇编虽然原始却还是在大量使用。一样的道理,如果把巨型计算机上的操作系统和应用软件拿到家用PC上来运行,家用PC的也是承受不了的。沈阳工业大学工程学院本科生毕业设计5第三章89C51单片机结构和原理31单片机的结构和控制原理单片机的基本结构典型系列单片机是由CPU系统、外围功能单元和归一化I/O端口三部分组成,如图31图31典型单片机311CPU系统CPU系统包括CPU、时钟系统和总线控制逻三部分,其功能如下CPU包含运算器和控制器,专门为面向控制对象、嵌入式特点而设计,有突出控制功能的指令系统。时钟系统包含振荡器、外接谐振元件,可关闭振荡器或C
16、PU时钟。总线控制逻辑主要用于管理外部并行总线时序及系统的复位控制。外部引脚有RST、ALE、RET系统复位用。ALE数据(地址)复用控制。EA外部/内部程序存储器选择。沈阳工业大学工程学院本科生毕业设计6PSEN外部程序存储器的取指控制3。3289C51引脚封装32189C51引脚说明I/O端口P00P07,P1017,P20P27,P30P37。80C51共有4个I/O端口,为P0、P1、P2、P3,4个I/O口都是双向的,且每个口都具有锁存器。每个口有8条线,共计32条I/O线4。各端口的功能叙述如下1P0有三个功能1)外部扩充存储器时,当作数据总线(D0D7)。2)外部扩充存储器时,当
17、作地址总线(A0A7)。3)不扩充时,可做一般I/O使用,但内部无上拉电阻,作为输入或输出应在外部接上拉电2P1只做I/O口使用,其内部有上拉电阻。3P2有两个功能1)扩充外部存储器时,当作地址总线(A8A15)使用。2)做I/O使用,其内部有上拉电阻。4P3有两种功能。除了作为I/O使用外(内部有上拉电阻),还有一些特殊功能,如表11所示,由特殊寄存器来设置。5主电源引脚1)VSS(20脚)电路低电平2)VCC(40脚)正常运行和编程校验(80151/8052)时为5V电源6RST/VPD(9脚)RST即RESET(复位)信号输入端。振荡器工作时,由该引脚输入脉宽2个以上机器周期的高电平时复
18、位单片微机。当外部在RST与VCC之间接一个电容(约10F)和在RST与VCC之间接一个电阻(约82K)时,就可实现加电复位功能。VPD为备用电源输入端,即当VCC掉电时,由此引脚提供备用电源,以保持内部RAM的信息。7ALE/PGOG(30脚)ALE,允许地址锁存信号输出。当访问外部存沈阳工业大学工程学院本科生毕业设计7储器时,ALE信号的负跳变将P0口上的低8位地址送入锁存器。在非访问外部存储器间,ALE仍以1/16振荡频率固定不变的速率输出,因此它能作外部时钟或定时信号用。当访问外部数据存储器时,将以1/12振荡频率输出。PROG为编程脉冲输入端,即当选用87C51单片微机时,对片内程序
19、存储器进行编程时,由此引脚输入编程脉冲。8SEN(29脚)程序储存使能端。1)内部程序存储器读取不动作。2)外部程序存储器读取(ROM)在每个机器周期会动作两次。3)外部程序存储器读取(RAM)两个/PSEN脉冲被跳国不会输出。4)外接ROM时,与ROM的/OE脚连接。9EA/VPP(31脚)1)接高电平时CPU读取内部程序存储器(ROM),如80C51/80C52。2)扩充外部ROM当读取内部程序存储器超过0FFF(8051)时,自动读取外部ROM。3)接低电平时CPU读取外部程序存储器(ROM),如80C31/80C32。87C51烧写内部EPROM时,利用此脚输入21V的烧写电压5。32
20、289C51系列单片机引脚功能分类基本引脚电源VCC、VSS,时钟XTAL2、XTAL1和复位RST。并行扩展总线数据总线P0口,地址总线P0口(低8位)、P2口(高8位)和控制总线ALE、PSEN、EA。串行通信总线发送口TXD和接受口RXD6沈阳工业大学工程学院本科生毕业设计8第四章控制系统的硬件设计41单片机万年历系统的应用设计411功能要求电子万年历能显示阳历年、月、日、时、分、秒和阴历月、日,在显示阴历时间时,能标明是否为闰年。412方案论证按照系统设计功能的要求,初步确定设计系统由主控模块、时钟模块、显示模块、键盘接口模块共4个模块组成,电路系统构成图如图41所示。主控芯片使用51
21、系列AT89C52单片机,时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟DS1302。采用DS1302作为主要计时芯片,可以做到计时准确。更重要的是DS1302可以在很小电流的后备电源下继续计时,并可编程选择多种充电电流来对后备电源进行慢速充电,可以保证后备电源基本不耗电。图41电子万年历电路系统构成框图显示模块采用普通的共阳极LED数码管,键输入采用查询法实现调整功能。沈阳工业大学工程学院本科生毕业设计9413系统硬件电路的设计系统由主控制器AT89C52、时钟芯片DS1302、串口显示电路及扫描电路组成。(1)注控制器AT89C52ATMEL公司生产的AT89
22、C52单片机采用高性能的静态80C51,有先进工艺制造,并带有非易失性FLASH程序存储器。它是一种高性能、低功耗的8位CMOS微处理芯片,市场应用最多。主要性能特点有8KBFLASHROM,可以擦除1000次以上,数据保存10年。256字节内部RAM。电源控制模式时钟可停止和恢复;空闲模式;掉电模式。6个中断源。4个中断优先级。4个8位I/O口。全双工增强型UART。3个16位定时/计数器,T0、T1(标准80C51)和增加的T2(捕获和比较)。全静态工作方式224MHZ。(2)时钟电路DS13021)DS1302的性能特性实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数;用于
23、高速数据暂存的318位RAM;最少引脚的串行I/O口;2555V电压工作范围;25V时耗电小于300NA;用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式;简单的3线接口;可选的慢速充电(至VCC1)的能力。DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM。他经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和沈阳工业大学工程学院本科生毕业设计10年等信息。对于小于31天的月和月末的日期自动进行调整,还包括闰年校正的功能。时钟的运行可以采用24H或带AM(上午)/PM下午的12H格式。采用三线接口与CPU进行同步通信,并可采用突发方式一
24、次传送多个字节的时钟信号或RAM数据。DS1302有主电源/后备电源双电源引脚VCC1在单电源与电池供电的系统中提供低电源,并提供低功率的电池备份;VCC2在双电源系统中提供主电源,在这种运用方式中,VCC1连接到备份电,以便在没有主电源的情况下能保存时间信息以及数据。DS1302由VCC1或VCC2中较大者供电。当VCC2大于VCC102V时,VCC2给DS1302供电;当VCC2小于VCC1时,DS1302由VCC1供电。2)DS1302数据操作原理图42DS1302引脚及内部结构DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在S
25、CLK的上升沿被输入。无论是读周期还是写周期,开始8位指定40个寄存器中哪个将被访问到。在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8加8,在多字节方式下为8加字节数,最大可达248字节数。如果在传送过程中置RST脚为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。上电运行时,在VCC25V之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RST置位高电平。DS1302的引脚及内部结构图如图43所示,表1为各引脚的功能。沈阳工业大学工程学院本科生毕业设计11DS1302的控制字如图43
26、所示。控制字节的最高有效位(位7)必须是逻1;如果它为0,则不能把数据写入DS1302中。位6如果为0,则表示存取日历时钟数据;为1表示存取RAM数据。位51(A4A0)指示操作单元的地址。最低有效位(位0)如为0,表示要进行写操作;为1表示进行读操作。控制字节是从最低位开始输入/输出。为了提高对32个地址的寻址能力(地址/命令位15逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(BURST)方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历寄存器中的地址931或RAM寄存器中的地址31不能存储数据。在多字节方式中,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个寄存器
27、。但是,当以多字节方式写RAM时,为了传送数据不必写所有31字节。不管是否写了全部31字节,所写的每一字节都将传送至RAM。表41DS1302引脚功能引脚号引脚名称功能1VCC2主电源2,3X1,X2震荡源,外接32768KHZ晶振4GND地线5RST复位/片选线6I/O串行数据输入/输出端(双向)7SCLK串行数据输入端8VCC1后备电源图43DS1302的控制字DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。其日历、时间寄存器及其控制字见表3,其中奇数为读操作,偶数为写操作。沈阳工业大学工程学院本科生毕业设计12时钟暂停秒寄存器的7位定义位时钟暂
28、停位。当它为1时,DS1302停止震荡,进入低功耗的备份方式。通常在对DS1302进行写操作时(如进入时钟调整程序),停止震荡。当它为0时,时钟将开始震动。图44DS1302数据读/写时序AMPM/1224小时方式小时寄存器的7位定义为12或24小时方式选择位。它为高电平时,选择12小时方式。在此方式下,位5是AM/PM位,此位是高电平时表示PM,低电平表示AM。在24小时方式下,位5为第二个10小时位(2023H)。DS1302的晶振选用32768KHZ,电容推荐值为6PF,因为振荡频率较低,也可以不接电容,对计时精度影响不大。(3)显示电路的设计显示部分采用普通的共阳极数码管显示,采用动态
29、扫描,以减少硬件电路。考虑到一次扫描19位数码管显示器时会出现闪烁情况,设计19个数码管分3排同时扫描。第一排6个数码管分别为千年、百年、十年、年、十月、月,第二排6位数码管分别为十时、时、十分、分、十秒、秒,第三排7位数码管分别为星期、阴历十月、阴历月、阴历十日、阴历日、十日、日。显示时采用串行口输出断码,用3片74LS164来驱动3排数码管,这样扫描一次只需7MS。74LS164内部为8个D触发器,用以实现数据的串行移位,74LS164特性见表3。单片机以串行口方式0(移位寄存方式)输出数据,3片74LS164作为3排共阳极数码管的串/并转换显示接口。74LS164为TTL单向8位移位寄存
30、器,可实现串行输入,并行输出。其中A、B(第1、2脚)为串行输入端,2个引脚按逻辑“与”运算规律输入信号,共一个输入信号时可以并接,共同作为输入脚。CP(第8脚)为时钟输入端,可以连接到串行口的TXD端。每一个时钟信号的上升沿加到CP端时,移位寄存器移一位。8个脉冲过后,8位二进制数全部移入沈阳工业大学工程学院本科生毕业设计1374LS164中。MR脚(第9脚)为复位端,当该脚为低电平时,移位寄存器各位复0;只有当它为高电平时,时钟脉冲才起作用。Q1Q8(第36和1013引脚)并行输出端分别接数码管的HA(因为串行口从低位开始传送)各段对应的引脚上。在给出了8个脉冲后,最先进入74LS164的
31、第1个字节数据到达了最高位。再来一个脉冲就会从最高位移出,进入下一个74LS164的第1位。3片74LS164首尾相串,而时钟端则接在一起。这样,当输入8个脉冲时,从单片机RXD端输出的第1字节数据就进入了第1片74LS164中,而当第2个8个脉冲到来后,第1字节数据就会进入了第2片74LS164,而随后的第2字节数据则进入了第1片74LS164。这样,当第3个8个脉冲完成后,首次送出的数据被送到了最下面的74LS164(第3片)中,其它数据依次出现在第二和第一片74LS164中,实现了数据在74LS164中的串行输入、并行输出。表4274LS164特性表操作模式输入输入输入输出输出复位MRA
32、BQ0Q1Q7移位LLQ0Q6移位HLLLQ0Q6移位HHHLQ0Q6移位HHLLQ0Q6移位HHHHQ0Q6在方式0状态下,串行口为同步移位寄存器方式,其波特率是固定的,为FOSC/12。数据由RXD(P30)端输入或输出,同步移位脉冲由TXD(P31)端输出。发送、接收数据时低位在先。所以,根据本小节下面提供的硬件电路图,在编写程序时,查共阳数码管的段码的二进制数据应该将正常的共阳数码管09的二进制值按反序排列,如原来的二进制为11000000(C0H),要改为00000011(03H),就能使数码管正常显示。(4)键盘接口的设计由于按键只有3个,用普通按钮接10K上拉电阻,用查询法完成读
33、按键功能。沈阳工业大学工程学院本科生毕业设计14第五章系统程序的设计51阳历程序设计因为使用了时钟芯片DS1302,阳历程序只需从DS1302各寄存器中读出年、周、月、日、小时、分、秒等数据,在处理即可。在首次对DS1302进行操作之前,必须对它进行初始化,然后从DS1302中读出数据,在经过处理后,送给显示缓冲单元。阳历程序流程图见图51所示。图51阳历程序流程图52时间调整程序设计调整时间用3个调整按钮,1个作为移位、控制用,另外2个作为加和减用,分别定义为控制按钮、加按钮、减按钮。在调整时间过程中,要调整的位与别的位应该有区别,所以增加了闪烁功能,即调整的位一直在闪烁,知道调整到下一沈阳
34、工业大学工程学院本科生毕业设计15位。闪烁原理就是,要让调整的位每隔一定时间熄灭一次,比如50MS。利用定时器计时,当达到50MS溢出时,就送该位熄灭符,在下一次溢出时,再送正常的显示值,不断交替,直到调整该位结束。此时送正常显示值给该位,再进入下一位调整闪烁程序。53阴历程序设计阴历程序的实现就是要靠阳历日期来推算的。要根据阳历来推算阴历日期,首先要设计算法。推算方法是,根据阳历当前日期在一年中的天数来计算阴历日期。阳历一个月不是30天就是31天(2月除外,闰年2月29天,平年2月为28天)。阴历一年共有12个月或13个月(含闰月),一个月为30天或29天。如果把一个只有29天的月称为小月,
35、用1为标志,把30天的月称为大月,用0为标志,那么12位二进制就能表示一年12个月的大小。如果有闰月,则把闰月的月份作为一个字节的高4位,低4位表示闰月的大小,大月为0,小月为1,这样一个字节就包含了所有闰月的信息。阴历春节和阳历元旦相差的天数也用一个字节表示。总共用4个字节就可以存储一年中任何一天阳历和阴历的对应关系的有关数据,例如2004年的阴历和阳历对应关系如表4所示。2004年的春节和元旦差21天,这样2004年的信息表示为21,42H,52H,21H。其中表示12个月大小信息的字节,第4位和第7位不用。第1个字节为十进制,其他的都为十六进制。按此方法,50年的阳历和阴历对应关系表总共
36、使用200字节。表512004年的阴历和阳历对应关系表月份123456789101112闰二月大小小大大大小大小大小大小大小天数29303030293029302930293029二进制100010101010135,15H,51H,00H,23,11H,52H,41H,42,12H,65H,00H31,11H,32H,00H,21,42H,52H,21H,39,52H,25H,00H28,25H,04H,71H,48,66H,42H,00H,37,33H,23H,00H沈阳工业大学工程学院本科生毕业设计1625,15H,24H,51H,44,05H,52H,00H,33,22H,65H,00
37、H22,21H,25H,41H,40,24H,52H,00H,30,52H,42H,91H49,55H,05H,00H,38,42H,21H,21H,27,53H,50H,60H46,53H,24H,00H,35,42H,31H,21H,24,41H,52H,41H42,45H,25H,00H,31,24H,52H,00H,21,51H,12H,21H40,55H,11H,00H,28,26H,21H,61H,47,26H,61H,00H36,13H,31H,00H,25,05H,31H,51H,43,12H,54H,00H33,51H,25H,00H,22,42H,25H,31H,41,32
38、H,22H,00H30,55H,02H,71H,49,55H,22H,00H,38,26H,62H,00H27,13H,64H,60H,45,13H,32H,00H,34,12H,55H,00H23,10H,53H,51H,42,22H,45H,00H,31,52H,22H,00H21,52H,44H,21H,40,55H,44H,00H,29,26H,50H,71H47,26H,64H,00H,36,25H,32H,00H,25,23H,32H,50H44,44H,55H,00H,32,52H,45H,00H,22,55H,11H,30H有了算法和数据以后,就可设计软件了。先要根据当前阳历的
39、日期,算出阳历为该年中的第几天。图52为计算阳历中任何一天在该年中为第几天的程序流程图。计算出当前阳历日期为该年中的第几天后,再减去阳历该年春节和元旦的日差,如果够减,则相减的结果就是阴历在该年的第几天了。根据该数据就可以推算出具体的当前阴历日期;如果不够减,则表示当前阴历年为阳历年的前一年。这种情况下,根据实际,当前阴历日期会处于阴历11月或12月,此时春节和元旦的日差减去前面计算出的当前阳历日期在阳历年为第几天的数据,其结果表示当前阴历日期离春节的天数。计算出的阳历天数为该年的第几天,存放在寄存器R2和R3中。计算出天数后,如果大于FFH,则把FFH存放在R2中,余值存放在R3中。也就是说
40、在用寄存器R2和R3表示天数信息中,R2充当主寄存器,数据先存满R2再存R3。在整个转换程序中,这里面的数据不能被覆盖。计算出阳历天数后,就可以根据它推算阴历日期。推算方法是你,先用总天数减去春节和元旦的日差,如果结果为1,则该天正好是春节(因为春节在元旦之后,在计算春节和原单的日差时,假设元旦为0天,春节为N天,则日差为N。而前面计算的阳历总天数是该天在该年中的第几天,是以元旦为1而得到的,与计算春节和元旦日差的这种方法相比,其数值少了1,所以要在原来本应该以0作为该天就是春节的依据的基础上加1,所以沈阳工业大学工程学院本科生毕业设计17以1作为该天是春节的标志);如果结果大于1,说明阳历和
41、阴历为同一年,再根据查表所得的该年的阴历的闰月和大小的信息,就可以推算出该天的阴历日期了。图53为由总天数推算出阴历日期的程序流程图。图52计算阳历天数程序流程图总天数中加入该月天数月数加1与当前月同总天数中加入号数当前号数是总天数计算阳历天数结束,总天数中的数据为当前日期在阳历年中为第几天YNY置阳历总天数为0当前月为1月N沈阳工业大学工程学院本科生毕业设计18图53推算阴历日期的程序流程图程序入口R2减1个月天数够减下个月为闰月减去闰月天数月加1月份为当前正在减的月份的前一个月的最后一天月份为当前正在减的月份,号数为R2中的值R20R30R2R2R3R30YYYYNNNN沈阳工业大学工程学
42、院本科生毕业设计19第六章调试及性能分析61调试步骤调试分为硬件调试和软件调试。硬件调试主要是检测硬件电路是否有短路、断路、虚焊等,DS1302的硬件电路很简单,只通过3根线与单片机相连,很容易检测,主要是检查其引脚,如晶振和电源等是否接好。另外可以通过软件来调试硬件,如为了测试显示电路连接是否正确,可以编写一个简单的显示程序来测试它。接下来可进行软件调试,可以编写只含DS1302的计时和读写程序、显示程序,测试DS1302是否正常工作。最后调试时间,调试程序和阴历推算程序。62性能分析计时器最关键的是计时的精度。电子万年历中DS1302上最好使用专用的晶振。经测试制作的电子万年历,一星期快了
43、3秒左右,误差较大,实验设计中可以换用标准晶振或用软件进行修正。沈阳工业大学工程学院本科生毕业设计20第七章结论本设计硬件电路的使用比较简单,所用元器件较少,电路中使用了AT89S52单片机、DS1302时钟芯片等主要芯片,实现了预计的功能。在对芯片的管脚功能和用法有了充分的了解后,根据原先的选择好的设计要求设计硬件电路,包括单片机控制电路、时钟电路、键盘接口电路、显示电路。然后通过软件编程,实现了对年、月、日、时、分、秒、星期、闰年和阴历的自动调整,用按键进行控制,用LED模块进行显示。电子万年历可以正常显示时间并进行时间调整,基本完成了预期要实现的目标。沈阳工业大学工程学院本科生毕业设计2
44、1参考文献1肖洪兵跟我学用单片机M北京北京航空航天大学出版社,200282范风强等单片机语言C51应用实战集锦M北京电子工业出版社,20053李全利,迟荣强单片机原理及接口技术M北京高等教育出版社,20044何立民单片机与嵌入式系统应用J2002年,第5期P585李朝青单片机原理与接口技术M北京航空航天大学出版社,19996何立民单片机高级教程M北京航空航天大学出版社,20007林伸茂8051单片机彻底研究基础篇M北京人民邮电出版社,20048赵晓安MCS51单片机原理及应用M天津天津大学出版社,20019夏继强单片机实验与实践教程M北京北京航空航天大学出版社,200110张毅刚MCS51单片
45、机应用设计M哈尔滨哈尔滨工业大学出版社,199711谭建成电机控制专用集成电路M北京机械工业出版社,1997沈阳工业大学工程学院本科生毕业设计22致谢本论文是在导师马航的悉心指导下完成的。导师渊博的专业知识,严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,严以律己、宽以待人的崇高风范,朴实无华、平易近人的人格魅力对我影响深远。他严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;他循循善诱的教导和不拘一格的思路给予我无尽的启迪。他悉心的指导我的毕业设计,细致的修改我的毕业论文。在我困惑迷茫,举棋不定的时候,马老师不断的鼓励我启发我,为我指引光明之路。不仅使我树立了远大的学术目标、掌握了
46、基本的研究方法,还使我明白了许多待人接物与为人处世的道理。本论文从选题到完成,每一步都是在导师的指导下完成的,倾注了导师大量的心血。在此,谨向导师表示崇高的敬意和衷心的感谢感谢大学四年来所有的老师,为我们打下坚实的专业基础,并让我受益匪浅。本论文的顺利完成,离不开各位老师、同学和朋友的关心和帮助。最后,我要感谢我的母校沈阳工业大学工程学院,在校期间,这里给我留下了美好的回忆。特别是在我即将踏上工作岗位的同时,毕业设计整个过程给了我这样一个锻炼的机会,使我加深了对以前知识的理解和巩固,拓宽了知识面,也提高了我对所学知识的综合应用能力。我要对母校说母校有我三五载,我爱母校一万年。祝愿母校的将来更加
47、美好沈阳工业大学工程学院本科生毕业设计23附录万年历程序SCLKEQUP32IOEQUP33RSTEQUP34YEARDATA66HMONTHDATA65HWEEKDATA64HDAYDATA63HHOURDATA62HMINUTEDATA61HSECONDDATA60HDSI302_ADDRDATA32HDSI303_DATADATA31HORG0000HAJMPSTARTORG0003HRETIORG000BHRETIORG0013HRETIORG001BHLJMPINTT1ORG0023HRETIORG002BH沈阳工业大学工程学院本科生毕业设计24RETI主程序STARTSETBEAM
48、OVSCON,00H;串行输出,方式0MOVTMOD,10H;计数器1,方式1MOVTL1,00HMOVTH1,00HMOVDS1302_ADDR,8EHMOVDS1302_DATA,00H;允许写1302LCALLWRITEMOVDS1302_ADDR,90HMOVDS1302_DATA,0A6H;1302充电,充电电流11MALCALLWRITEMAIN1MOVDS1302_ADDR,8DH;读出年LCALLREADMOVYEAR,DS1302_DATAMOVDS1302_ADDR,8BH;读出星期LCALLREADMOVWEEK,DS1302_DATAMOVDS1302_ADDR,89H
49、;读出月LCALLREADMOVMONTH,DS1302_DATAMOVDS1302_ADDR,87H;读出日LCALLREADMOVDAY,DS1302_DATAMOVDS1302_ADDR,85H;读出时LCALLREADMOVHOUR,DS1302_DATAMOVDS1302_ADDR,83H;读出分沈阳工业大学工程学院本科生毕业设计25LCALLREADMOVMINTUE,DS1302_DATAMOVDS1302_ADDR,83H;读出秒LCALLREADMOVSECOND,DS1302_DATAMOVR0,YEAR;年分离,送显示缓存LCALLDIVIDEMOV7BH,R1MOV4BH,R1MOV7CH,R2MOV4CH,R2MOV78H,WEEKMOV48H,WEEKMOVR0,MONTH;月分离,送显示缓存LCALLDIVIDEMOV79H,R1MOV49H,R1MOV7AH,R2MOV4AH,R2MOVR0,DAY;日分离,送显示缓存LCALLDIVIDEMOV76H,R1MOV46H,R1MOV77H,R2MOV47H,R2MOVR0,HOUR;时分离,送显示缓存LCALLDIVIDEMOV74H,R1MOV44H,R1MOV75H,R2MOV45H,R2沈阳工业大学工程学院本科生毕业设计26MOVR0,