《基于mega16数字万年历设计毕业论文设计.doc》由会员分享,可在线阅读,更多相关《基于mega16数字万年历设计毕业论文设计.doc(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、长春理工大学毕业设计编号 本科生毕业论文基于Mega16的数字万年历The Digital Perpetual Calendar Based On Mega162009年 6 月长春理工大学毕业设计摘要随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。尤其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来的诸多方便。本文介绍了一种基于AVR单片机Mega16的数字万年历的设计。本设计以Mega16为核心控制器,其外围电路包括液晶显示模块,时钟模块,键盘模块和闹铃模块等。软件部分用C语言进行编程,实现设计的一切功能。此数字万年历不仅能显示分
2、,时,秒,年,月,日,而且具有以下功能:显示农历,闹钟时间设置,闹钟音乐选择,整点报时和断电后自由调整时间。本设计硬件电路简单,难点在于软件编程中的公农历转换,设计完成后经测试基本实现了上述的功能关键词:Mega16 万年历 公农历转换 液晶AbstractAlong with the technical and quick development in electronics, appear with the large-scale integrated circuit especially, give mankind the life brought the changes of the
3、root. The coal gas reports to the police the system publishes, scribing the electronics measure the instrument walked into the arithmetic figure turns the ages ts function is strong, the function is well-found, technique forerunner, will quickly technical development in science.In the paper, it intr
4、oduces a design of digital Calendar based on mega16.the design made Mega16 as the core controller, the peripheral circuits, including liquid crystal display module, clock module, the keyboard module and alarm module. Software with C language programming , achieves all functions of design. This calen
5、dar will not only show the number of points, the second, year, month, day, and have the following functions: display Chinese, the alarm time set, alarm clock, music selection, the whole point of time and free to adjust the time after power outages. The design of hardware circuits is simple, difficul
6、t in the Chinese public conversion, the design has been tested after the completion of the basic functions to achieve the above-mentionedKey words:Mega16,Calendar, Lunar conversion of public, LCD 目录目录1第一章 绪论31.1研究目的和意义31.2 国内外研究现状31.3本设计研究的内容3第二章 系统整体设计方案52.1 系统功能分析52.2 系统方案论证52.2.1 时钟模块52.2.2键盘模块52
7、.2.3 显示模块6第三章 系统硬件设计73.1 Mega16单片机电路设计73.1.1 Mega16的介绍73.1.2 Mega16的引脚图及引脚说明83.2 时钟接口电路103.2.1 简介103.2.2 引脚介绍及其功能103.2.3DS1302的控制字节113.2.4DS1302的寄存器113.2.5 数据输入输出123.3 液晶显示电路设计133.4 键盘接口电路设计143.5 音乐闹铃功能设计143.6 仿真接口电路15第四章 系统软件主要设计流程164.1综述164.2 系统软件主流程图164.3 音乐闹铃程序174.4键盘程序184.5农历算法194.5.1 农历算法的理论研究
8、194.5.2.阴历算法的流程图20第五章 系统测试225.1软件仿真225.2 实物仿真225.2.1测试过程225.2.2测试结果23结论24参考文献25致谢26附录:设计原理图27第一章 绪论1.1研究目的和意义现在生活节奏的加快,使电子时钟成为人们生活必不可少的物品,广泛应用于个人家庭及各种公共场所,给我们的学习,生活,娱乐带来极大的方便。随着技术的发展,人们不再满足于钟表原先简单的报时功能,而追求更多更先进的功能,诸如日历显示,闹钟的应用,以带来更大的方便,而所有这些,又都是以数字化的电子钟为基础的。万年历就是实现这些功能的数字化的电子时钟。研究万年历及其扩展应用,可以方便人们了解农
9、历的节日,节气,其具有的附加功有着非常现实的意义。1.2 国内外研究现状 随着电子科技的发展,使得万年历也不断改进,最初万年历的核心部件石英晶体振荡器己被集成电路取代,数字集成技术的发展,虽然使得电子时钟走时准确,稳定性也很高的MOS集成电路的电路相对复杂,功耗高,维护起来难,且断电后调整时间极不易。现在单片机,DSP,FPGA已取代集成芯片成为万年历核心,现在国内外市面上的很多先进的万年历都采用这几种电路组成。它们可以通过编程很方便的而是先多种功能,同时以很小的体积和其它产品相组合,功能更强大。如音乐旋律的整点报时和闹铃,且可根据个人喜好改编音乐的万年历,红外遥控万年历,带人工语音的万年历,
10、带温湿度测试的万年历,万年历笔筒,万年历相册等等,除了在功能方面不断的增多外,在显示设备上,质量体积更轻更小的LCD液晶显示已逐步取代LED,现在所研制的新型的具有汉显功能的LCD不仅可以显示基本的时间,年月日,还可以显示各种节日和农历的节气。万年历的不断更新,为我们生活带来极大的方便。 1.3本设计研究的内容本设计就是以AVR单片机Mega16为核心的万年历,同时加以键盘电路断电后能够自由修改时间,并采用具有汉显功能液晶显示电路弥补了LED显示的缺点,质量更轻,体积更小,电路更简化,减少辐射。设计中重点研究了时钟芯片精确计时的问题和公农历转换的算法,用时钟芯片代替内部时钟,使得计时更准确。万
11、年历设计中的难点就是公农历转换,研究明白此问题,才能编出子程序,显示出公历日对应的农历日。第二章 系统整体设计方案2.1 系统功能分析 本系统是基于Mega16 的数字万年历设计。它除了能显示基本的年月日外,还能显示农历,同时具有音乐闹铃,整点报时和断电后调整时间的功能。这些功能由Mega16,时钟,键盘和显示共同作用下实现。2.2 系统方案论证2.2.1 时钟模块方案一:基本门电路搭建用基本门电路实现时钟发生器,电路结构复杂,故障系数大,不易调试。方案二:由单片机实现时钟功能单片机内部具有定时器,可方便实现定时功能,通过计算可知,是定时器没25ms产生一次中断,当产生40次中断后秒单元将加一
12、,以此类推,从而实现时,分,秒的走时,并加以显示.但由于系统晶振误差,温漂,中断响应时间的不确定性及定时器重新装载时间常数所带来的误差,决定它不能用来作为时钟的时基中断。方案三:专用时钟芯片目前市场上已有很多实时时钟芯片。DS12887.DS1302.DS1307.PCF8563.X1227等,芯片内部集成了时钟/日历功能,给时钟系统设计带来很多方便。因此计时功能宜选用选用专用时钟芯片为宜,时钟模块采用方案三来实现2.2.2键盘模块方案一:采用独立按键电路每个按键单独占用一根I/O接口线,每个I/O口的工作状态互不影响,此类键盘采用端口直接扫描方式。但是当按键较多时占用单片机的I/O口数目。方
13、案二:采用阵列式键盘此类键盘是采用行列扫描方式,当按键较多时可以降低占用单片机的I/O的I/O数目。本设计中按键为八个,需接口多,采用2*4行列式键盘2.2.3 显示模块方案一:使用多个数码管显示LED数码管式利用二极管发光显示数字和字母,具有亮度大,接口设计比较容易,价格相对便宜等优点。但是由于它工作电流较大。不能显示汉字,显示信息量有限,若在此题目中应用就会受到很大限制。方案二:采用液晶显示液晶特别是具有汉字显示功能的液晶显示器,来实现显示功能,不仅可以实现基本的显示信息,而且可以显示丰富的符号指示信息以及文字指示信息,信息灵丰富且直观易懂。而且液晶显示有功耗低,体积小,重量轻,寿命长,不
14、产生电磁辐射等优点。系统采用方案二,设计选用LCD1602第三章 系统硬件设计本系统以Mega16为核心部件,使用串行时钟芯片DS1302,实现时间和闹钟的设置功能。通过键盘和液晶LCD1602提示可方便地校对时钟和设置闹钟时间,且断电后可实现自由调整时间,同时具有音乐播放和闹铃的的功能,系统的整体框图如图3.1所示。 3.1 数字万年历的硬件结构图下面介绍下本文涉及到的几个部分:3.1 Mega16单片机电路设计3.1.1 Mega16的介绍Mega16是ATMEL公司的一款高性能、低功耗得 8 位AVR微处理器, 使用先进得RISC 结构, 大多数指令的 执行时间为单个时钟周期, 所以运算
15、速度更快!两个具有独立预分频器和比较器功能的 8 位定时器/ 计数器;一个具有预分频器、比较功能和捕捉功能得 16 位定时器/ 计数器;具有独立振荡器得 实时计数器RTC;四通道PWM;8路10 位ADC8 个单端通道,TQFP 封装的 7 个差分通道,可编程得 串行USART 接口;可工作于主机/ 从机模式得 SPI串行接口;面向字节得 两线串行接口;具有独立片内振荡器得 可编程看门狗定时器;片内模拟比较器; 其具有的下面特点无论从编程、自编程和加密等方面都给用户提供了很大得方便!4k字节的系统内可擦写10 * 000 次的可编程Flash;具有独立锁定位的可选Boot 代码区, 通过片上B
16、OOT程序实现系统内编程;512字节的 擦写100 * 000 次的EEPROOM;1K字节的片内SRAM, 可以对锁定位进行编程以实现用户程序的 加密!具有以下特点:先进的 RISC 结构 131 条指令 32 个 8 位通用工作寄存器全静态工作工作于 16 MHz 时性能高达 16 MIPS只需两个时钟周期的硬件乘法器非易失性程序和数据存储器 通过 JTAG 接口实现对 Flash、 EEPROM、熔丝位和锁定位的编程2 个具有可编程增益 (1x, 10x, 或 200x)的差分通道上电复位以及可编程的掉电检测片内经过标定的 RC 振荡器片内 / 片外中断源 6 种睡眠模式 : 空闲模式、
17、ADC 噪声抑制模式、省电模式、掉电模式、Standby 模式以及扩展的 Standby 模式工作电压 : ATmega16:4.5 - 5.5V速度等级: 0 - 16 MHz ATmega163.1.2 Mega16的引脚图及引脚说明 VCC: 数字电路的电源 GND:地端口A(PA7.PA0): 端口 A 做为 A/D 转换器的模拟输入端。端口 A 为 8 位双向 I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口 A 处于高阻状态。端口
18、B(PB7.PB0):端口 B 为 8 位双向 I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口 B 处于高阻状态。端口 C(PC7.PC0):端口C 为 8 位双向 I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口 C 处于高阻状态。如果JTAG 接口使能,即使复位出现引脚 PC5(TDI)、
19、 PC3(TMS)与 PC2(TCK) 的上拉电阻被激活。端口 D(PD7.PD0):端口 D 为 8 位双向 I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口 D 处于高阻状态。RESET: 复位输入引脚。持续时间超过最小门限时间的低电平将引起系统复位, 持续时间小于门限间的脉冲不能保证可靠复位XTAL1: 反向振荡放大器与片内时钟操作电路的输入端XTAL2: 反向振荡放大器的输出端. AVCC: AVCC是端口A与A/D转换器的电源。不使用
20、ADC时,该引脚应直接与VCC连接.使用ADC时应通过一个低通滤波器与 VCC连接。 AREF: A/D 的模拟基准输入引脚。根据以上端口的介绍以及具体引脚图,设计中单片机端口分配表PA口液晶显示数据线PB4PB7接4*1键盘PD3DS1302 SCKPD4DS1302 I/OPD5DS1302 RSTPD6扬声器输入驱动PB0,PB1,PB2液晶显示RS,R/W,E3.2 时钟接口电路本万年历系统的重要部分在于时钟和闹钟功能模块,这里选用串行时钟芯片dS1302,与采用并行总线与单片机进行数据通信的时钟芯片相比,DS1302与单片机的连线大为减少,极大的节省了单片机的系统资源3.2.1 简介
21、DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。3.2.2 引脚介绍及其功能图1示出DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持
22、时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc10.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在
23、Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向), SCLK始终是输入端。 图1 DS1302 引脚图3.2.3DS1302的控制字节DS1302的控制字如图2所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出图2 DS1302 的控制字 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写
24、入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。时序图如下:3.2.4DS1302的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表1表一 DS1302 的时钟,日历寄存器及控制字寄存器名命令字取值范围各位内容写操作读操作76543210秒寄存器80H81H 00-59CH10SECSEC分钟寄存器82H83H 00-59010MIN MIN小时寄存器84H85H00-12或00-23 12/24110/APH
25、R HR日期寄存器86H87H01-28,29.30.31 010DATE DATE月份寄存器88H89H 01-12 0 010MMONTH周月寄存器8AH8BH 01-07 0 000DAY年份寄存器8CH8DH 00-99 10 YEAR YEAR 表中12或24小时的方式选择位,当为1时,选择12小时。有AP那位是上午和下午的选择位,当为1是表示为下午。CH是暂停位,当CH=1时,时钟振荡停止,器件被置入低功率备份方式,其电源电流小于100NA,当CH=0时,时钟启动此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性
26、顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)3.2.5 数据输入输出 在控制指令字输入后的下一个SCLK时钟的上升沿时数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位至高位7,数据读写时序见图。 如果命令字节中的寻址位
27、A0A4均为1,可以把时钟/日历或RAM存储器规定为多字节方式。当命令字节为FFH或FEH,可以对片内31字节RAM进行读/写操作;当命令字节为BFH或BEH时,可对8个时钟/日历寄存器进行读/写操作,在时钟/日历寄存器中的地址9-31或RAM存储器中的地址31均不能使用。在多字节方式中读或写都是从地址0的第0位开始。 当以多字节方式写时钟/日历寄存器时,必须按传送是次序写满8个寄存器;但是,当以多字节方式写RAM时,根据发送的要求,数据不必写入所有31字节。不管是否写入全部31字节,所写的字节都将传入送至RAM。 另外,应注意在写操作时,CLK的每一个时钟上升沿,一。I/O引线将为高阻态,数
28、据必须在CLK上升沿前读取。12 长春理工大学毕业设计 3.3 液晶显示电路设计本设计中的液晶选用LCD1602.液晶显示模块可以分为字段,字符点阵,图形点阵 3 种。一般只有后者可以显示汉字和图形。LCD 1602 是常见的 16 2 行, 6 8 字符点阵液晶模块,广泛应用于智能仪表、通信、办公自动化设备中,其字符发生器 ROM 中自带数字和英文字母及一些特殊符号的字符库,没有汉字。LCD1602的引脚图如下,引脚功能如下:BLA :背光源正极,接 +5V ; BLK :背光源负极,接地; VO :液晶显示偏压信号,通过电位器 W1 调节, 1602 偏压接近 0V ; RS :接 PD.
29、0 ,决定传输类型是数据或命令, 1- 表示数据, 0- 表示命令; R W :接 PD.1,读写控制, 1 一表示读, O 一表示写; E :接 PD.2 ,使能端,高电平有效; DB0 DB7:数据端口,连接PA 1602无法显示汉字,农历的日期就不好显示了。若要显示汉字,关键是先要自己建立欲显示的汉字字库。1602提供了在片内CGRAM的00H-3FH共64个字节的空间,可以存放8个68点阵的自建字符库,其代码分别为00H-07H,然后在显示时只要用处查表法调用汉字的相应代码就可以了 对于本设计,若进行编程实现自定义的汉字字符,会占用单片机的内存,如果在农历显示前加以前缀区分,仍可用公历
30、格式来显示农历 3.4 键盘接口电路设计 在设计键盘电路时我们采用2*4的行列式八键键盘。单片机通过查询方式对键盘扫描。用软件算法消除按键顺势的抖动。 3.5 音乐闹铃功能设计 当闹铃定时到点时,会触发声音报警,电路如下 Speaker口接至单片机的PD.6声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。我们将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数排列成一个表,然后由查表程序
31、依次取出,产生音符并控制节奏,就可以实现演奏效果。此外,结束符和体止符可以分别用代码 00H 和 FFH 来表示,若查表结果为 00H,则表示曲子终了;若查表结果为 FFH,则产生相应的停顿效果。为了产生手弹的节奏感,在某些音符(例如两个相同音符)音插入一个时间单位的频率略有不同的音符。3.6 仿真接口电路 采用AVR仿真机对硬件电路的软件编程进行仿真,再硬件电路里加JTAG接口,通过下载线连硬件与仿真机,烧入程序和进行仿真JTAG主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。标准的JTAG接口是4线:TMS、 TCK、TDI、TDO,分别为模式选择、时
32、钟、数据输入和数据输出线。 JTAG最初是用来对芯片进行测试的,基本原理是在器件内部定义一个TAP(Test Access Port测试访问口)通过专用的JTAG测试工具对进行内部节点进行测试。JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。现在,JTAG接口还常用于实现ISP(In-System rogrammable在线编程),对FLASH等器件进行编程。 JTAG编程方式是在线编程,传统生产流程中先对芯片进行预编程现再装到板上因此而改变,简化的流程为先固定器件到电路板上,再用JTAG编程,从而大大加快工程进度。JTAG接口
33、可对PSD芯片内部的所有部件进行编程 其引脚图如下:8脚悬空,1.3.5.九脚分别与MEGA16的 第四章 系统软件主要设计流程4.1综述软件系统在本设计中尤其重要,基本功能大部分是由软件完成的,发挥功能的关键控制部分同样需要软件的密切配合才能顺利实现。鉴于软件设计的复杂性和规模性,我们采用AVR编译器支持的C语言编程,放弃了效率高但可读性不强的汇编语言。整个软件系统采用模块化的程序设计方法,共分为时间设定,显示程序,闹铃设定,键盘设定四个部分。此系统完成的主要功能有:时间、日期设定与显示,闹铃设定,整点报时,跑表的启动/停止/保持显示/清除,音乐播放。4.2 系统软件主流程图 本设计的主要编
34、程思想是:初始化设备后,读取DS1302的寄存器地址所存放的数据,将其显示在LCD上,扫描键盘,有键按下,就进入设置界面,根据键值执行相应的闹铃和时钟设置。完成设置后,将设置后的时间送给DS1302的寄存器,单片机从DS1302中读入此数据显示在LCD上4.3 音乐闹铃程序声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。我们将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数排列成一个表
35、,然后由查表程序依次取出,产生音符并控制节奏,就可以实现演奏效果。此外,结束符和体止符可以分别用代码 00H 和 FFH 来表示,若查表结果为 00H,则表示曲子终了;若查表结果为 FFH,则产生相应的停顿效果。为了产生手弹的节奏感,在某些音符(例如两个相同音符)音插入一个时间单位的频率略有不同的音符。具体流程图如下:4.4键盘程序 键盘采用查询方式进行扫描,对两行键盘依次进行扫描。根据扫描的键值执行相应的功能4.5农历算法 本设计中的难点即为阴历算法,解决了这个问题,才能显示农历4.5.1 农历算法的理论研究农历是我国的一种历法,又称夏历、中历、旧历,俗称阴历。定月的方法是用朔望月周期给出,
36、朔所在日为初一,朔望月长约29天半,所以农历大月30天,小月29天。农历平年有十二个月,全年354天或355天,闰年为十三个月,其中某一月为闰月,月名依前一月名而定,如前月是八月,闰月则为闰八月。闰年全年383天或384天。设置闰月的方法是:农历月份中无“中气”的月份则是闰月。 7 i+ s0 L& & G) C农历平年、闰年的月数、天数一览表 3年月数大月天数小月天数全年天数闰月设置方法平年12302935419年7个闰月闰年133029383(或384)无中气月份为闰月二十四节气中四季“节气”和“中气如下: 四季 春 夏 秋 冬 节气 立春 惊蛰 清明 立夏 芒种 小暑 立秋 白露 寒露
37、立冬 大雪 小寒 中气 雨水 春分 谷雨 小满 夏至 大暑 处暑 秋分 霜降 小雪 冬至 大寒 阴历最大的问题是在如何置闰。阴历基本法则如下: * 月朔日即是初一* 月以中气得名* 以包含雨水中气月为正月,即是寅月* 月无中气者为闰月,以前月同名6 c1要求出; f4 , 0 u0 l$ dR* r9 x6 P 农历算法即求任一公历年的农历日期。根据存在的公农历转换数据表,查找和计算出当前显示的公历的农历日期。首先是要保存公农历之间的转换信息:以任意一年作为起点,把从这一年起若干年的农历信息保存起来。根据上表要保存一年的信息其实只要两个信息就能了:1、农历每个月的大小;2、今年是否有闰月,闰几
38、月及闰月的大小。用一个整数来保存这些信息就足够了。具体的方法是:用三个字节来表示公历对应的农历数据,格式第一字节BIT7-4位表示闰年月份,值为0为无闰月,BIT3-0对应农历第1-4月的大小。第二字节 BIT7-0对应农历第 5-12 月大小,第三字节 BIT7表示农历第 13个月大月份对应的位1表示本农历月大(30天),为 0表示小(29天)第三字节表示春节的公历月份,BIT4-0表示春节的公历日期.这样建立了农历年对应的农历数据表。建立表后,具体的算法如下: 1)从数据表中取得当年春节的公历日期 计算此公历日期距当年元旦和春节离元旦的天数。从而算出公历日期距春节的天数X,判断公历日和春节
39、的前后 2) 公历日在春节后,农历年=公历年,农历月从1月开始,判断是否是闰3)取农历月天数Y,大月30天,小月29天,判断X,Y大小,如果X不小于Y,X减去当月天数,若农历月非闰月,农历月加1.循环此过程,X小于Y跳出循环,农历日=X+1 4)公历日在春节前,农历年=公历年减1,相应的数据表的地址减三,定位到前一年,农历月从12月开始5)取农历月天数Y,大月30天,小月29天,如果X大于Y,X减去当月的天数 ,农历月非闰月,农历月减1,循环此过程,如果X不小于Y,跳出循环,农历日=Y-X+14.5.2.阴历算法的流程图 在编程时,为了方便运算,将数据转换为HEX格式,农历日期求出后转换成标准
40、格式。其流程图如下:第五章 系统测试 本设计的硬件电路和软件编程后,先用Proteus进行仿真,对硬件电路进行模拟 ,得到预想的结果后,焊接硬件,对硬件电路进行实物仿真,得到最够的测试结果5.1软件仿真 Proteus它不仅能仿真单片机CPU 的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。因此在仿真和程序调试时,观察的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。proteus 的工作过程 运行proteus 的ISIS 程序后,进入该仿真软件的主界面。在工作前,要设置view 菜单下的捕捉对齐和system
41、下的颜色、图形界面大小等项目。通过工具栏中的p(从库中选择元件命令)命令,在pick devices 窗口中选择电路所需的元件,放置元件并调整其相对位置,元件参数设置,元器件间连线,编写程序;在source 菜单的Define code generation tools 菜单命令下,选择程序编译的工具、路径、扩展名等项目;在source 菜单的Add/remove source files 命令下,加入单片机硬件电路的对应程序;通过debug 菜单的相应命令仿真程序和电路的运行情况。5.2 实物仿真 Proteus 仿真完,实现设计所预想的功能后,焊接电路,对实物进行仿真测试, 仿真环境即测试
42、环境是:AVR Studio 4.07以上版本,915DC电源,PC与RS232口。5.2.1测试过程 (1) 安装AVR Studio:在安装AVR Studio时将随机提供的光盘放入CDROM中,选取avrstuio4。07目录中的setup.Exe文件,按照安装向导提示的步骤进行即可。 (2) 在启动AVR Studio之前,把JTAGICE连接在上位PC和目标板之间,确保AVR Studio可以完成自动侦测连接情况。 (3) 仿真器与上位机的连接,将随机带的“串行通讯电缆”一头与仿真器的“串行通讯口”相接,另一头与计算机任意串口相接。注意:AVR Studio不能同其他程序共享串口资源
43、,在打开AVR Studio前要关闭其他使用该串口的程序 (4) JTAGICE同目标板的连接:最小需要6条线与目标板相连,才可以完成仿真任务,他们是:TCK 、TMS 、TDO 、TDI、 Vref、 GND,另外有两条可选择的引线 nSRST 和 Vsupply 。引脚nTRST不接,Vsupply的功能是由目标板向JTAGICE供电(仅对接口部分)nSRST的作用是监视目标板的复位线。然而,在仿真过程中不是必须的。如果应用程序对MCUSR中JTD位进行了编程,JTAG接口就会关闭,为了使用JTAGICE对目标板重新编程。就必须控制复位引脚。 (5)AVR JTAG仿真器的连接总结:将AV
44、R JTAG 与PC串口相联接,并由9-15VDC直流电源供电,将AVR JTAG的下载线按(4)的方法连接。这样仿真器的总连接就完成了。同时,目标板也应上电。得到仿真结果5.2.2测试结果1.上电复位后LCD显示的初始时间2009-5-29 16:45:08 *06:002.按下S1进入农历显示:2009-5-6 Friday3.按下S2进入时间设置,再按下S5.S6.S7.S8会进行时间调整4 按下S3可进入闹钟设置,再按下S5.S6.S7.S8会进行闹钟时间调整5 按下S4可进行音乐播放结论本系统以Mega16为核心部件,使用串行时钟芯片DS1302,实现时间和闹钟的设置功能。通过键盘和
45、液晶LCD1602提示可方便地校对时钟和设置闹钟时间,且断电后可实现自由调整时间,同时具有音乐播放和闹铃的的功能。 本系统以AVR单片机为核心,相比51单片机,速度更快,基本完成了实用电子钟的功能,也尽量做到了硬件电路简单稳定,减小电磁干扰和其它环境干扰,充分发挥了软件编程的优点,减小了因器件精度不够引起的误差。本来还想实现秒表,温度,红外遥控等功能。但由于时间紧迫,未能如愿,留下了很大的遗憾。由于时间有限和本身知识水平的发挥,我认为本系统还有需要改进和提高的地方,例如选用更高精度的元器件,硬件电路更加精确稳定,软件算法还需要进一步的改进与优化等。 通过对数字万年历的设计,我不仅对大学四年学的东西,有了系统的复习和运用,还深入接触了AVR 单片机的应用与编程以及液晶显示的知识。 参考文献1李宗吾.中国万年历M.北京:中国科学技术出版社, 200615192 谭浩强 .C程序设计 M.清华大学出版社,19963沈文,Eaglgee, 詹卫前.AVR单片机C语言入门指导M.清华大学出版社,20034马忠梅.单片机的C语言应用技术M.北京航空航天大学出版社;19965 杨河理,熊晓东.电子万年历中公农历互换算法研究J.长江大学学报,20046 张剑锋
限制150内