《基于Java EE的仓库管理系统.doc》由会员分享,可在线阅读,更多相关《基于Java EE的仓库管理系统.doc(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、毕业设计(论文)课题基于Java EE的仓库管理系统学生系部班级学号指导教师装订交卷日期 毕业设计(论文)成绩评定记录表注:1.此表适用于参加毕业答辩学生的毕业设计(论文)成绩评定;2.平时成绩占20%、卷面评阅成绩占50%、答辩成绩占30%,在上面的评分表中,可分别按20分、50分、30分来量化评分,三项相加所得总分即为总评成绩,总评成绩请转换为优秀、良好、中等、及格、不及格五等级计分。培训与继续教育学院制毕业设计(论文)成绩评定记录表指导教师评语(包含学生在毕业实习期间的表现):成绩(平时成绩): 指导教师签名:年 月 日评阅教师评语:成绩(评阅成绩): 指导教师签名:年 月 日总评成绩:
2、注:1.此表适用于不参加毕业答辩学生的毕业设计(论文)成绩评定;2.平时成绩占40%、卷面评阅成绩占60%,在上面的评分表中,可分别按40分、60分来量化评分,二项相加所得总分即为总评成绩,总评成绩请转换为优秀、良好、中等、及格、不及格五等级计分。培训与继续教育学院制基于Java EE的仓库管理系统 摘要:随着经济的不断繁荣以及加入WTO后市场环境的变化,对企业的生产经营提出了更高的要求,企业必须综合利用各种先进制造技术,在网络与信息技术的支持下,改进现在的生产经营模式和组织结构,才能在市场竞争中赢得更多的份额。随着企业规模的扩大,仓库管理系统将发挥越来越重要的作用。高效方便的仓库管理系统,可
3、以为生产经营提供坚强的后盾和有力的支持。仓库管理系统主要提供一个仓库业务及其作业管理的信息存储和检索系统。通过入库管理、出库管理、报表生成管理、仓库人员管理、仓库位置信息管理等功能模块来实现仓库的综合管理。本论文以标准的仓库管理模式为蓝本,基于Java EE开发出一个可以用于一般单位的仓库管理系统,实现了仓库管理的高效性与安全性。本系统可以方便快捷地实现库管理中的货物登记、出库入库、库房管理等操作,使企业的仓库管理井井有条,为企业的健康发展创造良好的条件。关键词:单片机 数字钟 动态 LED显示第一章 引言随着微电子技术的高速发展,单片机在国民经济的个人领域得到了广泛的运用。单片机以体积小、功
4、能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。电子数字钟是单片机实验中一个很常用的课题,因为它有很好的开放性和可发挥性,不仅考察了实验者对单片机的掌握能力,更加强调了对单片机扩展的应用,而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。数字显示的日历钟已经越来越流行,特别是适合在家庭居室、办公室、大厅、会议室、车站和广场等使用,逐渐受到人们的欢迎。LED数字显示的日历钟显示清晰直观、走时准确、可以进行夜视,并且还可以扩展出多种功能
5、。 第二章 设计方案选择21 主控制部分采用可编程逻辑器件设计。可选用ALTERA公司的FLEX10K系列PLD器件。设计起来结构清晰,各个模块,从硬件上设计起来相对简单,控制与显示的模块间的连接也会比较方便。但是考虑到本设计的特点,EDA在功能扩展上比较受局限,而且EDA占用的资源也相对多一些。从成本上来讲,用可编程逻辑器件来设计也没有什么优势。采用16位单片机设计。16位单片机有丰富的中断源和时基,方便本实验的设计,它的准确度相当高,并且C语言和汇编兼容的编程环境也很方便来实现一些递归调用,I/O口功能也比较强大,方便使用。用凌阳16位单片机做控制器最有特色的就是它的可编程音频处理,可完成
6、语音的录制播放和识别。这些都方便对设计进行扩展,使设计更加完善,成本也相对较低。采用89C51芯片作为硬件核心,内部具有4KB ROM 存储空间,能工作于3V的超低压,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。采用AT89C52,片内ROM全都采用Flash ROM,能以3V的超底压工作,同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调
7、试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏,故应选用AT89C52作为主控制系统。22 显示部分液晶显示方式。采用液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用液晶显示屏.LED数码动态显示方式。LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。操作较液晶显示略显繁琐,但总体同样可以做到比较人性化。所以,最后选择LED数码管动态显示方案。第三章 主要器件简介31 LED显示器311 LED显示器的结构LED
8、显示块是发光二极管显示字段的显示器件。在单片机应用系统中通常使用的是七段LED。七段LED内部由7个条形发光二极管和一个圆点发光二极管组成。图3-1 本设计中采用的是红色七段数码管,每一段数码管内部相当于有一个发光二极管。发光二极管具有单向导电性,只有当外加的正向电压使得正向电流足够大时才发光,它的开启电压比普通二极管的大,在1.8V2.2V之间。正向电流越大,发光越强。内部结构如图3-1。 312 LED的接线形式根据内部发光二极管的接线形式分成共阴极型(公共点接地)和共阳极型(公共点接电源)。单片机与七段显示器的接口,分成静态显示接口和动态显示接口。静态接口是每个七段显示器单独用一组寄存器
9、控制,将其公共点接地;动态接口使用两组寄存器,几个显示器的七段用一组寄存器控制,该寄存器称作段选寄存器,另一组寄存器控制这几个七段显示器的公共点,控制这几个显示器逐个循环点亮。适当选择循环速度,利用人眼“视觉暂留”效应,使看上去好像这几个七段显示器同时在显示一样。控制公共点的寄存器称为位选寄存器。本次设计中采用共阳极型接法,公共级通过一个PNP三极管与12V的电源相连,接口采用动态显示。32 单片机AT89C52简介AT89C52是美国ATMEL公司生产的低电压、高性能的CMOS 8位单片机,片内含8KB的可反复擦写的只读程序存储器(PEROM)和256B的随机存取数据存储器(RAM),器件采
10、用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
11、和XTAL2:时钟引脚,外接晶体引线端。当使用芯片内部时钟时,此两引脚端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。 控制引脚RST/Vpq:RST是复位信号输入端,Vpd是备用电源输入端。当RST输入端保持2个机器周期以上高电平时,单片机完成复位初始化操作。当主电源Vcc发生故障而突然下降到一定低电压或断电时,第2功能Vpd将为片内RAM提供电源以保护片内RAM中的信息不丢失。ALE/PROG:地址锁存允许信号输入端。在存取外存储器时,用于锁存低8位地址信号。当单片机正常工作后,ALE端就周期性地以时钟振荡频率的1/6固定频率向外输出正脉冲信号。此引脚的第2功能PR
12、OG是对片内带有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.0P
13、3.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,定时/计数器,串行通信口及中断系统继续工作。掉电方
14、式保存RAM中的内容,但震荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。AT89C52单片机与MCS-51兼容,它与MCS-51的功能基本相同。 (1)中断源MCS51单片机是一个多中断源的单片机,有五个中断源:外部中断0、定时器0中断、外部中断1、定时器1中断和串行接收或发送中断。各中断源的中断处理程序入口地址如下表31所示:表31 中断向量表中断源入口地址外部中断00003H定时器0000BH外部中断10013H定时器1001BH串行口0023H(2)中断控制 中断的开放或禁止是由中断允许寄存器IE控制的。IE的格式如下:EAESET1EX1ET0EX0EA中断总允许位。EA1,开
15、放总中断,而各个中断源的中断请求是允许还是禁止,分别由各自的中断允许位确定;EA=0,禁止一切中断。ES串行口中断允许位。ET1和ET0分别是定时器T1和T0的中断允许位。EX1和EX0分别是外部中断1(INT1)和外部中断0(INT0)的中断允许位。以上五个中断允许位的意义是:0为禁止中断,1为允许中断。 中断源优先级控制中断优先级寄存器IP。MCS51单片机有高、低两个中断优先级,5个中断源可由程序设置为高优先级中断或低优先级中断,实现二级中断嵌套。一个正在执行的低优先级中断源的中断服务程序,能被高优先级中断源所中断,但不能被同级别的另一个中断源所中断。MCS51单片机的5个中断源的优先级
16、由中断优先级寄存器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位计数
17、器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。这样,不但可以根据计数值计算出定时时间,也可以反过来按定时时间的要求计算出计数器的预置值。计数器是加法计数器,所以预置的计数初值应为计数值的补
18、码。(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时,定时器的计数不受IN
19、T0或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.5
20、V时耗电小于300nA;用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式;简单的3线接口;可选的慢速充电(至Vcc1)的能力。DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM。它经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息。对于小于31天的月和月末的日期自动进行调整,还包括闰年校正的功能。时钟的运行可以采用24h或带AM(上午)/PM(下午)的12h格式。采用三线接口与CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302有主电源/后备电源双电源引脚:Vcc1在单电源与电池供电的系统中
21、提供电源,并提供低功率的电池备份;Vcc2在双电源系统中提供主电源,在这种运用方式中Vcc1连接到备份电,以便在没有主电源的情况下能保存时间信息以及数据。DS1302由Vcc1或Vcc2中较大者供电。当Vcc2大于Vcc10.2V时,Vcc2给DS1302供电;当Vcc2小于Vcc1时,DS1302由Vcc1供电。332 DS1302的数据操作原理DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被输出。无论是读周期还是写周期,开始8位指定40存器中哪个将被访问到。在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的
22、始终周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为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。则表
23、示存取日历时钟数据;为1表示存取RAM数据。位51(A4A0)指示操作单元的地址。最低有效位(位0)如为0,表示要进行写操作;为1表示进行读操作。控制字节总是从最低位开始输入/输出。为了提高对32个地址的寻址能力(地址/命令位15 = 逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历寄存器中的地址931或RAM寄存器中的地址31不能存储数据。在多字节方式中,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写所有31字节,不管是否写了全部31字节,所写的每
24、一字都将传送至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进行写操作时(如进入时钟调整程序),停止振
25、荡。当它为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月份寄存器88H89H011200010M
26、MONTH周寄存器8AH8BH010700000DAY年寄存器8CH8DH009910YEARYEAR表33 内部寄存器地址和内容 DS1302的晶振选用32.768kHz,电容推荐值为6pF,因为振荡频率较低,也可以不接电容,对记时精度影响不大。34 74LS164八位移位寄存器341 74LS164简介74LS164是一个8位移位寄存器,起其主要电特性的典型值如下:型号fmPn54/7416436MHz185mW54/74LS16436MHz80mW当清除(CLEAR)为低电平时,输出端(QAQH)均为低电平。串行数据输入端(A,B)可控制数据。当A、B任意一个为低电平,则禁止新数据输入,
27、在时钟端(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移位LLQ0Q6HLLLQ0Q6HLHLQ0Q6HHLL
28、Q0Q6HHHHQ0Q6表34 74LS164特性表 H 高电平 L 低电平 任意电平(3)时序图如图37:图37 74LS164时序图第四章 线路设计部分根据本课题的要求:数字钟要显示现在的日历时间包括年、月、日、星期、时、分、秒和是否为闰年。所以,需要选用19个共阳极数码管,且选用3片74LS164。数码管要通过74LS164送显,所以19个数码管必须排成3排。设计思想:按照系统设计功能的要求,初步确定设计系统由电源转换模块、主控制模块、时钟模块、显示模块、键盘接口模块共5个模块组成,电路系统构成框图如图41所示:(89C52)主控制模块电源模块键扫描电路DS1302时钟电路显示电路 图4
29、1电路系统构成框图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分别接A
30、T89C52的P3.2,P3.3,P3.4。通过串行输入并行输出来送显示模块。43 显示模块显示部分采用普通的共阳数码管显示,采用动态扫描,以减少硬件电路。考虑到一次扫描19位数码管显示时会出现闪烁情况,设计时19个数码管分为3排同时扫描。第一排6个数码管分别为千年、百年、十年、年、十月、月,第二排6个数码管分别为十时、时、十分、分、十秒、秒,第三排7个数码管分别为星期、阴历十月、阴历月、阴历十日、阴历日、十日、日。显示时采用串行口输出段码,用3片74LS164来驱动3排数码管,这样扫描一次只需7ms。74LS164内部为8个D触发器,用以实现数据的串行移位。单片机一串行口方式0(移位寄存器方
31、式)输出数据,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(因为串行
32、口从低位开始传送)各段对应的引脚上。在给出了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中的串
33、行输入、并行输出。在方式0状态下,串行口为同步移位寄存器方式,其波特率是固定的,为fOSC/12。数据由RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)端输出。发送、接收数据时低位在先。所以根据本小姐下面提供的电路图,在编写程序时,查共阳数码管的段码的二进制数据应该将正常的共阳数码管09的二进制值按位反序排序,如原来的二进制为(C0H),要改为(03H),就能使数码管正常显示了。44 电路图的绘制(如图43)图43 电路图第五章 软件设计部分51 阳历程序的设计因为使用了时钟芯片DS1302,阳历程序只需要从DS1302各寄存器中读出年、周、月、日、小时、分、秒等数据,再处理既
34、可。在首次对DS1302进行操作之前,必须对他进行初始化,然后从DS1302中读出数据,再经过处理后,送给显示缓存单元。阳历程序流程图见图51所示。开 始初始化13021302开始振荡从1302中读出年、周、月、日、小时、分、秒读出的数据都为BCD码,将其高低位分离,送显示缓存 图51 阳历程序流程图阴历程序的实现是要靠阳历日期来推算的,要根据阳历来推算阴历日期,首先要计算法。推算方法就是,根据阳历当前日期在一年中的天数来计算阴历日期。阳历一个月不是30天就是31天(2月除外,闰年2月为29秒天,平年2月为28天)。阴历一年有12个月或13个月(含闰月),一个月为30天 或29天。如果把一个只
35、有29天的月称为小月,用1为标志,把30天的月称为大月,用0为标志,那么12位二进制能表示一年12个月的大小。如果有闰月,则把闰月的月份作为一个字节的高4位,低4位表示闰月大小,大月为0,小月为1,这样一个字节就包含了所有闰月的信息。阴历春节和阳历元旦相差的天数也用一个字节表示。总共用4字节就可以存储一年中任何一天阳历和阴历的对应关系的有关数据,例如2004年的阴历和阳历对应关系表如表51所示。2004年的春节和元旦差21天,这样2004年的信息表示为:21,42H,52H,21H。其中表示12个月大小信息的字节,第4位和第7位不用。第个字节为十进制,其他的都为十六进制。按此方法,50年的阳历
36、和阴历对应关系表总共使用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
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
38、,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
39、,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)有了算法和数据以后,就可以设计软件了。根据当前阳历的日期,算出阳历为该年中的第几天。
40、图52为计算阳历中任何一天在该年中为第几天的流程图。计算出当前阳历日期为该年中的第几天后,再减去阳历该年春节和元旦的日差,如果够减,则相减的结果就是阴历在该年的总第几天了。根据该数据就可以推算出具体的当前阴历日期;如果不够减,则表示当前阴历年为阳历年的前一年。这种情况下,根据实际,当前阴历日期会处于阴历11月或12月,此时春节和元旦的日差减去前面计算出的当前阳历日期在阳历年为第几天的数据,其结果表示当前阴历日期离春节的天数。计算出阳历天数为该年的第几天,存放在R2和R3中。计算出天数后如果大于#FFH,则把#FFH存放在R2中,余值存放在R3中。也就是说在用积存器R2和R3表示的天数信息中,R
41、2充当主积存器,数据先存满R2,再存R3。在整个转换程序中,这里面的数据不能被覆盖。 计算出阳历总天数后,就可以根据它来推算阴历日期。推算方法是,先用总天数减去春节和元旦的日差,如果结果为1,则该天正好是春节(因为春节在元旦之后,在计算春节和元旦的日差时,假设元旦为0天,春节为n天,则日差为n。前面计算的阳历总天数是该天在该年中的第几天,是以元旦为1而得到的,与计算春节和元旦日差的这种方法相比,其数值少了1,所以要在原来本应该以0作为该天就是春节的依据的基础上加1,所以以1作为该天是春节的标志);如果结果小于1,则阴历应该是阳历的前一年;如果结果大于1,说明阳历和阴历为同一年。再根据查表所得的
42、该年的阴历的闰月和大小月的信息,就可以推算出该天的阴历日期了。图53为由总天数推算出阴历日期的程序流程图。Y总天数加入号数 Y当前数是总天数NN与当前月是否同同与当前月同?月数加1总天数中加入该月天数当前月为1月?置阴历总天数为0计算阳历天数结束,总天数中的为当前日期在阳历年中的第几天 图52计算阳历天数程序流程图程序入口NR2=0? 月份为当前正在减的月份,号数为R2中的值Y月份为当前正在减的月份的前一个月的最后一天YNR3=0?R2=R2+R3R3=0N下个月为闰月?够减YYN月加1减去闰月天数R2减1月天数 图53推算阴历日期的程序流程图52 时间调整程序设计调整时间用3个调整按纽,1个
43、作为移位、控制用,另外2个作为加个减用,分别定义为控制按纽、加按纽、减按纽。在调整时间过程中,要调整的位与别的位应该有区别,所以增加了闪烁功能,即调整的位一直在闪烁,直到调整下一位。闪烁原理就是,让要调整的一位每隔一定时间熄灭一次,比如说50ms。利用定时器记时,当到达50ms溢出时,就送给该位熄灭符,在下一次溢出时,再送正常显示的值,不断交替,直到调整该位结束。此时送正常显示值给该位,再进入下一位调整闪烁程序。时间调整程序流程图如图52所示。图54时间调整程序流程图第六章 实验测试部分61 硬件测试电子万年历的电路系统较大,对于焊接方面更是不可轻视,庞大的电路系统中只要出于一处的错误,则会对检测造成很大的不便,而且电路的交线较多,对于各种锋利的引脚要注意处理,否则会刺被带有包皮的导线,则会对电路造成短路现象。(1)LED数码管的断码错乱,原因出于没有认真看清a、b 、c等引脚信息。解决方法:重新排列74LS47的输出端,相应接入LED数码管,即可解决出现在的断码或乱码。(2)对万年历修改时间或日期时,有时LED数码管被屏蔽掉,造成不亮现象。解决方法:根据仪器的测试,发现电路的驱动能力不足,最后在DS1302时钟芯片的/CS、SCLK、RET端接入5.1K的上拉电阻后,电路的驱动能力才能满足,即可解决不亮现象。62 软件测试电子万年历是多功能的数字型,可以看当前日期
限制150内