单片机课程设计万年历.docx
《单片机课程设计万年历.docx》由会员分享,可在线阅读,更多相关《单片机课程设计万年历.docx(28页珍藏版)》请在冰豆网上搜索。
![单片机课程设计万年历.docx](https://file1.bdocx.com/fileroot1/2023-1/10/b00d7672-1daf-4074-8779-34dd36268905/b00d7672-1daf-4074-8779-34dd362689051.gif)
单片机课程设计万年历
单片机技术课程设计说明书
万年历
院、部:
学生姓名:
指导教师:
专业:
班级:
完成时间:
湖南工学院
课程设计任务书
课程:
单片机技术
课程设计题目:
数字电子钟
数字频率计
数字电压表
交通灯
抢答器
密码锁
波形发生器
数字温度计
计算器
数字式秒表
万年历
适用班级:
时间:
指导教师:
摘要
随着当今世界经济的快速发展和信息化时代的来临,各种各样的小型智能家电产品陆续出现在我们的生活当中,电子万年历作为一种功能十分强大的日常计时工具,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长、误差小。
对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、星期、时、分、秒等信息,还具有时间校准等功能,已逐步的出现在我们的日常生活中。
一般日常生活中大都使用的是纸质日历。
纸质日历显示效果不太好并且使用寿命不长,造成了一定的资源浪费。
针对传统的纸质日历局限性,本论文设计了一款基于单片机的电子万年历系统。
本设计以AT89S52单片机为核心,构成系统主控制电路。
AT89S52是一种带8K字节闪速可编程可擦除只读存储器的低电压、高性能CMOS8位为控制器,全部信息用12864液晶显示时间、日期、闹铃及界面的切换由四个独立按键来实现,并可对闹铃开关进行设置。
日历能显示阳历和阴历年、月、日以及星期、时、分、秒。
如有节气及生日都会有提醒显示的功能。
电子万年历采用智能电子控制和显示技术,改善了纸制日历的缺陷。
它集时间、日期、星期等功能于一身,具有读取方便、显示直观、功能多样、电路简洁等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。
关键词:
电子万年历;AT89S52;TLC549;12864液晶显示屏
Abstract
Withtherapiddevelopmentofeconomyandtheadventoftheinformationera,avarietyofsmallintelligenthomeappliancesproductsbegantoappearinourlife,theelectroniccalendarasaverystrongfunctionofthedailytimingtool,itcanbefortheyear,month,day,week,hours,minutesandsecondsfortime,alsohasaleapyearcompensationavarietyoffunctionssuchasDS1302,andlongservicelife,smallerror.Fordigitalelectroniccalendarusingvisualdigitaldisplay,candisplayyear,month,day,week,time,minutesandseconds,andotherinformation,butalsohastimecalibrationandotherfunctions,hasgraduallyappearedinourdailylife.Generaldailylifeareusedpapercalendar.Papercalendardisplayeffectisnotverygoodandtheservicelifeisnotlong,resultinginawasteofresources.
Aimingatthelimitationsoftraditionalpapercalendar,thispaperdesignsachipelectroniccalendarsystem.ThedesignforAT89S52core,systemconsistsofmaincontrolcircuit.AT89S52isa8Kbyteflashprogrammableanderasablereadonlymemoryofthelowvoltage,highperformance8bitCMOSascontroller,alltheinformationwith12864liquidcrystaldisplaytime,date,alarmclockandtheinterfaceoftheswitchiscomposedoffourindependentkeystoachieve,andthealarmswitchsettings.Thecalendarcandisplaythesolarcalendarandlunarcalendaryear,month,dateandweek,when,minutesandseconds.Ifthereisasolartermandbirthdaywillremindthedisplayfunction.
Electroniccalendarusingintelligentelectroniccontrolanddisplaytechnology,improvedthepapercalendardefect.Itsetsthetime,date,weekandotherfunctionsinabody,isconvenient,intuitivedisplay,multiplefunctions,simplecircuitandmanyotheradvantages,complywiththedevelopmenttrendofelectronicinstrumentation,hasbroadmarketprospects.
Keywords:
electroniccalendar;AT89S52;TLC549;12864liquid.
目录
1设计要求与方案…………………………………………………………………………1
1.1设计要求…………………………………………………………………………1
1.2设计创新…………………………………………………………………………1
1.3系统基本方案选择………………………………………………………………1
1.4系统工作原理说明………………………………………………………………2
2硬件系统的设计………………………………………………………………………5
2.1时钟芯片的选择方案和论证………………………………………………………5
2.2单片机主控制模块的设计…………………………………………………………5
2.3单元电路设计………………………………………………………………………5
2.3.1时钟电路…………………………………………………………………5
2.3.2单片机最小控制系统……………………………………………………6
2.3.3液晶显示模块……………………………………………………………6
2.3.4液晶FYD12864-0402B概述………………………………………………7
2.3.5液晶FYD12864-0402B基本特性…………………………………………7
2.3.6液晶FYD12864-0402B串口接口管脚信号………………………………8
3课程设计整体电路……………………………………………………………9
3.1整体原理图………………………………………………………………………9
3.2PCB线路图………………………………………………………………………10
3.3元件分布图………………………………………………………………………11
3.4实物图……………………………………………………………………………11
4课程设计程序…………………………………………………………………………12
4.1main主程序………………………………………………………………………12
4.2LCD12864函数……………………………………………………………………13
4.3显示程序…………………………………………………………………………14
5设计总结及结论…………………………………………………………………………15
5.1系统仿真及结果…………………………………………………………………15
5.2设计体会…………………………………………………………………………16
致谢…………………………………………………………………………………………18
参考文献…………………………………………………………………………………………………19
附录………………………………………………………………………………………………………20
1设计要求与方案
1.1设计要求
(1)具有年、月、日、星期、时、分、秒等功能。
(2)闹钟功能,一旦走时到该时间,能以声音的形式告警提示。
(3)设计5V直流电源系统时钟电路、复位电路。
1.2创新要求
(1)万年历具有阴历显示功能。
(2)具有节气、生日提醒的功能。
1.3系统基本方案选择和论证
方案一:
采用89C51芯片作为硬件核心
采用FlashROM内部只具4KBROM存储空间,由于本设计程序比较长,单片机内部的FlashROM不够,需要加外部扩展ROM芯片24C016,电路设计较为复杂。
同时此单片机也具有89C51的功能,且具有在线编程可能于3V的超低压工作,而且与MCS-51系列单片机完全兼容。
但是运用于电路设计中时由于不具备ISP在线编程技术,当在对电路进行调试时。
由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。
方案二:
采用LED数码管动态扫描
数码管价格适中,对于显示数字最合适,但不能显示汉字、图形、显示效果比较差,并且采用LED数码管连接时接线多,硬件电路较为复杂。
所以在此设计中不采用LED数码管显示。
方案三:
采用LCD液晶显示屏
液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,所以在此设计中采用FYD12864-0402B液晶显示屏。
1.4系统工作原理说明
本电路包括基本的时钟电路模块、液晶显示模块、语音报时模块、温度传感器模块。
各功能模块通过控制芯片连接起来,完成本设计要求。
电路实现的基本功能是电子万年历。
通过液晶LCD12864,可显示年月日、时分秒、星期等基本信息。
增强功能是具备时钟语音报时功能。
即每到整点,系统会自动语音报时,报时信息包括日期及时间。
同时具备显示环境温度的功能。
具体工作流程如图1程序流程图:
图1时间运行流程图
ds1302子程序:
图2ds1302子程序
ds1302程序流程框图:
图3ds1302程序流程框图
2硬件系统的设计
2.1时钟芯片的选择方案
采用DS1302时钟芯片实现时钟。
DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年进行计数,而且精度高,位的RAM做为数据暂存区。
工作电压2.5V--5.5V范围内,2.5V时耗电小于300nA。
按照系统设计功能的要求,初步确定系统由主控模块、时控模块、及显示模块和键盘接口模块共4个模块组成。
主控芯片使用51系列AT89S52单片机时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟DS1302。
采用DS1302作为计时芯片可以做到计时准确。
更重要的是DS1302可以在很小电流的后备电源2.5--5.5V电源,再2.5V时耗电小于300nA,而且DS1302可以编程选择多种充电电流来为备电源进行慢速充电,可以保证后备电源基本不耗电,显示模块采用液晶显示屏。
2.2单片机主控制模块的设计
AT89S52系列单片机是宏品科技生产的单片机,它是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统80C51,但速度快8~12倍。
内部集成MAX810专用复位电路,250K/S即25万次/秒,针对电机控制、强干扰场合。
它有高速、高可靠、低功耗、超低价、强抗静电、强抗干扰的功能。
AT89S52系列工作电压5.5V~3.5V,工作频率范围0MHz~35MHz相当于普通8051的0MHz~420MHz。
在芯片上,拥有灵巧的8位CPU和在系统,可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
2.3单元电路设计
2.3.1时钟电路
时钟芯片DS1302,控制电路如图4所示:
图4时钟电路
时钟电路采用的是ds1302芯片,DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
工作电压与单片机的输入电压比较适合。
上面是它的一些基本的应用介绍。
2.3.2单片机最小控制系统
控制芯片使用AT89S52,控制部分最小系统如图5所示:
图5单片机系统
2.3.3液晶显示模块
显示模块使用液晶FYD12864-0402B,电路原理图如图6所示
图6液晶显示
2.3.4液晶FYD12864-0402B概述
FYD12864-0402B是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字。
由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多。
2.3.5液晶FYD12864-0402B基本特性
(1)低电源电压(VDD:
+3.0--+5.5V)
(2)显示分辨率:
128×64点
(3)内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)
(4)内置128个16×8点阵字符
(5)2MHZ时钟频率
(6)显示方式:
STN、半透、正显
(7)驱动方式:
1/32DUTY,1/5BIAS
(8)视角方向:
6点
(9)背光方式:
侧部高亮白色LED,功耗仅为普通LED的1/5—1/10
(10)通讯方式:
串行、并口可选
(11)内置DC-DC转换电路,无需外加负压
(12)无需片选信号,简化软件设计
2.3.6液晶FYD12864-0402B串口接口管脚信号如表1、表2所示:
表1液晶屏管脚
管脚号
名称
LEVEL
功能
1
VSS
0V
电源地
2
VDD
+5V
电源正(3.0V——5.5V)
3
V0
-
对比度(亮度)调整
4
CS
H/L
模组片选端,高电平有效
5
SID
H/L
串行数据输入端
6
CLK
H/L
串行同步时钟:
上升沿时读取SID数据
15
PSB
L
L:
串口方式(见注释1)
17
/RESET
H/L
复位端,低电平有效(见注释2)
19
A
VDD
背光源电压+5V(见注释3)
20
K
VSS
背光源负端0V(见注释3)
表2液晶屏管脚功能
管脚号
管脚名称
电平
管脚功能描述
1
VSS
0V
电源地
2
VCC
3.0+5V
电源正
3
V0
-
对比度(亮度)调整
4
RS(CS)
H/L
RS=“H”,表示DB7——DB0为显示数据
RS=“L”,表示DB7——DB0为显示指令数据
5
R/W(SID)
H/L
R/W=“H”,E=“H”,数据被读到DB7——DB0
R/W=L,E=H→L,DB7——DB0的数据被写到IR或DR
6
E(SCLK)
H/L
使能信号
7
DB0
H/L
三态数据线
8
DB1
H/L
三态数据线
9
DB2
H/L
三态数据线
10
DB3
H/L
三态数据线
11
DB4
H/L
三态数据线
12
DB5
H/L
三态数据线
13
DB6
H/L
三态数据线
14
DB7
H/L
三态数据线
15
PSB
H/L
H:
8位或4位并口方式,L:
串口方式(见注释1)
16
NC
-
空脚
17
/RESET
H/L
复位端,低电平有效(见注释2)
18
VOUT
-
LCD驱动电压输出端
19
A
VDD
背光源正端(+5V)(见注释3)
20
K
VSS
背光源负端(见注释3)
3、课程设计整体电路
3.1整体原理图如图7所示:
图7原理图
3.2PCB线路整体如图8所示:
图8PCB线路
3.3元件分布如图9所示:
图9元器件分布
3.4实物图如图10所示:
图10实物图
4、课程设计部分程序
4.1main主程序
#include
#include
#include"LCD12864.h"//液晶显示木块头文件
#include"ds18b20.h"//温度模块头文件
#include"ds1302.h"//时钟模块头文件
#include"delay.h"//延时模块头文件
#include"beep.h"//报警模块头文件
#defineucharunsignedchar
#defineuintunsignedint
uchartemp,TNL,almtemp;
voidmain()
{
almtemp=32;//设报警温度值为32℃,可以根据需要设置
Set_RTC();//设置万年历初始时间
delay(500);
lcdset();//液晶显示屏初始化
beepoff();//关闭蜂鸣器
while
(1)
{
TNL=shuju1302();//读-年-月-日-时-分-秒,并将万年历函数变量返回值送给闹铃变量TNL
if(TNL==1)
beepon();//蜂鸣器报警
else
beepoff();
disply1302();//送液晶显示屏显示
temp=ReadyReadTemp();//读温度值,并将温度函数变量返回值送给temp
if(temp>=almtemp)//判temp临界报警温度值的大小
beepon();//蜂鸣器报警
else
beepoff();
display18b20();//送液晶显示屏显示
}
}
4.2LCD12864函数
#include"LCD12864.h"
#include"delay.h"
#include
#defineucharunsignedchar
sbitrs=P3^1;
sbitrw=P3^6;
sbiten=P3^7;
//===========液晶写命令函数=========================================
voidwritecommand(ucharcommand)
{
delay(100);
rs=0;
rw=0;
en=1;
P0=command;//液晶数据线P0
en=0;
}
//============液晶写数据函数=========================================
voidwritedata(uchardate)
{
delay(100);
rs=1;
rw=0;
en=1;
P0=date;
en=0;
}
//==============液晶设置函数=========================================
voidlcdset(void)
{
writecommand(0x30);//基本指令集
writecommand(0x01);//清屏,DDRAM的地址归零
writecommand(0x02);//地址归位
writecommand(0x0c);//显示开,光标关,反白关
writecommand(0x06);//DDRAM地址加1
}
//===========液晶显示函数============================================
voiddisplay(uchary,ucharx,uchar*p)
{
switch(y)
{
case1:
writecommand(0x7f+x);break;//液晶第一行
case2:
writecommand(0x8f+x);break;//0x90+(x-1)
case3:
writecommand(0x87+x);break;
case4:
writecommand(0x97+x);break;
default:
break;
}
while(*p)
writedata(*p++);
}
4.3显示程序
#include"ds1302.h"
#include"LCD12864.h"
#include"delay.h"
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeyejingtable[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x03,0x2d};//0--9