1、毕业设计(论文)报告题 目 基于液晶显示的万年历设计 系 别 专 业 班 级 学生姓名 学 号 指导教师 2013年 4 月无锡科技职业学院毕业设计(论文)基于液晶显示的万年历设计基于液晶显示的万年历设计摘要:本设计应用AT89S52芯片作为核心,采用C语言进行编程,实现以下功能:小时、分、秒、年、月、日、星期的显示和实时温度检测。该设计的电子时钟系统由时钟电路、LCD显示电路、按键调整电路和温度检测电路四部分组成。使用时钟芯片DS1302完成时钟日期的功能,以LCD1602为显示器,同时利用温度传感器DS18B20测量周围环境温度,并且可以依靠按键随时对日期时间进行调整。我们共设计四个按键,
2、一个模式键,也就是我们用来选定被修改的数字的,两个调整键,一个“加”键和一个“减”键,当按下模式键,选定要调整的数字的时候,“加”、“减”可以帮我们调到所需的状态,还有一个复位键,显示精度为1秒。设计还提供三位实时温度检测并显示,其显示精度为0.1。关键词:AT89S52、时钟日历芯片DS1302、温度传感器DS18B20、LCD1602iCalendar design based on liquid crystal display (LCD)Abstract:This design applies AT89S52 chip as the core, using C language prog
3、ramming, realize the following functions: hours, minutes and seconds, year, month, day, week display and real-time temperature detection.The design of electronic clock system consists of a clock circuit, LCD display circuit, key adjustment circuit and temperature detection circuit four parts.Using t
4、he function of the date of completed clock chip DS1302 clock, LCD1602 to display, using temperature sensor DS18B20 measuring ambient temperature at the same time, and you can rely on button at any time to adjust date/time.Four keys, we design a mode key, also is what we used to select the modified f
5、igure, two adjusting button, a add button and a minus button, when press the mode button, the selected to adjust the Numbers, add, reduced can help us to set the desired state, there is a reset button, display precision of 1 second.Three design also provides real-time temperature detection and displ
6、ay, the display accuracy of 0.1 .Key Words: AT89S52、calendar clock chip DS1302、temperature sensor DS18B20、LCD1602ii目录前言1第一章 方案选择与万年历研究情况21.1 方案选择21.1.1时钟芯片选择21.1.2键盘选择31.1.3显示模块选择31.2电子万年历的研究情况4第二章 主要硬件描述52.1 AT89S5252.1.1主要性能52.1.2引脚说明52.2 LC160282.2.1简介82.2.2特性92.2.3管脚功能92.3 时钟芯片DS1302102.3.1工作原理1
7、02.3.2引脚功能及结构102.4 数字温度传感器DS18B20112.4.1DS18B20工作原理112.4.2DS18B20 引脚说明12第三章 硬件设计与实现133.1 单片机最小系统的设计133.2 时钟电路的设计143.3 温度采集模块的设计143.4 LCDM1602显示模块设计15第四章 系统软件设计与实现164.1主程序设计164.2实时时钟日历子程序设计164.3环境温度采集子程序设计174.4按键子程序设计19第五章 测试结果分析与结果205.1 测试结果分析205.2 测试总结20结束语21致谢22参考文献23附录一:原理图24附录二:源程序25iv前言结构简单,功能齐
8、全,具有一定的推广价值。随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。二十一世纪的今天,最具代表性的计时产品就是电子万年历,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的应用(电子万年历),使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字
9、显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!因此,电子万年历的出现带来了钟表计时业界跨跃性的进步 。电子万年历作为电子类小设计不仅是市场上的宠儿,也是是单片机实验中一个很常用的题目。因为它的有很好的开放性和可发挥性,因此对作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。所以,电子万年历无论作为比赛题目还是练习题目都是很有价值。万年只是一种象征,表示时间跨度大.这次设计通过对万年历系统的设计, 详细介绍AT89S52单片机应用中的按键处理,数
10、码管显示原理,动态和静态显示原理,定时中断,A/D转换 等原理.该系统能够显示年,月,日,小时,分钟,秒,星期,农历,温度,通过按键可以修改时间等功能。第一章 方案选择与万年历研究情况1.1 方案选择1.1.1时钟芯片选择方案一:不使用芯片,采用单片机的定时计数器这种方法原理是利用单片机芯片的定时器来产生固定的时间,模拟时钟的时, 分,秒。如:利用AT89S52芯片,定时器用工作方式1,每50ms产生一个中断,循环20次,即1s周期。每一个周期加1,那么1min为60个周期,1h就是60*60=3600个周期,一天就是3600*24=86400个周期。此方法优点是可以省去一些外围的芯片,但这种
11、方法只能适用于一些要求不是十分精确,不做长期保留的场合。方案二:并行接口时钟芯片 DS12887特点:采用单片机应用系统并行总线(三总线)扩展的接口电路,采用这种接口电路具有操作速度快,编程方便的优点。但是对于80C52单片机来说,低位地址线要通过锁存器输出,还要地址译码器,而且并行口芯片的体积相对较大。方案三:串行接口时钟芯片DS1302芯片主特性: (1)实时时钟具有能计算2100 年之前的秒分时日日期星期月年的能力,还有闰年调整的能力 (2)31 8 位暂存数据存储RAM (3)串行 I/O 口方式使得管脚数量最少 (4)宽范围工作电压2.0 5.5V (5)工作电流 2.0V 时,小于
12、300nA (6)读/写时钟或RAM 数据时有两种传送方式单字节传送和多字节传送字符组方式 (7)8 脚DIP 封装或可选的8 脚SOIC 封装根据表面装配 (8)简单 3 线接口 (9)与 TTL 兼容Vcc=5V(10)可选工业级温度范围-40 +85优点:串行接口的日历时钟芯片,使用简单,接口容易,与微型计算机连线较少等特点,在单片机系统尤其是手持式信息设备中己得到了广泛的应用。所以,最终选择串行时钟芯片DS1302。1.1.2键盘选择 方案一:矩阵式键盘行列式键盘的原理就是每一行线与每一列线的交叉地方不相通,而是接上一个按键,通过按键来接通。特点: 以省出不少的I/O 口资源,程序编写
13、相对复杂点,适用于键数比较多的情况。 方案二: 独立式键盘独立式键盘是指各个按键相互独立地连接到各自的单片机的I/O 口,I/O口只需要做输入口就能读到所有的按键。特点: 电路简单,程序容易写,适用于按键数较少的情况。所以我们选择独立式键盘。1.1.3显示模块选择 方案一:LED数码管显示数码管显示比较常用的是采用CD4511和74LS138实现数码转换,数码显示分动态显示和静态显示,静态显示具有锁存功能,可以使数据显示得很清楚,但浪费了一些资源。目前单片机数码管普通采用动态显示。编程简单,但只能显示数字,不能显示中文。方案二:LCD1602 能够显示英文和数字。 1602液晶模块内部的字符发
14、生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号。特点:1602是字符型液晶,显示字母和数字比较方便,控制简单,成本较低。1.2电子万年历的研究情况经过多方面考虑与反复的实践与验证,我决定使用AT89s52单片机为核心处理器,采用串行接口时钟芯片DS302作为内部时钟,以独立式键盘控制,LCD1602为显示屏的万年历,该万年历不仅可以显示传统的年,月,日,时,分,秒还能显示星期,农历和实时温度。它大大方便的人们了解时间以及天气变化。第二章 主要硬件描述2.1 AT89S52AT89S52是一种低功耗、高性能CMOS 8位微控制器,
15、具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。2.1.1主要性能1、与MCS-51单片机产品兼容;2、8K字节在系统可编程Flash存储器;3、1000次擦写周期;4、全静态操作:0Hz-33MHz;5、三级加密程序存储器;6、32个可编程I/O口线;7、三个16位定时器/计数器;8、六个中断源;9、全双工UART串行通道;10、
16、低功耗空闲和掉电模式;11、掉电后中断可唤醒;12、看门狗定时器;13、双数据指针;14、掉电标识符 。 2.1.2引脚说明 图2-1:AT89S52引脚图AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非 易失性存储器技术制造,与工业80C51 产品指令和引脚完 全兼容。片上Flash允许程序存储器在系统可编程,亦适于 常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得AT89S52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。 AT89S52具有以下标准功能: 8k字节F
17、lash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻 辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻 辑电平。对P0端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,
18、P0口也被作为低8位地址/数据复用。在这种模式下, P0不具有内部上拉电阻。 在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验 时,需要外部上拉电阻。P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个 TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2 的触发输入(P1.1/T2EX)。 在flash编程和校验
19、时,P1口接收低8位地址字节。引脚号第二功能:P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出。P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)。P1.5 MOSI(在系统编程用)。P1.6 MISO(在系统编程用)。P1.7 SCK(在系统编程用)P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器 能驱动。 P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p3 输出缓冲器能驱动4 个 TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内
20、部电阻的原因,将输出电流(IIL)。 P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。 在flash编程和校验时,P3口也接收一些控制信号。端口引脚 第二功能:P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 INTO(外中断0)P3.3 INT1(外中断1)P3.4 TO(定时/计数器0)P3.5 T1(定时/计数器1)P3.6 WR(外部数据存储器写选通)P3.7 RD(外部数据存储器读选通)此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。ALE/PR
21、OG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。PSEN:程序储存允许(PSEN)输出是外部程序存储器的读
22、选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。EA/VPP:外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。XTAL2:振荡器
23、反相放大器的输出端。2.2 LC16022.2.1简介1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。LCD1602是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市
24、面上大部分的字符型液晶。2.2.2特性(1)3.3V或5V工作电压,对比度可调。(2)内含复位电路。(3)提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能。(4)有80字节显示数据存储器DDRAM。(5)内建有192个5X7点阵的字型的字符发生器CGROM。(6)8个可由用户自定义的5X7的字符发生器CGRAM。2.2.3管脚功能图2-2:LCD1602引脚图 1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个1
25、0K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第714脚:D0D7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。2.3 时钟芯片DS13022.3.1工作原理DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用
26、三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。 2.3.2引脚功能及结构DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1
27、和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向)。SCLK为时钟输入端。 图2-3 DS1302引脚图2.4
28、数字温度传感器DS18B202.4.1DS18B20工作原理 DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。 DS18B20测温原理如图3所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对
29、低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。 图2-4 DS18B20内部结 2.4.2DS18B20 引脚说明(1)DQ为数字信号输入/输出端; (2)GND为电源地; (3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。 图2-5 DS18B20引脚图第三章 硬件设计与实现电子时钟至少包括秒信号发生器、时间显示电路、按键电路、供电电路等四部分,另外,本设计要求该电子钟能够采集温度,所以还需要温度采集电路,硬件电路
30、框图如图3-1。AT89S52LCD1602显示器DS1302时钟温度传感器DS18B20键盘+5V电源图3-1 硬件电路框图该系统使用AT89C52单片机为核心微控制器,通过读取时钟日历芯片DS1302和温度传感器DS18B20的数据,完成电子时钟的主要功能时钟/日历和环境温度采集,使用比较直观的LCD1602显示,同时显示年月日,星期,时分秒以及环境温度值。键盘是为了完成时钟/日历的校准。整个电路使用了+5V电源供电。 3.1 单片机最小系统的设计AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O口(P0、P1、P2、
31、P3),每一条I/O线都能独立地作输出或输入。单片机的最小系统如图3-1所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。 图3-2 单片机最小系统 3.2 时钟电路的设计本系统采用有DS1302串行时钟芯片作为主时钟电路,该电路使用单独的32.768M的晶振和单独的电源供电,减小主控的负担。电路图如图3-3所示。图3-3 时钟电路3.3 温度采集模块的设计采用数字式温
32、度传感器DS18B20,它是数字式温度传感器,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,使用0.7与DS18B20的I/O口连接加一个上拉电阻,Vcc接电源,Vss接地。电路图如图3-4所示。 图3-4温度采集电路 3.4 LCDM1602显示模块设计 图3-5 LCD显示电路第四章 系统软件设计与实现89S52单片机可以应用汇编语言和C语言进行编程。汇编语言与机器语言指令一一对应,所以用汇编语言编写的程序在单片机里运行起来效率较高。C语言程序可读性高,更便于理解,本设计采用C语言编程11。4.1主程序设计第一次上电,系统先进行初始化,LCD显示初始时间“03:
33、25:00”,并开始走时,初始日期为“2010-4-30”。单片机依次开始调用DS1302子程序,DS18B20子程序,键盘子程序返回开头循环运行3。主序流程图如图4-1。开始初始化显示子程序DS1302子程序DS18B20子程序延时程序图4-1主序流程图4.2实时时钟日历子程序设计该程序主要实现对DS1302写保护、充电,对年、月、日、星期、时、分、秒等寄存的读写操作。在读写操作子程序中都执行了关中断指令,因为在串行通信时对时序要求比较高,而且在此是用单片机内部软件模拟串行时钟脉冲,并由I/O口输出,所以在通信过程中最好保证传输的连续性,不要允许中断,其流程图如图4-2。DS1302每次上电
34、后会自动处于暂停状态,必须把秒寄存器的位7置位0,时钟才开始计时。如果DS1302一直没有掉电则不会存在此问题。在进行写操作时,需要先解除写保护寄存器的“禁止”状态。当用多字节模式进行操作时,必须写够8个字节。开始初始化写入时钟初值开始计时读出数据返回图4-2 对DS1302操作流程图4.3环境温度采集子程序设计DS18B20是1-wire单线器件,它在一根数据线上实现数据的双向传输,这就需要一定的协议来对读写数据提出严格的时序要求,AT89C51单片机并不支持单线传输。因此,必须采用软件的方法来模拟单线的协议时序6。主机操作单线器件DS18B20必须遵循下面的顺序。 1.初始化;2.发ROM
35、操作命令;3.内存操作命令;4.数据处理。开始初始化DS18B20发起Skip Rom命令发起Convert命令延时1s等待温度转换完成初始化DS18B20应答脉冲否?发起Read Scrarcpad命令读低8位字节TL数据读高8位字节TH数据发出报警信号是否超出设置温度范围应答脉冲否? 实现环境温度采集转换并读取数据的程序流程图如图4-3。图4-3 对环境温度采集转换并读取数据的程序流程图4.4按键子程序设计单片机对键盘扫描的方法有随机扫描方式、定时扫描方式和中断扫描方式。在随机扫描方式中,CPU完成某特定任务后,即执行键盘程序,以确定键盘有无按键输入,然后根据按键功能转去执行相应的操作,在
36、执行键盘按键规定的功能中不理踩键盘输入。定时扫描方式与随机扫描方式基本相同,只是利用CPU内的定时中断,每隔一定时间扫描有无按键按下,键盘反应速度快,在处理按键功能过程中,可以通过键盘命令进行干预,如取消、暂停等操作。前两种扫描方式均会占用CPU大量时间,不管有没有键入操作,CPU总要在一定的时间内进行扫描,这对于单片机控制系统是很不利的。由于本设计中AT89C51单片机在系统中的主要任务是接收DS1302和DS18B20的数据并送出显示,完成时钟/日历和日期/温度的控制,89C51单片机完全有能力完成以上工作,所以采用随机扫描方式,系统也能够正常运行。第五章 测试结果分析与结果5.1 测试结
37、果分析(1)在测试中遇到LCD1602不显示分析:首先使用试测仪对电路进行测试,观察是否存在漏焊,虚焊,或者元件损坏。再接着研究程序的时序图是否正确。最后发现程序时序方面出了点小错。修改后就把问题解决了(2)测试中遇到调时间调到2057年后跳到2000年分析:认真研究时钟芯片的Datasheet发现,对年的读取,读出后是BCD码转换成十制显示时算法不正确(3)按键调整时,不是按单位递增和递减分析:在键盘程序中,按键一次,向芯片写入一个新的数字,在写入数字后必须有一定延时才再写入另一个数字 (4)烧写程序进单片机里面时,有时会在显示屏上显示烂码. 分析:用电压表检查.最后检测出USB下载线的端口
38、电压不够换条新线就可以把问题解决5.2 测试总结经过多次的反复测试与分析,掌握了硬件的设计与分析的能力, 学会看英文版的Datasheet,同时在软件的编程方面得到更到的提高,对编程能力得到加强。对所学的知识得到很大的提高与巩固。 最终实现功能:(1)能显示阳历年、月、日、星期、小时、分、秒(2)显示模块采用LCD液晶显示,要求能用按键调整时间。 (3)能显示阴历月、日,在显示阴历时间时能标明是否为闰年。 (4)具有定时报警功能,能够进行整点和半点语音报时。(5)能够准确在LCD上显示室。(6)在显示农历时通过算法能够把天干地去也显示出来。结束语通过对基于单片机的万年历的研究和设计,完成了一种
39、能够显示阳历、阴历、星期、时间、实时温度、天干地支的多功能万年历,该万年历还可以定时报警和进行进行整点和半点报时。本系统设计从开始到完成包括文档的编写总共花了一个月左右的时间,设计的难点在于星期和年月日的计算方法,还有单片机和各个芯片之间的通信协议,液晶的读写时序,按键的防抖。本系统基本完成了设计指标的所有要求,所有的程序分块编写,通过main函数来调用,增加了程序的易修改性和易读性,方便他人的使用和改进。但是由于时间的局限性以及本人能力的有限性,本系统还有许多需要改进和完善的地方。其中主要的问题就是功耗和电源供电的问题,该处采用5V供电,最好采用3V供电。整个电路的功耗太大,没让单片机工作在
40、空闲模式,这都是作品不实用,不能够大批量生产,这都有待改进,希望以后有机会对该系统做进一步的完善。致谢在本次设计中,我想首先感谢蒋老师,从设计的开始到完成,给了我很多指导性的意见,不断帮助我完善系统设计。从大一开始,蒋老师作为我的导师,一直很注重我们动手能力的培养。他丰富的教学及实际操作经验、严谨的治学态度,以及和蔼的态度,使得我投入了大量时间在创新基地的实验室中,做了许多实验。而这,对我的帮助和影响是非常巨大的。正是因为有了这些锻炼的机会,我才能非常顺利地完成我的毕业设计。最后非常感谢无锡科技职业学院应用电子系的老师和同学,是他们让我学会了如何学习,更学会了如何做人,这将是我终身受益的宝贵财
41、富。参考文献1 周兴华编著 手把手教你学单片机C程序设计北京:北京航空航天大学出版社,20072 侯玉宝编著. 基于Proteus的51系列单片机设计与仿真 北京:电子工业出版社,20083 张义和编著. 例说51单片机(C语言). 北京:人民邮电出版社. 20084 李朝青编著. 单片机原理及接口技术. 北京:北京航空航天大学出版社,20055 周慈航编著. 单片机应用程序设计基础. 北京:北京航空航天大学出版社,19916 马忠梅编著. 单片机的C语言应用程序设计. 北京:北京航空航天大学出版社,20037 李广弟编著. 单片机基础. 北京:北京航空航天大学出版社,19948 曾巧媛编著.
42、 单片机原理及应用. 北京:电子工业出版社,19979 邱丽芳编著. 单片机原理与应用. 人民邮电出版社,200710 何立民编著. MCS-51系列单片机应用系统设计. 北京航空航天大学出版社,2003附录一:原理图附录二:源程序程序如下#include #define uint unsigned int#define uchar unsigned charuchar table=0123456789:-;uchar t,num=0;uint temp,we; /定义整型的温度数据float f_temp; /定义浮点型的温度数据uint shi,fen,miao,nian,yue,ri;u
43、int shi1,fen1,miao1,nian1,yue1,ri1,we1;sbit RS=P26;sbit EN=P27;sbit ds=P20;sbit SCL=P12;sbit IO=P11;sbit RST=P10; sbit key1=P30;sbit key2=P31;sbit key3=P32;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=120;y0;y-);#include#include#include#includevoid main()init_1602();init_1302();/reset_1302();while
44、(1)tempchange();display();keyscan();1602.void write_date(uchar date)EN=0;RS=1;P0=date;EN=0;delay(5);EN=1;void write_com(uchar date)EN=0;RS=0;P0=date;EN=0;delay(5);EN=1;void init_1602()write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);void display()nian=read_byte(0x8d);yue=read_byte(0x89);ri=read_byte(0x87);shi=read_byte(0x85); fen=read_byte(0x83); miao=read_byte(0x81);we=read_byte(0x8b); write_com(0x80+1);