

免费预览已结束,剩余33页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计(论文) java开发毕业设计(论文)课题学生系部班级学号指导教师装订交卷日期年 月 日毕业设计(论文)成绩评定记录表指导教师评语(包含学生在毕业实习期间的表现):成绩(平时成绩): 指导教师签名:年 月 日评阅教师评语:成绩(评阅成绩): 指导教师签名:年 月 日答辩情况记录:答辩成绩:答辩委员会主任(或答辩教师小组组长)签名:年 月 日总评成绩:注:1.此表适用于参加毕业答辩学生的毕业设计(论文)成绩评定;2.平时成绩占20%、卷面评阅成绩占50%、答辩成绩占30%,在上面的评分表中,可分别按20分、50分、30分来量化评分,三项相加所得总分即为总评成绩,总评成绩请转换为优秀、良好、中等、及格、不及格五等级计分。培训与继续教育学院制毕业设计(论文)成绩评定记录表指导教师评语(包含学生在毕业实习期间的表现):成绩(平时成绩): 指导教师签名:年 月 日评阅教师评语:成绩(评阅成绩): 指导教师签名:年 月 日总评成绩:注:1.此表适用于不参加毕业答辩学生的毕业设计(论文)成绩评定;2.平时成绩占40%、卷面评阅成绩占60%,在上面的评分表中,可分别按40分、60分来量化评分,二项相加所得总分即为总评成绩,总评成绩请转换为优秀、良好、中等、及格、不及格五等级计分。培训与继续教育学院制基于mcs-51单片机的数字钟设计摘要:单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能ic卡、电子宠物等,这些都离不开单片机。单片机是集cpu ,ram ,rom ,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,从而达到学习、设计、开发软(硬)件的能力。 本文通过对一个基于单片机的能实现万年历功能电子时钟的设计,从而达到学习、了解单片机相关指令在各方面的应用,数码管与单片机的接口采用动态显示技术,利用了rtc芯片的系统自带电池功能来实现断电时保存一些重要数据,以便来电时正确显示信息的功能。系统由主控制器at89c51、时钟电路ds1302、显示电路、按键电路、和复位电路等部分构成,能实现时钟日历显示的功能,能进行时、分、秒的显示。关键词:单片机 数字钟 动态 led显示第一章 引言随着微电子技术的高速发展,单片机在国民经济的个人领域得到了广泛的运用。单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。电子数字钟是单片机实验中一个很常用的课题,因为它有很好的开放性和可发挥性,不仅考察了实验者对单片机的掌握能力,更加强调了对单片机扩展的应用,而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。数字显示的日历钟已经越来越流行,特别是适合在家庭居室、办公室、大厅、会议室、车站和广场等使用,逐渐受到人们的欢迎。led数字显示的日历钟显示清晰直观、走时准确、可以进行夜视,并且还可以扩展出多种功能。 第二章 设计方案选择21 主控制部分采用可编程逻辑器件设计。可选用altera公司的flex10k系列pld器件。设计起来结构清晰,各个模块,从硬件上设计起来相对简单,控制与显示的模块间的连接也会比较方便。但是考虑到本设计的特点,eda在功能扩展上比较受局限,而且eda占用的资源也相对多一些。从成本上来讲,用可编程逻辑器件来设计也没有什么优势。采用16位单片机设计。16位单片机有丰富的中断源和时基,方便本实验的设计,它的准确度相当高,并且c语言和汇编兼容的编程环境也很方便来实现一些递归调用,i/o口功能也比较强大,方便使用。用凌阳16位单片机做控制器最有特色的就是它的可编程音频处理,可完成语音的录制播放和识别。这些都方便对设计进行扩展,使设计更加完善,成本也相对较低。采用89c51芯片作为硬件核心,内部具有4kb rom 存储空间,能工作于3v的超低压,而且与mcs-51系列单片机完全兼容,但是运用于电路设计中时由于不具备isp在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。采用at89c52,片内rom全都采用flash rom,能以3v的超底压工作,同时也与mcs-51系列单片机完全该芯片内部存储器为8kb rom 存储空间,同样具有89c51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏,故应选用at89c52作为主控制系统。22 显示部分液晶显示方式。采用液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用液晶显示屏.led数码动态显示方式。led数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。操作较液晶显示略显繁琐,但总体同样可以做到比较人性化。所以,最后选择led数码管动态显示方案。第三章 主要器件简介31 led显示器311 led显示器的结构led显示块是发光二极管显示字段的显示器件。在单片机应用系统中通常使用的是七段led。七段led内部由7个条形发光二极管和一个圆点发光二极管组成。图3-1 本设计中采用的是红色七段数码管,每一段数码管内部相当于有一个发光二极管。发光二极管具有单向导电性,只有当外加的正向电压使得正向电流足够大时才发光,它的开启电压比普通二极管的大,在1.8v2.2v之间。正向电流越大,发光越强。内部结构如图3-1。 312 led的接线形式根据内部发光二极管的接线形式分成共阴极型(公共点接地)和共阳极型(公共点接电源)。单片机与七段显示器的接口,分成静态显示接口和动态显示接口。静态接口是每个七段显示器单独用一组寄存器控制,将其公共点接地;动态接口使用两组寄存器,几个显示器的七段用一组寄存器控制,该寄存器称作段选寄存器,另一组寄存器控制这几个七段显示器的公共点,控制这几个显示器逐个循环点亮。适当选择循环速度,利用人眼“视觉暂留”效应,使看上去好像这几个七段显示器同时在显示一样。控制公共点的寄存器称为位选寄存器。本次设计中采用共阳极型接法,公共级通过一个pnp三极管与12v的电源相连,接口采用动态显示。32 单片机at89c52简介at89c52是美国atmel公司生产的低电压、高性能的cmos 8位单片机,片内含8kb的可反复擦写的只读程序存储器(perom)和256b的随机存取数据存储器(ram),器件采用atmel公司的高密度、非易失性存储技术生产,与标准的mcs-51指令系统及8052产品引脚兼容,片内置通用8位中央处理器(cpu)和flash存储单元,功能强大。at89c52单片机适合于许多较为复杂控制应用场合。321 at89c52主要性能参数at89c52单片机为40引脚双列直插芯片,共有4个8位的i/o口(p0、p1、p2、p3),每一条i/o线都能独立地作输出或输入。如图32所示。(1)内部结构按功能分为8部分:cup,程序存储器,数据存储器,时钟电路,串行口,并行i/o口,中断系统,定时/计数器。(2)引脚定义及功能 电源及时钟引脚vcc:接+5v 电源 vss:接地xtal1和xtal2:时钟引脚,外接晶体引线端。当使用芯片内部时钟时,此两引脚端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。 控制引脚rst/vpq:rst是复位信号输入端,vpd是备用电源输入端。当rst输入端保持2个机器周期以上高电平时,单片机完成复位初始化操作。当主电源vcc发生故障而突然下降到一定低电压或断电时,第2功能vpd将为片内ram提供电源以保护片内ram中的信息不丢失。ale/prog:地址锁存允许信号输入端。在存取外存储器时,用于锁存低8位地址信号。当单片机正常工作后,ale端就周期性地以时钟振荡频率的1/6固定频率向外输出正脉冲信号。此引脚的第2功能prog是对片内带有4k字节eprom的8751固外程序时,作为编程脉冲输入端。psen:程序存储器允许输出端。当片外程序存储器的读选通信号,低电平有效。cpu从外部程序存储器取指令时,psen信号会自动产生负脉冲,作为外部程序存储器的选通信号。ea/vpp:程序存储器地址允许输入端。当ea为高电平时,cpu执行片内程序存储器指令,但当pc中的值超过0fffh时,将自动转向执行片外程序存储器指令;当ea为低电平时,cpu只执行片外程序存储器指令。 i/o口引脚p0.0p0.7:p0口8位双向i/o口;p1.0p1.7:p1口8位准双向i/o口;p2.0p2.7:p2口8位准双向i/o口;p3.0p3.7:p3口8位准双向i/o口。(3)片外总线结构分为三部分:数据总线 data bus(db),地址总线 address bus (ab),控制总线 control bus(cb).图32322 at89c52单片机的功能特性概述at89c52提供以下标准功能:8k字节flash闪速存储器,256字节内部ram,32个i/o口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内震荡器及时钟电路。同时,at89c52可降至0hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止cpu的工作,但允许ram,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存ram中的内容,但震荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。at89c52单片机与mcs-51兼容,它与mcs-51的功能基本相同。 (1)中断源mcs51单片机是一个多中断源的单片机,有五个中断源:外部中断0、定时器0中断、外部中断1、定时器1中断和串行接收或发送中断。各中断源的中断处理程序入口地址如下表31所示:表31 中断向量表中断源入口地址外部中断00003h定时器0000bh外部中断10013h定时器1001bh串行口0023h(2)中断控制 中断的开放或禁止是由中断允许寄存器ie控制的。ie的格式如下:eaeset1ex1et0ex0ea中断总允许位。ea1,开放总中断,而各个中断源的中断请求是允许还是禁止,分别由各自的中断允许位确定;ea=0,禁止一切中断。es串行口中断允许位。et1和et0分别是定时器t1和t0的中断允许位。ex1和ex0分别是外部中断1(int1)和外部中断0(int0)的中断允许位。以上五个中断允许位的意义是:0为禁止中断,1为允许中断。 中断源优先级控制中断优先级寄存器ip。mcs51单片机有高、低两个中断优先级,5个中断源可由程序设置为高优先级中断或低优先级中断,实现二级中断嵌套。一个正在执行的低优先级中断源的中断服务程序,能被高优先级中断源所中断,但不能被同级别的另一个中断源所中断。mcs51单片机的5个中断源的优先级由中断优先级寄存器ip的相应位设定。ip格式如下:pspt1px1pt0px0ps是串行口的中断优先级控制位。pt1和pt0分别是定时器t1和t0的中断优先级控制位。px1和px0分别是外部中断int1和int0的中断优先级控制位。中断优先级控制位的意义是:0为设定为低优先级中断源;1为设定为高优先级中断。 如果同优先级的多个中断请求同时出现时,则按mcs51单片机的cpu查询次序确定那个中断请求被响应,其查询次序为:ie0、tf0、ie1、tf1、ri或ti。(3)定时器的结构mcs51单片机的定时器由计数器0、计数器1、方式控制寄存器和定时器控制寄存器组成。计数器0和计数器1分别由8位计数器th0、tl0和th1和tl1构成。th0、tl0、th1、tl1是不能位寻址的特殊功能寄存器,通过对th0、tl0、th1、tl1的初始化编程来控制t0和t1的计数初值。mcs51单片机的两个计数器th0、tl0和th1、tl1可以构成16位的计数器、13位的计数器和8位的计数器。计数器是定时器t0和t1的核心,它可以对引线t0和t1来的外部事件计数;也可以对单片机的机器周期计数。一个机器周期等于12个振荡脉冲周期,因此计数频率为振荡频率的1/12。这样,不但可以根据计数值计算出定时时间,也可以反过来按定时时间的要求计算出计数器的预置值。计数器是加法计数器,所以预置的计数初值应为计数值的补码。(4)定时器的工作方式mcs51单片机的t0有方式0、方式1、方式2和方式3四种工作方式。t1有方式0、方式1和方式2三种工作方式。工作方式控制寄存器tmod:tmod寄存器是不能位寻址的特殊功能寄存器,用于控制t1和t0的工作方式,各位的定义如下:gatec/tm1m0gatec/tm1m0tmod的高半字节和低半字节的定义相同,高半字节用于控制t1,低半字节用于控制t0,其中,gate是门控位。gate为1时,定时器的计数器受外部引线int0或int1输入电平的控制,输入高电平计数,输入低电平停止计数,这时可以用于测量在intx引线出现的正脉冲宽度;gate为0时,定时器的计数不受int0或int1引线的控制。c/t是定时器和计数器选择位。c/t为1,选择计数器方式,计数器thi和tli对ti引线输入的外部事件计数;c/t为0,选择定时器方式,计数器thi和tli对机器周期进行计数。m1和m0是定时器的工作方式选择位。m1和m0这2位有0011四个状态,分别选择方式0(13位定时器)、方式1(16位定时器)、方式2(8位自动重装载定时器)和方式3(t0分成两个8位的定时器)。33 ds1302芯片331 ds1302的性能特性ds1302芯片即实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数;用于高速数据暂存的318位ram;2.55.5v电压工作范围;2.5v时耗电小于300na;用于时钟或ram数据读/写的单字节或多字节(脉冲方式)数据传送方式;简单的3线接口;可选的慢速充电(至vcc1)的能力。ds1302时钟芯片包括实时时钟/日历和31字节的静态ram。它经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息。对于小于31天的月和月末的日期自动进行调整,还包括闰年校正的功能。时钟的运行可以采用24h或带am(上午)/pm(下午)的12h格式。采用三线接口与cpu 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或ram数据。ds1302有主电源/后备电源双电源引脚:vcc1在单电源与电池供电的系统中提供电源,并提供低功率的电池备份;vcc2在双电源系统中提供主电源,在这种运用方式中vcc1连接到备份电,以便在没有主电源的情况下能保存时间信息以及数据。ds1302由vcc1或vcc2中较大者供电。当vcc2大于vcc10.2v时,vcc2给ds1302供电;当vcc2小于vcc1时,ds1302由vcc1供电。332 ds1302的数据操作原理ds1302在任何数据传送时必须先初始化,把rst脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在sclk的上升沿被输出。无论是读周期还是写周期,开始8位指定40存器中哪个将被访问到。在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的始终周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8加8,在多字节方式下为8加字节数,最大可达248字数。如果在传送过程中置rst脚为低电平,则会中止本次数据传送,并且i/o引脚变为高阻态。上电运行时,在vcc 2.5v之前,rst脚必须保持低电平。只有在sclk为低电平时,才能将rst置为高电平。ds1302的引脚及内部结构图如图33所示,表32为各引脚的功能。图33 ds1302引脚图及内部结构 图34 ds1302的控制字ds1302的控制字如图34所示。控制字节的最高有效位(位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个寄存器。但是,当以多字节方式写ram时,为了传送数据不必写所有31字节,不管是否写了全部31字节,所写的每一字都将传送至ram。引脚号引脚名称功能1vcc2主电源2,3x1,x2震荡源,外接32.768khz晶振4gnd地线5rst复位/片选线6i/o串行数据输入/输出端(双向)7sclk串行数据输入端8vcc1后备电源表32 ds1302引脚功能图35 ds1302数据读/写时序ds1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为bcd码形式。其日历、时间寄存器及其控制字见表33,其中奇数为读操作,偶数为写操作。时钟暂停:秒寄存器的位7定义位时钟暂停位。当它为1时,ds1302停止振荡,进入低功耗的备份方式。通常在对ds1302进行写操作时(如进入时钟调整程序),停止振荡。当它为0时,时钟将开始启动。am-pm/12-24小时方式:小时寄存器的位7定义为12或24小时方式选择位。它为高电平时,选择12小时方式。在此方式下,位5是am/pm位,此位是高电平时表示pm,低电平表示am。在24小时方式下,位5为第二个10小时位(2023h)。寄存器名命令字节取值范围寄存器内容写读76543210秒寄存器80h81h0059ch10ssec分寄存器82h83h0059010minmin小时寄存器84h85h0023或011212/24010a/phrhr日期寄存器86h87h0128,29,30,310010datedate月份寄存器88h89h011200010mmonth周寄存器8ah8bh010700000day年寄存器8ch8dh009910yearyear表33 内部寄存器地址和内容 ds1302的晶振选用32.768khz,电容推荐值为6pf,因为振荡频率较低,也可以不接电容,对记时精度影响不大。34 74ls164八位移位寄存器341 74ls164简介74ls164是一个8位移位寄存器,起其主要电特性的典型值如下:型号fmpn54/7416436mhz185mw54/74ls16436mhz80mw当清除(clear)为低电平时,输出端(qaqh)均为低电平。串行数据输入端(a,b)可控制数据。当a、b任意一个为低电平,则禁止新数据输入,在时钟端(clock)脉冲上升沿作用下q0为低电平。当a、b有一个为高电平,则另一个就允许输入数据,并在clock上升沿作用下决定q0的状态。各引出端符号,其管脚图如图36:clock(时钟输入端) clear(同步清楚输入端、低电平有效)a,b(串行数据输入端) qaqh(输出端) 图36 74ls164管脚图342 74ls164逻辑介绍(1)极限值: 电源电压7v 输入电压5.5v 储存温度(65150c) 工作环境温度:54164(55125c) 74164(070c)(2)真值表如表34:操作模式输入输出复位mrabq0q1q7移位llq0q6hlllq0q6hlhlq0q6hhllq0q6hhhhq0q6表34 74ls164特性表 h 高电平 l 低电平 任意电平(3)时序图如图37:图37 74ls164时序图第四章 线路设计部分根据本课题的要求:数字钟要显示现在的日历时间包括年、月、日、星期、时、分、秒和是否为闰年。所以,需要选用19个共阳极数码管,且选用3片74ls164。数码管要通过74ls164送显,所以19个数码管必须排成3排。设计思想:按照系统设计功能的要求,初步确定设计系统由电源转换模块、主控制模块、时钟模块、显示模块、键盘接口模块共5个模块组成,电路系统构成框图如图41所示:(89c52)主控制模块电源模块键扫描电路ds1302时钟电路显示电路 图41电路系统构成框图41 电源转换模块日常用到的都是220v的交流电源,所以,需要用变压器将其转换为线路设计中所用到的直流电源。此转换后的直流电源为+12v,而线路设计中许多芯片所用到的电压为+5v,因此,还需有12v到5v的转换电路。此转换采用7805(三端稳压器)来完成,当vin5v时,vout端可得到稳定的5v电压。图中104pf电容的作用是去高频干扰,转换图如下:7805vin=12vvout=5v470uf 470uf 104pf 图4-2 7805电压转换电路42 主控制模块此模块由实时时钟芯片ds1302和at89c52组成。ds1302只有3个管脚sclk,i/o,rst分别接at89c52的p3.2,p3.3,p3.4。通过串行输入并行输出来送显示模块。43 显示模块显示部分采用普通的共阳数码管显示,采用动态扫描,以减少硬件电路。考虑到一次扫描19位数码管显示时会出现闪烁情况,设计时19个数码管分为3排同时扫描。第一排6个数码管分别为千年、百年、十年、年、十月、月,第二排6个数码管分别为十时、时、十分、分、十秒、秒,第三排7个数码管分别为星期、阴历十月、阴历月、阴历十日、阴历日、十日、日。显示时采用串行口输出段码,用3片74ls164来驱动3排数码管,这样扫描一次只需7ms。74ls164内部为8个d触发器,用以实现数据的串行移位。单片机一串行口方式0(移位寄存器方式)输出数据,3片74ls164作为3排共阳数码管的串/并转换显示借口。74ls164为ttl单向8位移位寄存器,可以实现串行输入,并行输出。其中a、b(第1、2管脚)为串行数据输入端,2个引脚按逻辑“与”运算规律输入信号,共一个输入信号时可以并接,共同作为输入脚。cp(第8脚)为时钟输入端,可连接到串行口的txd端。每一个时钟信号的上升沿加到cp 端时,移位寄存器移一位。8个时钟脉冲过后,8位二进制数全部移入74ls164中。mr(第9脚)为复位端,当该脚为低电平时,移位寄存器各位复0;只有当它为高电平时,时钟脉冲才起作用。q1q8(第36和1013引脚)并行输出端分别数码管的ha(因为串行口从低位开始传送)各段对应的引脚上。在给出了8个脉冲后,最先进入74ls164的第1个字节数据到达了最高位。再来1个脉冲,第1个脉冲就会从最高位移出,进入下个74ls164的第1位。3片74ls164首尾相串,而时钟端则接在一起。这样,当输入8个脉冲时,从单片机rxd端输出的第1字节数据就进入了第1片74ls164中,而当第2个8个脉冲到来后,第1字节数据就进入了第2片74ls164,而随后的第2字节的数据则进入了第1片74ls164。这样,当第3个8个脉冲完成后,首次送出的数据被送到了最下面的164(第3片)中,其它数据依次出现在第2和第1片74ls164中,实现了数据在74ls164中的串行输入、并行输出。在方式0状态下,串行口为同步移位寄存器方式,其波特率是固定的,为fosc/12。数据由rxd(p3.0)端输入或输出,同步移位脉冲由txd(p3.1)端输出。发送、接收数据时低位在先。所以根据本小姐下面提供的电路图,在编写程序时,查共阳数码管的段码的二进制数据应该将正常的共阳数码管09的二进制值按位反序排序,如原来的二进制为11000000(c0h),要改为00000011(03h),就能使数码管正常显示了。44 电路图的绘制(如图43)图43 电路图第五章 软件设计部分51 阳历程序的设计因为使用了时钟芯片ds1302,阳历程序只需要从ds1302各寄存器中读出年、周、月、日、小时、分、秒等数据,再处理既可。在首次对ds1302进行操作之前,必须对他进行初始化,然后从ds1302中读出数据,再经过处理后,送给显示缓存单元。阳历程序流程图见图51所示。开 始初始化13021302开始振荡从1302中读出年、周、月、日、小时、分、秒读出的数据都为bcd码,将其高低位分离,送显示缓存 图51 阳历程序流程图阴历程序的实现是要靠阳历日期来推算的,要根据阳历来推算阴历日期,首先要计算法。推算方法就是,根据阳历当前日期在一年中的天数来计算阴历日期。阳历一个月不是30天就是31天(2月除外,闰年2月为29秒天,平年2月为28天)。阴历一年有12个月或13个月(含闰月),一个月为30天 或29天。如果把一个只有29天的月称为小月,用1为标志,把30天的月称为大月,用0为标志,那么12位二进制能表示一年12个月的大小。如果有闰月,则把闰月的月份作为一个字节的高4位,低4位表示闰月大小,大月为0,小月为1,这样一个字节就包含了所有闰月的信息。阴历春节和阳历元旦相差的天数也用一个字节表示。总共用4字节就可以存储一年中任何一天阳历和阴历的对应关系的有关数据,例如2004年的阴历和阳历对应关系表如表51所示。2004年的春节和元旦差21天,这样2004年的信息表示为:21,42h,52h,21h。其中表示12个月大小信息的字节,第4位和第7位不用。第个字节为十进制,其他的都为十六进制。按此方法,50年的阳历和阴历对应关系表总共使用200字节。月份123456789101112闰2月大小小大大大小大小大小大小大小天数1000101010101二进制29303030293029302930293016进制425221表512004年阴历和阳历对应关系表2000 2050年的关系表:35,15h,51h,00h(2000)23,11h,52h,41h(2001)42,12h,65h,00h(2002)31,11h,32h,00h(2003)21,42h,52h,21h(2004)39,52h,25h,00h(2005)28,25h,04h,71h(2006)48,66h,42h,00h(2007)37,33h,22h,00h(2008)25,15h,24h,51h(2009)44,05h,52h,00h(2010)33,22h,65h,00h(2011)22,21h,25h,41h(2012)40,24h,52h,00h(2013)30,52h,42h,91h(2014)49,55h,05h,00h(2015)38,26h,44h,00h(2016)27,53h,50h,60h(2017)46,53h,24h,00h(2018)35,25h,54h,00h(2019)24,41h,52h,41h(2020)42,45h,25h,00h(2021)31,24h,52h,00h(2022)21,51h,12h,21h(2023)40,55h,11h,00h(2024)28,26h,21h,61h(2025)47,26h,61h,00h(2026)36,13h,31h,00h(2027)25,05h,31h,51h(2028)43,12h,54h,00h(2029)33,51h,25h,00h(2030)22,42h,25h,31h(2031)41,32h,22h,00h(2032)30,55h,02h,71h(2033)49,55h,22h,00h(2034)38,26h,62h,00h(2035)27,13h,64h,60h(2036)45,13h,32h,00h(2037)34,12h,55h,00h(2038)23,10h,53h,51h(2039)42,22h,45h,00h(2040)31,52h,22h,00h(2041)21,52h,44h,21h(2042)40,55h,44h,00h(2043)29,26h,50h,71h(2044)47,26h,64h,00h(2045)36,25h,32h,00h(2046)25,23h,32h,50h(2047)44,44h,55h,00h(2048)32,24h,45h,00h(2049)22,55h,11h,30h(2050)有了算法和数据以后,就可以设计软件了。根据当前阳历的日期,算出阳历为该年中的第几天。图52为计算阳历中任何一天在该年中为第几天的流程图。计算出当前阳历日期为该年中的第几天后,再减去阳历该年春节和元旦的日差,如果够减,则相减的结果就是阴历在该年的总第几天了。根据该数据就可以推算出具体的当前阴历日期;如果不够减,则表示当前阴历年为阳历年的前一年。这种情况下,根据实际,当前阴历日期会处于阴历11月或12月,此时春节和元旦的日差减去前面计算出的当前阳历日期在阳历年为第几天的数据,其结果表示当前阴历日期离春节的天数。计算出阳历天数为该年的第几天,存放在r2和r3中。计算出天数后如果大于#ffh,则把#ffh存放在r2中,余值存放在r3中。也就是说在用积存器r2和r3表示的天数信息中,r2充当主积存器,数据先存满r2,再存r3。在整个转换程序中,这里面的数据不能被覆盖。 计算出阳历总天数后,就可以根据它来推算阴历日期。推算方法是,先用总天数减去春节和元旦的日差,如果结果为1,则该天正好是春节(因为春节在元旦之后,在计算春节和元旦的日差时,假设元旦为0天,春节为n天,则日差为n。前面计算的阳历总天数是该天在该年中的第几天,是以元旦为1而得到的,与计算春节和元旦日差的这种方法相比,其数值少了1,所以要在原来本应该以0作为该天就是春节的依据的基础上加1,所以以1作为该天是春节的标志);如果结果小于1,则阴历应该是阳历的前一年;如果结果大于1,说明阳历和阴历为同一年。再根据查表所得的该年的阴历的闰月和大小月的信息,就可以推算出该天的阴历日期了。图53为由总天数推算出阴历日期的程序流程图。y总天数加入号数 y当前数是总天数nn与当前月是否同同与当前月同?月数加1总天数中加入该月天数当前月为1月
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年智慧医疗趋势分析报告:精准医疗与大数据融合应用
- 2025年基因治疗药物临床研发新趋势分析:市场前景与产业布局报告
- 2025年工业互联网平台网络切片技术在智慧工厂生产安全中的应用报告
- 2025年干细胞治疗神经系统疾病临床应用案例分析及启示报告
- 日照航海考试题及答案
- 癌症耐药凋亡机制-洞察及研究
- 设备技术服务合同范本
- 装修材料保证合同范本
- 酒店供货付款合同范本
- 风场道路维修合同范本
- 股权转让担保责任及权益保护合同
- 1 学习伴我成长(教学设计)-2024-2025学年统编版(2024)道德与法治三年级上册
- 2025年安全工程师《安全生产管理》考前模拟卷(一)
- 2024年青海省行政执法资格考试备考题库及答案(题型)
- 2025-2026学年第一学期校园“1530”安全教育记录表
- 2025年注册安全工程师考试(初级)安全生产法律法规试卷及答案
- 开发基于多模态大模型的CST2差异化评课模型及其应用案例
- 人教版3到6年级单词表打印版(小学必背单词3000打印版)
- MOOC 研究生学术规范与学术诚信-南京大学 中国大学慕课答案
- 净化实验室施工组织方案
- 110KV变电站负荷及短路电流计算及电气设备的选择及校验
评论
0/150
提交评论