多功能万年历毕业设计.docx
《多功能万年历毕业设计.docx》由会员分享,可在线阅读,更多相关《多功能万年历毕业设计.docx(75页珍藏版)》请在冰豆网上搜索。
多功能万年历毕业设计
多功能万年历的设计
摘要:
本设计采用了以广泛使用的单片机技术为核心,软硬件结合,使硬件部分大为简化,提高了系统稳定性,并采用LCD显示电路、键盘电路,使人机交互简便易行,此外还结合音乐闹铃电路、温度采集电路和供电电路。
本方案设计出的万年历可以显示日期、时间、温度、农历,并且设置了音乐闹铃功能。
该万年历可以应用于一般的生活和工作中,也可以通过改装,提高性能,增添新功能,从而给人们的生活和工作带来方便。
关键词:
万年历;AT89S52;LCD1602;时钟日历芯片DS1302;音乐闹钟
TheMulti-functionalCalendarDesign
na
Abstract:
Thisdesignhasadoptedbytheextensiveuseofsinglechipmicrocomputerasthecore.Hardwareandsoftwarecombinationmakethehardwarepartsgreatlysimplifiedandimprovethestabilityofthesystem.TheuseofLCDdisplaycircuit,keyboardcircuitmakestheinformationexchangesimple.Inaddition,thedesigniscombinedwithmusicalarmcircuit,temperatureacquisitioncircuitandpowersupplycircuit.Itcanshowacalendardate,time,temperature,thelunarandsetupmusicalarmfunction.Ononehangthecalendarcanbeappliedtogenerallifeandwork,ontheotherhang,itcanimproveperformancebymodificationtoaddnewfunctions,sothatitcanbringmoreconveniencetopeople'slifeandwork.
Keywords:
calendar;AT89S52;LCD1602;clockcalendarchipDS1302;musicalarmclock.
引言
电子万年历是实现对年、月、日、时、分、秒数字显示的计时装置,广泛用于个人、家庭、车站、码头、办公室、银行大厅等场所,成为人们日常生活中的必需品。
数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。
钟表的数字化给人们生产生活带来了极大的方便,在此基础上完成的电子万年历精度高,功能易于扩展,可扩展成为诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动启闭路灯等电路。
因此,研究电子万年历及扩大其应用有着非常现实的意义。
1系统功能与方案论证
1.1系统功能
·LCD显示年、月、日、时、分、秒、星期、温度、农历等信息
·手动调整年、月、日、时、分、星期、温度上限、闹铃时间
·温度报警
·闹铃播放音乐
·日历时间掉电保护
·公历与农历自动关联
·闹铃可选择关闭、每天循环或只响应一次三种模式
·可选用USB、直流12V或5V电源或交流9V电源对电路进行供电
1.2系统基本方案选择和论证
由于现在市面上的电子万年历的种类比较多,因此到底选择什么样的方案在设计中是至关重要的。
正确地选择方案就可以使产品更加人性化,并且可以减小开发的难度,缩短开发的周期,降低产品的成本等等,因此就会被人们普遍接受,并且能够更快地将产品推向市场实现其自身的价值。
1.2.1单片机芯片的选择方案和论证
方案一:
采用89C51芯片作为硬件核心,采用FlashROM,内部具有4KBROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术,在烧写程序时需要专门的下载器。
方案二:
采用AT89S52,片内ROM全都采用FlashROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KBROM存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能时,烧写程序方面,再加上本系统程序较大,需要较大的存储空间,因此选择采用AT89S52作为主控制系统。
1.2.2显示模块选择方案和论证
方案一:
采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。
但所需数码管太多,布线和焊接困难极易出错,因此不采用LED数码管作为显示。
方案二:
采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。
方案三:
采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量字符,显示多样,清晰可见,但是价格贵,需要的接口线多,本设计所需显示的内容较多。
所以在此设计中采用LCD1602液晶显示屏。
1.2.3时钟芯片的选择方案和论证
方案一:
直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。
采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大,所以不采用此方案。
方案二:
采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,31×8位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA。
1.2.4温度传感器的选择方案与论证
方案一:
使用热敏电阻作为传感器,用热敏电阻与一个相应阻值电阻相串联分压,利用热敏电阻阻值随温度变化而变化的特性,采集这两个电阻变化的分压值,并进行A/D转换。
此设计方案需用A/D转换电路,增加硬件成本而且热敏电阻的感温特性曲线并不是严格线性的,会产生较大的测量误差。
方案二:
采用数字式温度传感器DS18B20,此类传感器为数字式传感器而且仅需要一条数据线进行数据传输,易于与单片机连接,可以去除A/D模块,降低硬件成本,简化系统电路。
另外,数字式温度传感器还具有测量精度高、测量范围广等优点。
1.3电路设计最终方案决定
综上各方案所述,对此次作品的方案选定:
采用AT89S52作为主控制系统;DS1302实现时钟;数字式温度传感器;LCD1602字符液晶显示屏作为显示。
2系统的硬件设计与实现
2.1电路设计框图
图1系统框图
2.2系统硬件概述
本设计以AT89S52单片机为核心,构成单片机控制电路,结合DS1302时钟芯片显示公历的年、月、日、星期、时、分、秒和农历的月、日,同时完成对它们的自动调整和掉电保护,全部信息用液晶显示器显示出来。
键盘输入由四个按键来实现,用这四个按键可以对日期、时间、星期、温度报警上限进行调整,并可以对闹铃的开关和闹铃的时间进行设置。
闹铃功能通过蜂鸣器来实现。
温度的采集通过DS18B20来实现。
电源电路可选用直流12V或5V电源9V交流电源输入,再经过稳压集成块输出+5V电压,可稳定工作。
系统框图如图1所示,其软硬件设计简单,时间记录准确,可广泛应用于长时间连续显示的系统中。
2.3各系统电路及工作原理
本设计分为单片机控制电路、DS1302时钟电路、DS18B20温度采集电路、1602显示电路、键盘输入电路、闹铃电路、电源电路几个模块。
充分利用硬件电路的可靠性、稳定性和芯片的方便性,使整体电路简单可行。
2.3.1AT89S52单片机最小系统设计
AT89S52是一种低功耗,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元。
(1)AT89S52的引脚及功能
AT89S52单片机的引脚说明如图2所示。
图2AT89S52的引脚
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高,即是要接上拉电阻。
P1、P2、P3口都是内部提供上拉电阻的8位双向I/O口,能接收输出4TTL门电流。
当各自管脚写入1后,内部上拉为高,都可用作输入。
在FLASH编程和校验时,P1口作为第八位地址接收;P2口接收高八位地址信号和控制信号。
P3口可作为AT89S52的一些特殊功能口。
RST是复位信号引脚。
/EA/VPP是程序存储器的读选通信号端。
当/EA保持低电平时,对ROM的读操作限定在外部程序存储器;当/EA端保持高电平时,对ROM的读操作从内部程序存储器开始。
XTAL1(19脚)是反向振荡放大器的输入及内部时钟工作电路的输入端。
XTAL2(18脚)是来自反向振荡器的输出端[1]。
(2)AT89S52单片机最小系统
单片机的最小系统如图3所示,电路中轻触按键、C3和R9组成单片机的复位电路,连接到单片机的第9脚,它是施密特触发输入,当振荡器起振后,单片机上电瞬间,RC电路充电,RST引脚端出现正脉冲,RST高电平单片机保持复位状态。
此时,ALE、/PSEN、P0、P1、P2、P3口都输出高电平,RST变成低电平后,进入工作状态。
当需要手动复位时,按下轻触按键,RST为高电平,单片机进入复位状态,松开按键后,进入工作状态。
18、19脚之间接一个石英晶体及两个电容,构成稳定的自激振荡器,振荡信号是单片机工作的基本节拍。
图3单片机最小系统
2.3.2时钟电路模块的设计
(1)DS1302芯片介绍
日历时钟芯片DS1302是一种串行接口的实时时钟,芯片内部具有可编程日历时钟和31个字节的静态RAM,日历时钟可自动进行闰年补偿,计时准确,接口简单,使用方便,工作电压范围宽(2.5~5.5V),功耗低,芯片自身还有对备份电池进行涓流充电的功能。
DS1302采用8脚DIP封装,其引脚排列如图4所示
图4DS1302引脚图
VCC1和VCC2分别是主电源和后备电源引脚,DS1302由VCC1或VCC2中较大者供电。
X1,X2为振荡源引脚,需外接32.768KHZ晶振。
(2)DS1302的应用
DS1302与单片机之间采用3线串行通信方式。
串行时钟信号SCLK接到单片机的P1.0引脚;数据输入/输出信号I/O接到单片机的P1.1引脚;复位/或通信允许信号RST接到单片机的P1.2引脚,RST=1允许通信,RST=0禁止通信。
单片机AT89S52作为主机通过控制SCLK、I/O和RST信号实现两芯片间的数据传送。
DS1302时钟电路如图5所示。
图5DS1302时钟电路
2.3.3温度采集电路的设计
温度传感器DS18B20,是一种数字式的温度传感器,具有测量精度高,电路连接简单等特点,此类传感器仅需要一条数据线进行数据传输。
温度采集模块如图6所示。
图6温度采集模块
2.3.4LCD1602液晶显示模块设计
(1)1602字符型LCD简介
LCD液晶显示器是一种被动式的显示器,本身并不发光,而是利用液晶在电压作用下,能改变光线通过方向的特性而达到显示白底黑字或黑字白底的目的。
本设计采用16列×2行的字符型LCD1602带背光的液晶显示器。
LCD1602主要技术参数:
·显示容量:
16×2个字符
·工作电压:
4.5~5.5V
·工作电流:
2.0mA(5.0V)
它的引脚图如图8所示:
图81602引脚图
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平是进行读操作,低电平时进行写操作。
当RS和RW同为低电平时可以写入指令或显示地址,当RS为低电平且RW为高电平是可以读忙信号,当RS为高RW为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变为低电平时,液晶执行指令。
第15、16两脚为背光电源。
(2)指令说明
初始化设置
1)显示模式设置
表1显示模式指令表
2)显示开关及光标设置
表2显示开关及光标指令表
(3)LCD1602的应用电路
图9LCD1602显示模块
2.3.5电源电路
为了方便使用,本系统设计了双电源,既可选择交流9V供电,也可选用直流12V或5V供电。
本系统还设置了USB接口,可方便使用MP3或手机充电器对电路进行供电。
电源模块如图10所示。
采用直流或交流电源供电时,电路经过二极管IN4007半波整流和电容C3滤波后送入三端稳压管7805产生+5V的电压再经滤波后为电路进行供电。
采用直流+5V稳压电源时,须接上跳帽,这时三端稳压管7805不工作。
图10电源模块
2.3.6闹钟电路设计
本设计的闹钟电路直接采用PNP型三极管驱动蜂鸣器发声,当单片机的P1.7引脚送出低电平时,PNP型三极管饱和导通,蜂鸣器发声,为高电平时不发声,因此通过单片机产生不同频率的脉冲从P1.7引脚送出,蜂鸣器就会发出各种音调的声音。
闹钟电路如图11所示。
图11闹钟电路
2.3.7键盘输入电路
本系统设置了四个功能按键:
K1、K2、K3、K4,如图12所示。
·K1的功能:
按一下进入阴历显示界面,按两下进入模式选择界面,按三下,退出模式选择界面,回到主页面。
在闹铃响的时候,按一下可停止闹铃。
·K2的功能:
对时间、日历、闹铃时间、闹铃开关、温度报警等内容进行选择。
·K3的功能:
对相应的内容进行加一操作。
·K4的功能:
对相应的内容进行减一操作。
图12键盘输入电路
3软件设计
为了方便编写、调试和增加可读性,本设计的软件部分采用C语言进行编写。
本系统主要程序模块包括AT89S52主控程序、DS1302时间处理、环境温度采集、LCD1602显示、键盘扫描、音乐播放、公历转农历等几部分。
3.1主程序框图
图13主程序框图
3.2DS1302时间处理
DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据的读/写可以用单字节或多字节的突发模式进行。
所有的数据应在时钟的下降沿变化,而在时钟的上升沿,在芯片或与之相应的设备进行输入。
(1)命令字节
命令字节的格式如表3所示
表3DS1302的命令字节格式
D
D6
D5
D4
D3
D2
D1
D0
1
RAM
A4
A3
A2
A1
A0
RD
CK
WR
每次数据的传输都是有命令字节开始的,这里的最高有效位必须是1。
D6是RAM(为1)或时钟(为0)的标识位。
D1~D5定义片内寄存器的地址。
最低有效位(D0)定义了写操作(为0时)或读操作(为1时),命令字节的传输时钟从最低有效位开始。
(2)数据输入输出(I/O)
在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始,如下图-14所示。
同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。
如下图-15所示。
图14读出DS1302数据
图15写DS1302控制字
(3)日历、时钟寄存器及其控制字
DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表4所示,其中奇数为读操作,偶数为写操作。
表4DS1302的日历、时钟寄存器及其控制字
寄存器
名
命令字
取值
范围
各位内容
写操作
读操作
7
6
5
4
3
2
1
0
秒寄存器
80H
81H
00-59
CH
10SEC
SEC
分钟寄存器
82H
83H
00-59
0
10MIN
MIN
小时
寄存器
84H
85H
1-12或
00-23
12/
24
0
10
AP
HR
HR
日期
寄存器
86H
87H
01-28,29,
30,31
0
0
10DATE
DATE
月份寄存器
88H
89H
01-12
0
0
0
IOM
MONTH
周日寄存器
8AH
8BH
01-07
0
0
0
0
0
DAY
年份寄存器
8CH
8DH
00-99
10YEAR
YEAR
时间处理子程序流程图如图16所示,程序见附录一。
图16时间处理程序框图
3.3环境温度采集
温度采集子程序流程图如图17所示,程序见附录一。
图17温度采集程序框图
3.4键盘扫描
键盘扫描子程序流程图如图18所示,按键功能说明详见键盘输入电路部分,程序则见附录一。
3.5音乐播放
对于单片机产生音乐,关键是控制频率的输出。
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,本设计中利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
程序和程序说明见附录一。
3.6公历转农历
本设计采用的是按年查表法来实现公历转换成农历,这样可最大限度地减少表格所占的程序空间。
这里采用了三个字节来表示一年的农历信息。
计算公历日对应的农历日期的方法:
先计算出公历日离当年元旦的天数,然后查表取得当年的春节日期计算出春节离元旦的天数,二者相减即可算出公历日离春节的天数,以后只要根据大小月和闰月信息,减一月天数调整一月农历月份,即可推算出公历日所对应的农历日期。
如公历日不到春节日期,农历年要比公历年小一年,农历大小月取前一年的信息,农历月从12月向前推算[2]。
公历转农历程序流程图如图19所示,程序见附录一。
图18键盘扫描框图
图19公历转农历程序流程图
结束语
本设计以AT89S52单片机为核心,利用软件编程,通过键盘控制、温度传感器、日历时钟芯片和LCD液晶显示基本达到预想效果。
本设计硬件系统相对简单,使用方便。
程序部分是本设计的一个难点,为了实现较多的功能,程序变得相当庞大,调试起来比较麻烦。
由于本人能力有限,程序还未能进一步优化,为了节约成本,系统未能实现更多的功能,如农历年、天干地支和星期自动关联等。
参考文献
[1]顾滨,赵伟军,王泰,鲍可进,李铁香.单片微计算机原理、开发及应用[M].北京:
高等教育出版社,2000.15-35.
[2]朱思荣.用51单片机实现公历与农历、星期的转换,1-2.
/4994b7d8ce2f0066f5332293.html
[3]DS18B20中文资料,1-22.
/fe0be6e8998fcc22bcd10d2e.html
[4]DS1302中文资料,1-8.
-.html
[5]1602的使用说明及C语言例程,1-5.
/086ce729915f804d2b16c1b5.html
[6]7805应用电路图.电子技术资料网站.
/88/131/138/2007/6044.html
[7]窦振中.单片机外围器件实用手册输出通道器件分册[M].北京:
北京航空航天大学出版社,2002.467-479.
[8]刘建清,鲁金,王春生.从零开始学单片机技术[M].北京:
国防工业出版社,2006.28-31.。
[9]徐爱钧.单片机原理实用教程-基于proteus虚拟仿真[M].北京:
电子工业出版社,1996.258-267.
[10]张齐,朱宁西.单片机应用系统设计技术—基于C51的protues仿真(第2版)[M].北京:
电子工业出版社,2009.260-269.
附录
附录A程序
/************使用LCD1602、DS1302时钟芯片、DS18B20温度传感器完成该万年历**************/
#include
#include"LM016L.h"
#include"DS1302.h"
#include"yinli.h"
#include"DS18B20.h"
#include"KeyScan.h"
#include"MODE.h"
#include"OPEN.h"
#include"SoundPlay.h"
#defineuintunsignedint//宏定义
#defineucharunsignedchar
voidopen();//上电显示
voidKeyScan();//键盘扫描
voidSetTime_Mode();//调时
voidSetDate_Mode();//调日期
voidSetYear_Week_Mode();//调年和星期
voidSetRing_Mode();//闹钟设置
voidSetTemp_Mode();//温度上限设置模式
voidInitialSound(void);//音乐初始化
voidGuangbiao_Flash();//光标闪烁
voidPlay(unsignedchar*Sound,unsignedcharSignature,unsignedOctachord,unsignedintSpeed);
/******************************日历主函数************************************/
voidmain()
{
init();
Warn_Ling_init();
Read_RTC();
open();//上电显示函数
write_com(0x01);//清屏
while
(1)
{
time_date();//时间处理
KeyScan();//键盘扫描
if(ring_time[1]==l_tmpdate[1]&&ring_time[2]==l_tmpdate[2]&&flag==0&&alarm!
=0)//判断是否到闹钟设置的时间,是的话执行相应动作
{
uchari;
if(alarm==1)
alarm=0;
write_com(0x01);
write_com(0x80+0x00);
for(i=0;i<15;i++)
{
wr