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

下载本文档

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

文档简介

第38页本科生毕业设计基于单片机控制的电子万年历的设计摘要单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡等,这些都离不开单片机。在本设计中采用单片机AT89C52作为控制器来控制电路。本设计分别对硬、软件进行设计说明。硬件包括制器AT89C52、时钟电路DS1302、显示电路及键盘扫描电路组成,比如DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM。它经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息。软件部分给出了部分程序流程图的设计,包括阳历程序、时间调整程序和阴历程序。阳历程序是从DS1302各个寄存器中读出年、周、月、日、时、分、秒等数据。时间调整程序时用来正确的执行调整时间的功能。阴历程序的是要靠阳历日期来推算的。推算方法是,根据阳历当前日期在一年中的天数来计算阴历日期。软件编程采用汇编语言编写,因为其简洁、使用方便灵活、容易实现程序的模块化和结构化。关键词:AT89C52芯片;DS1302芯片;汇编语言;阳历程序;阴历程序Design of electronic calendar based on single chip microcomputer control AbstractMicrocomputer application technology rapid development, throughout we now all spheres of life, from missile navigation devices, to the aircraft various kinds of instrument control, from the computer network communication and data transmission, to industrial automation process real-time control and data processing, as well as our life is widely used in all kinds of intelligent IC card, these are inseparable from microcontroller. In this design USES the monolithic AT89C52 as controller to control circuit. The design of hardware and software respectively design explains. Hardware including making machines AT89C52 single, clocking circuit DS1302, display circuit and keypad scanning circuit component, such as DS1302 clock chip including real-time clock/calendar and 31 bytes of static RAM. It passes through a simple serial interface and microprocessor communications. Real-time clock/calendar provides seconds, points, when, day, week, month and year and other information. Software part gives part of the program flowchart design, including the Gregorian calendar procedure, time adjustment procedures and lunar program. The Gregorian calendar program DS1302 register read from each year, week, month, day, when data such as, minutes and seconds. Time to adjust to the correct implementation program adjusting time functions. Lunar program is to rely on the Gregorian calendar date of extrapolate. Computative method is, according to the solar calendar days of the year the current date to calculate the lunar calendar date. Software programming using assembly language, because it is simple and easy to use agile and easy to implement procedures of modular and structured. Key Words: AT89C52 single chip;DS1302 chip;Assembly language;Gregorian calendar program;Lunar program目录摘要IAbstractII1 绪论11.1 单片机的介绍11.2 本设计的要求21.2.1功能要求21.2.2方案论证21.3 本设计的内容31.3.1 硬件31.3.2 软件32 系统硬件电路的设计42.1主控制器的设计42.1.1 AT89C52主要性能特点42.1.2 AT89C52引脚图与引脚功能42.1.3 主控制器的连线图72.2 时钟电路的设计82.2.1芯片介绍82.2.2 DS1302数据操作原理82.2.3时钟电路的连线图112.3 显示电路的设计123 系统程序的设计153.1阳历程序153.2时间调整程序153.3阴历程序163.4显示程序20总结21致谢22参考文献23附录A 控制程序清单24附录B 电路图341 绪论1.1 单片机的介绍单片机的全称是单片微型计算机(Single Chip Micro-computer)。为了使用方便,它把组成计算机的主要功能部件:中央处理器(CPU)、数据存储器(RAM)、程序存储器(ROM、EPTOM、E2PROM或FLASH)、定时/计数器和各种输入/输出接口电路等都集成在一块半导体芯片上,构成了一个完整的计算机系统。与通用的计算机不同,单片机的指令功能是按照工业控制的要求设计,因此它又被称为微控制器(Microcontroller)。单片机具有体积小、重量轻、耗能省、价格低、可靠性高和通用灵活等优点。近几年来,单片机的发展更为迅速,它已渗透到诸多学科的领域,以及人们生活的各个方面,如今单片机已广泛地应用在智能仪器仪表、机电设备过程控制、自动检测、家用电器和数据处理等各个方面。单片机出现的历史并不长,它的产生于发展与微处理器的产生于发展大体上同步,也经历了3个阶段: 第一个阶段:20世纪70年代为单片机的初级阶段。 这个阶段以Intel公司的MCS-48系列单片机为典型代表。因受工艺和集成度限制,单片机中的CPU功能低、存贮器容量小、IO接口的种类和数量少,只能用在简单场合。 第二个阶段:20世纪80年代为单片机的成熟阶段。 这个阶段以Intel的MCS-51、MCS-96系列单片机为典型代表。出现了性能较高的8位和16位单片机。提高了CPU的功能、扩大了存贮器的容量、增加了IO接口种类和数量,单片机内包括了异步串行口、A/D、多功能定时器等特殊IO电路。单片机应用也得到了推广。 第三个阶段:20世纪90年代至今为单片机高速发展阶段。 世界上著名半导体厂商不断推出各种新型的8位、16位和32位单片机,单片机的性能不断完善,品种大量增加,在功能、功耗、体积、价格等方面能满足各种复杂的或简单的应用场合需求,单片机应用深入到各行业和消费类的电子产品中1。单片机是为了实现控制功能而设计的一种微型计算机,它的应用首先是控制功能,即实现计算机控制。目前单片机渗透到我们生活的各个领域。单片机控制技术制药研究如何控制计算机技术和自动控制理论应用于工业生产过程中。随着科学技术的不断发展,单片机报时控制技术的应用领域已经日益广泛,如在冶金、化工、电力、自动化机床、工业机器人控制、柔韧制造系统和计算机集成制造系统等工业测控方面,已经取得了令人瞩目的研究与应用成果,并在国民经济中发挥着越来越大的作用。 报时系统在现代社会中应用很广泛,大到大型的企业集团,小到一个学校的定时系统以及家用的具有智能性的闹钟等。报时系统最重要的一个特性就是体现出其控制时间的准确性、精确性。本设计任务正是以时间为控制对象,设计一个由单片机控制的报时系统。我所设计的基于单片机的自动报时系统,它不仅能实现数字电子时钟的各种功能,如具有较时、调时、定时、闹钟等功能,而且还能实现定点报时的功能。实时时钟可提供秒、分、时、日、星期、月和年,一个月小于31天时可以自动调整,本设计具有简单,实用性强,成本低,使用维护方便,软件功能强,运行稳定可靠等优点2。1.2 本设计的要求1.2.1功能要求电子万年历能显示阳历年、月、日、星期、时、分、秒和阴历月、日,在显示农历时间时,能表明是否为闰年。1.2.2方案论证按照系统审计功能的要求,初步确定系统由主控模块、时钟模块、显示模块和键盘接口模块共4个模块组成,电路系统构成框图如图1.1所示。主控芯片使用51系列AT89C52单片机,时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟DS1302。采用DS1302作为计时芯片,可以做到计时准确。更重要的是,DS1302可以在很小电流的后备电源(2.55.5V电源,在2.5V时耗点小于300nA)下继续计时,而且DS1302可以编程选择多种充电电流来对后备电源进行慢速充电,可以保证后备电源基本不耗电。显示模块采用普通模块采用普通的共阳LED数码管,键输出采用查询法实现功能调整3。时钟电路(DS1302)主控模块(89C52)键扫描电路LED显示电路图1.1 电子万年历电路系统构成框图1.3 本设计的内容1.3.1 硬件根据设计要求,系统的组成框图如图1.1所示,主要由主控制器AT89C52、时钟电路DS1302、显示电路及键扫描电路组成。对于电子万年历来说,硬件系统是它的最基本的框架,是系统的所有功能的基础。硬件的选择和所选硬件的性能对系统的功能实现以及系统的精度都有直接的影响,系统的设计成功与否很大程度上取决于硬件系统的设计。1.3.2 软件 本设计主要采用汇编语言进行编程,同时利用Protel99SE进行电路图的绘制。本设计主要分为3部分,分别是阳历程序、时间调整程序和阴历程序。阳历程序是从DS1302各个寄存器中读出年、周、月、日、时、分、秒等数据。时间调整程序时用来正确的执行调整时间的功能。阴历程序的是要靠阳历日期来推算的。推算方法是,根据阳历当前日期在一年中的天数来计算阴历日期。2 系统硬件电路的设计附录B所示为电子万年历电路设计原理图,系统由主控制器AT89C52、时钟电路DS1302、显示电路及键扫描电路组成。2.1主控制器的设计本设计采用了芯片AT89C52作为核心控制器。AT89C52是ATMEL公司产生的一款性能稳定的8位单片机。AT89C52具有1KB的Flash程序存储器,1个512字节的RAM,4个8位的双向可位寻址I/O端口,3个16位的定时/计数器及1个串行口和6个向量二级中断结构。2.1.1 AT89C52主要性能特点AT89C52的性能特性如下4: 1. 8KB Flash ROM,可以擦除1000次以上,数据保存10年。2. 256字节内部RAM。3. 电源控制模式:1) 时钟可停止和恢复;2) 空闲模式;3) 掉电模式。4. 6个中断源。5. 4个中断优先级。6. 4个8位I/O口。7. 全双工增强型UART。8. 3个16位定时/计数器:T0、T1(标准80C51)和增加的T2(捕获和比较)。9. 全静态工作方式:024MHz。2.1.2 AT89C52引脚图与引脚功能AT89C52的引脚排列如图2.1所示。图2.1 AT89C52的引脚AT89C52的引脚功能介绍如下5:1. RST:复位输入。晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。2. ALE/:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存底8位地址的输出脉冲。在flash编程时,此引脚()也用作编程输入脉冲。在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部 定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。3. :外部程序存储器选通信号()是外部程序存储器选通信号。当AT89C52从外部程序存储器执行外部代码时,在每个机器周期被激活两次,而在访问外部数据存储器时,将不被激活。4. /VPP:访问外部程序存储器控制信号。为使能从0000H到FFFFH的外部程序存储器读取指令,必须接GND。为了执行内部程序指令,应该接VCC。在flash编程期间,也接收12伏VPP电压。5. XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。6. XTAL2:振荡器反相放大器的输出端。7. VCC:电源。8. GND:地。9. P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高电阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8为地址/数据复用。在这种模式下,P0具有内部上拉电阻。10. P1口:P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器驱动4个TTL逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚有一内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),在flash编程和校验时,P1口接收低8位地址字节。P1.0的第二功能是代替T2(定时器/计数器T2的外部计数输入),时钟输出;P1.1的第二功能是代替T2EX(定时器/计数器T2的捕捉/冲在触发信号和方向控制);P1.5的第二功能是代替MOSI(在系统编程用);P1.6的第二功能是代替MISO(在系统编程用);P1.7的第二功能是代替SCK(在系统编程)。11. P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入口使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR)时,P2口送出高八位地址。在这种应用中,P2口使用很强的内部上拉发送1。在使用8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。12. P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89C52特殊功能(第二功能)使用,在flash编程和校验时,P3口也接收一些控制信号。P3.0可代替RXD(串行输入);P3.1可代替TXD(串行输出);P3.2可替代(外部中断0);P3.3可代替(外部中断0);P3.4可代替T0(定时器0外部输入);P3.5可代替T1(定时器1外部输入);P3.6可代替(外部数据存储器写选通);P3.7可代替(外部数据存储器写选通)。2.1.3主控制器的连线图主控制器模块电路图如图2.2所示,RST接复位电路,P1.0/T、P1.1/T和P1.2接按键电路,INT1和INT0接时钟电路,P2.0P2.6、RXD和TXD接显示电路。图2.2 主控制模块电路图2.2 时钟电路的设计2.2.1芯片介绍1. DS1302的性能特性:1) 实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数;2) 用于高速数据暂存的318位RAM;3) 最少引脚的串行I/O;4) 2.55.5V电压工作范围;5) 2.5V时耗电小于300nA;6) 用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式;7) 简单的三线接口;8) 可选的慢速充电(至Vcc1)的能力。DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM。它经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息。对于小于31天的月和月末的日期自动进行调整,还包括闰年校正的功能。时钟的运行可以采用24时或带AM(上午)/PM(下午)的12时的格式。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多字节的时钟信号或RAM数据。DS1302有主电源.后备电源双电源引脚:Vcc1在单电源与电池供电的系统中提供低电源,并提供低功率的电池备份;Vcc2在双电源系统中提供主电源。在这种运用方式中,Vcc1连接到后背电源,以便在没有主电源的情况下能保存时间信息以及数据。DS1302由Vcc1或Vcc2中较大者供电。当Vcc2(Vcc1+0.2V)时,Vcc2给DS1302供电;当Vcc2Vcc1时,DS1302由Vcc1供电6。2.2.2 DS1302数据操作原理DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被输入。无论是读周期还是写周期,开始8位指定40个寄存器中哪个将被访问到。在开始8个时钟周期,把命令字节装入移位寄存器后,另外的时钟周期在读操作时输出数据,在写操作时候写入数据。时钟脉冲的个数在单字节方式下为8+8,在多字节方式下为8+字节数,最大可达248字节数。 如果在传送过程中置RST脚为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。DS1302的引脚及内部结构图如图2.3所示。表2.1所列为各引脚的功能7。电源控制Vcc1Vcc2GND输入移位寄存器实时时钟命令与控制逻辑I/OSCLK振荡器与分频器318RAMX1X23.2768kHz数据总线图2.3 DS1032 引脚及内部结构 DS1302的控制字如图2.4所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。位6如果为0,则表示存取日历时钟数据;为1则表示存取RAM数据。位51(A4A0)指示操作单位的地址。最低有效位(位0)如果为0,则表示要进行写操作;为1表示进行读操作。控制字节总是从最低位开始输入/输出。表2.1 DS1302引脚功能引脚号引脚名称功能1Vcc2主电源2,3X1,X2振荡源,外接32768Hz晶振4GND地线5复位/片选线6I/O串行数据输入/输出端(双向)7SCLK串行数据输入端8Vcc1后备电源 7 6 5 4 3 2 1 01RAM A4A3A2A1A0RAM图2.4 DS1302的控制字 为了提高对32个地址寻址能力(地址/命令位15=逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历寄存器中的地址931或RAM寄存器中的地址31不能存储数据。在多字节方式中,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写所有的31字节。不管是否写了全部31字节,所写的每一字节都将传送至RAM。DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。其日历、时间寄存器及其控制字日表2.2所列,其中奇数为读操作,偶数为写操作。表2.2 内部寄存器地址和内容寄存器名命令字节取值范围寄存器内容写读76543210秒寄存器80H81H0059CH10SECSEC分寄存器82H83H0059010MINMIN时寄存器84H85H0023或011212/24010A/PHRHR日期寄存器86H87H0128、29、30、310010DATEDATE月份寄存器88H89H011200010MMONTH周寄存器8AH8BH010700000DAY年寄存器8CH8DH009910YEARYEAR 时钟暂停:秒寄存器的位7定义位时钟暂停位。当它为1时,DS1302停止振荡,进入低功耗的备份方式,通常在对DS1302进行写操作时(如进入时钟调整程序),停止振荡。当它为0时,时钟将开始启动。 AM-PM/12-24时方式:时寄存器的位7定义为12或24时方式选择位。它为高电平时,选择12时方式。在此方式下,位5是AM/PM位,高电平时表示PM,低电平时表示AM。在24时方式下,位5为第二个10时位(2023h)。 DS1302的晶振选用32768Hz,电容推荐值为6 pF。因为振荡频率较低,也可以不接电容,对计时精度影响不大。2.2.3时钟电路的连线图时钟电路连接如图2.5所示。图2.5 时钟电路2.3 显示电路的设计显示部分采用普通的共阳数码管显示,采用动态扫描,以减少硬件电路。考虑到一次扫描19位数码管显示时会出现闪烁情况,设计时19个数码管分3排同时扫描,第一排6个数码管分别为千年、百年、十年、年、十月、月,第二排6位数码管分别为十时、时、十分、分、十秒、秒,第三排7位数码管分别为星期、阴历十月、阴历月、阴历十日、阴历日、十日、日。显示时采用串行口输出段码,用3片74LS164来驱动3排数码管,这样扫描一次只需7ms。显示电路连接图如图2.6所示。图2.6 显示电路 74LS164内部为8个D触发器,用以实现数据的串行移位。74LS164的特性如表2.3所列。表2.3 74LS164特性表操作模式输入输出复位MRABQ0Q1Q7移位LLQ0Q6HLLLQ0Q6HLHLQ0Q6HHLLQ0Q6HHHHQ0Q6单片机以串行口方式0(移位寄存器方式)输出数据,3片74LS164作为3排共阳数码管的串/并转换显示接口。74LS164为TTL单向8位移位寄存器,可实现串行输入,并行输出。其中A、B(第1、2脚)为串行数据输入端,两个引脚按逻辑“与”运算规律输入信号,只有一个输入信号时可并接,共同作为输入脚。CP(第8脚)为时钟输入端,可连接到串行口的TXD端。每一个时钟信号的上升沿加到CP端时,移位寄存器移一位。8个时钟脉冲过后,8位二进制数全部移入74LS164中。MR脚(第9脚)为复位端,当该脚为低电平时,移位寄存器各位复0;只有当它为高电平时,时钟脉冲才起作用。Q1Q8(第36和1013引脚)并行输出端分别接数码管的h、g、f、e、d、c、b、a各段对应的引脚上(因为串行口从低位开始传送)。在给出了8个脉冲后,最先进入74LS164的第一字节数据到达了最高位。再来一个脉冲,第一个脉冲就会从最高位移出,进入下个74LS164的第一位。3片74LS164首尾相串,而时钟端则接在一起。这样,当输入8个脉冲时,从单片机RXD端输出的第一字节数据就进入到了第一片74LS164中,而当第二个8个脉冲到来后,第一字节数据就进入了第二片74LS164,而随后的第二字节的数据则进入了第一片74LS164。这样,当第三次8个脉冲完成后,首次送出的数据被送到了最下面的164(第三片)中,其他数据一次出现在第二、第一片74LS164中,实现了数据在74LS164中的串行输入、并行输出。在方式0状态下,串行口为同步移位寄存器方式,其波特率是固定的,为fosc/12;数据由RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)端输出;发送、接收数据时,低位在先。因此,根据提供的硬件电路图,在编写程序时,查共阳数码管的段码的二进制数据应该将正常的共阳数码管09的二进制值按位反序排序,例如原来的二进制11000000(C0H),要改为00000011(03H),就能使数码管正常显示8。3 系统程序的设计本设计主要采用汇编语言进行编程,同时利用Protel99SE进行电路图的绘制。本设计主要分为3部分,分别是阳历程序、时间调整程序和阴历程序。3.1阳历程序 因为使用了时钟芯片DS1302,阳历程序只需从DS1302各个寄存器中读出年、周、月、日、时、分、秒等数据,再处理即可。在首次对DS1302进行操作前,必须对它进行初始化,然后从DS1302中读出数据,再经过处理后,送给显示缓冲单元。阳历程序流程图如图3.1所示。开始初始化13021302开始振荡从1302中读出年、周、月、日、时、分、秒读出的数据都为BCD码,将其高低位分离,送显示缓冲单元图3.1 阳历程序流程图3.2时间调整程序 调整时间用2个调整按钮(注:电路图中画有3个按钮,另一个按钮读者可用于减1操作键),1个作为移位、控制用,另外1个作为加调整用,分别定义为控制按钮、加按钮。在调整时间过程中,要调整的位与其他位应该有区别,所以增加了闪烁功能,即调整的位一直在闪烁,直到调整下一位。闪烁原理就是让要调整的位每隔一定时间熄灭一次,比如50ms。利用定时器计时,当达到50ms溢出时,就送给该位熄灭符,在下次溢出时,再送正常显示的值,不断交替,直到调整该位结束,此时送正常显示值给该位,再进入下一位调整闪烁程序。时间调整程序流程图如图3.2所示。3.3阴历程序阴历程序的是要靠阳历日期来推算的。要根据阳历来推算阴历日期,首先要设计算法。推算方法是,根据阳历当前日期在一年中的天数来计算阴历日期。阳历一个月不是30天就是31天(2月除外,闰年2月为29年,平年2月为28天)。阴历一年有12个月或13个月(含闰月),一个月为30天或29天。如果把一个只有29天的月称为小月,用1为标志,把30天的月称为大月,用0为标志,那么12位二进制就能表示一年12个月的大小。如果有闰月,则把闰月的月份作为一字节的高4位,低4位表示闰月大小,大月为0,小月为1.这样,一字节就包含了所有闰月的信息。阴历春节和阳历元旦相差的天数也用一字节表示。总共用4字节就可以存储一年中任何一天阳历与阴历对应关系的有关数据,例如2004年的阴历与阳历对应关系如表3.1所列。 表3.1 2004年的阴历与阳历对应关系表月份123456789101112闰2月大小小大大大小大小大小大小大小天数1000101010101二进制293030302930293029302930十六进制44422255522221控制键有效,进入年调整程序控制键有效,进入月调整程序等待按键程序加键有效年加1控制键有效,进入日调整程序控制键有效,进入星期调整程序控制键有效,进入是调整程序控制键有效,进入分调整程序等待按键程序等待按键程序等待按键程序等待按键程序等待按键程序加键有效加键有效加键有效加键有效加键有效月加1日加1星期加1时加1分加1控制键有效,跳出时间调整程序,进入主循环程序图3.2 时间调整程序流程图 2004年的春节和元旦差21天,这样2004年的信息表示为:21,42H,52H,21H。其中表示12个月大小信息的字节,第4位和第7位不用。第一字节为十进制,其他的都为十六进制。按此方法,50年的阳历和阴历对应关系表总共使用200字节。 有了算法和数据以后,就可设计软件了。先要根据当前阳历的日期,算出阳历为该年中的第几天。图3.3所示为计算阳历中任何一天在该年中为第几天的程序流程图。置阳历总天数为0当前月为1总天数中加入该月天数月数加1与当前月同?总天数中加入号数当前号数是总天数计算阳历天数结束,总天数中的数据为当前日期在阳历年中为第几天NNYY图3.3 计算阳历天数程序流程图 计算出当前阳历日期为该年中的第几天后,再减去阳历该年春节和元旦的日差,如果够减,则相减的结果就是阴历在该年的总第几天了,根据该数据就可以推算出具体的当前阴历日期;如果不够减,则表示当前阴历年为阳历年的前一年。在这种情况下,根据实际,当前阴历日期会处于阴历11月或12月,此时春节和元旦的日差减去前面计算出的当前阳历日期在阳历年为第几天的数据,其结果表示当前阴历日期离春节的天数。计算出的阳历天数为该年的第几天,存放在寄存器R2和R3中。计算出天数后,如果大于FFH,则把FFH存放在R2中,余值存放在R3中。也就是说,在用寄存器R2和R3表示的天数信息中,R2充当主寄存器,数据先存满R2,再存R3。在整个转换程序中,这里面得数据不能被覆盖。 计算出阳历总天数后,就可以根据它来推算阴历日期。推算方法是,先用总天数减去春节和元旦的日差,如果结果为1,则该天正好是春节(因为春节在元旦之后,在计算春节和元旦的日差时,假设元旦为0天,春节为n天,则日差为n,而前面计算的阳历总天数是该天在该年中的第几天,是以元旦为1而得到的,与计算春节和元旦日差的这种方法相比,其数值少了1,所以要在原来本应该以0作为该天就是春节的依据的基础上加1,即以1作为该天是春节的标志);如果结果小于1,则阴历应该是阳历的前一年;如果结果大于1,说明阳历和阴历为同一年。再根据查表所得的该年的阴历的闰月和大小月的信息,就可以推算出该天的阴历日期了。图3.4所示为由总天数推算出阴历日期的程序流程图。程序入口R2减1个月天数减去闰月天数月加1够减下个月为闰月R3=0?R2=R2+R3R3=0R2=0?月份为当前正在减的月份的前一个月的最后一天月份为当前正在减的月份,号数为R2中的值YYNNYNYN图3.4 推算阴历日期的程序流图3.4显示程序采用动态扫描显示,由19个数码管,3个译码器74LS138接1K限流电阻,再接8550三极管接到共阳数码管的COM端作为选通位码,每位选择相应的列。显示程序流程图如3.5所示。初始化调日、秒、月数据调星期数据A数据左移,数据送人R5返回置P2口为1延时1ms扫描字送P2口调农历日、月、年数据ACC.6=0?NY图3.5 显示程序流程图 总结 通过这次万年历的毕业设计,掌握了设计电子系统的基本方法和过程。用汇编语言设计实现的电子万年历,是一个以硬件设计位置,软件配结合使用的过程。这种软件设计与硬件设计的结合,以一片器件代替由多片小规模集成数字电路组成的电路,其优势已经越来越明显。由此可见,在进行系统设计时,如果系统比较复杂,所需器件数目多,并要求体积小、速度快、功耗低时,首先应该考虑用汇编语言来进行芯片设计,然后再进行整体设计。 在这次毕业设计过程中,我从一个对汇编语言还不太懂,算是一个入门的新手,到现在可以基本读懂程序,并会用Keil软件对错误程序进行基本修改的层次,这算是一种进步。通过对电子万年历这个设计任务进行实际设计和调试,这使我产生了对电子技术的浓厚兴趣,相信这种兴趣会在今后的学习工作中起到很大推动作用,我也相信,在今后,我会更深一步的去接触电子产品以及这个行业。致谢 在本次论文设计过程中,赫健老师对该论文从选题,构思到最后定稿的各个环节给予细心指引与教导,使我得以最终完成毕业论文设计。在学习中,老师严谨的治学态度、丰富渊博的知识、敏锐的学术思维、精益求精的工作态度以及诲人不倦的师者风范是我终身学习的楷模,导师们的高深精湛的造诣与严谨求实的治学精神,将永远激励着我。这四年中还得到众多老师的关心支持和帮助。在此,谨向老师们致以衷心的感谢和崇高的敬意! 最后,我要向百忙之中抽出时间对本文进行审阅,评议和参与本人论文答辩的各位老师表示感谢。参考文献1 杨子文.单片机原理及应用M,西安电子科技大学出版社,2006:5-6.2 张友得,赵志英,涂时亮单片微型机原理、应用与实验M。复旦大学出版社,2006:1-3.3 楼然苗,李光飞.单片机课程设计指导M.北京航空航天大学出版社,2007:115-130.4 王幸之,钟爱琴,王雷,王闪.AT89系列单片机原理与接口技术M.北京航空航天大学出版社,2003:20-26.5 吴炳胜,80C51单片机原理与应用技术,贻金工业出版社,2003:53-54.6 张俊谟,单片机中级教程,北京航空航天大学出版社,2006,3:75-76.7 杨将新,李华军,刘东骏.单片机程序设计以应用M.电子工业出本社,2006,3:89-92.8 何立民.单片机应用技术大全M.北京航空航天大学出版社,1994:35-37.附录A 控制程序清单 以下是电子万年历汇编源程序:* 万年历程序 *从1302中读出的数据放在67H(高2位年)、66H(低2位年)、65H(月)64H(星期)、63H(日)、62H(时)、61H(分)、60H(秒)、57H(农历月)、56H(农历日)显示缓冲单元7CH7BH(4CH4BH)(年低位)、7AH79H(4AH49H)(月)、78H(48H)(星期)、77H76H(47H46H)(日)、75H74H(45H44H)(时)、73H72H(43H42H)(分)、71H70H(41H40H)(秒)、5EH5DH(55H54H)(农历年)、5CH5BH(53H52H)(农历月)、5AH59H(51H50H)(农历日)闰月标志为F0,定时器T1为调整时闪烁用SLCR EQU P3.2IO EQU P3.3RS

温馨提示

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

最新文档

评论

0/150

提交评论