基于单片机的电子万年历设计.doc
- 文档编号:14733747
- 上传时间:2023-06-26
- 格式:DOC
- 页数:39
- 大小:2.01MB
基于单片机的电子万年历设计.doc
《基于单片机的电子万年历设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的电子万年历设计.doc(39页珍藏版)》请在冰点文库上搜索。
东南大学成贤学院毕业论文
毕业设计报告(论文)
基于单片机的电子万年历设计
所属系电子工程系
专业自动化
学号01208435
姓 名柏亚林
指导教师李林
起讫日期2012.3---2012.5
设计地点东南大学成贤学院
东南大学成贤学院毕业设计报告(论文)
诚信承诺
本人承诺所呈交的毕业设计报告(论文)及取得的成果是在导师指导下完成,引用他人成果的部分均已列出参考文献。
如论文涉及任何知识产权纠纷,本人将承担一切责任。
学生签名:
日 期:
摘要
随着科技的快速发展,时间的流逝,至从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。
美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS1302。
它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。
对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。
该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。
综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。
本电路为实现电子万年历的功能,采用单片机AT89S52,辅助以必要的外围电路,用C语言编写程序,并进行模块化设计而成的电子万年历系统.它通过LCD能正确显示阴阳历星期和时分秒,具有功能稳定,精确度高和可调的特点。
关键词:
单片机AT89S52;DS1302;LCD;
Abstract
Alongwiththerapiddevelopmentoftechnology,thepassageoftime,toviewthesun,fromthependulumclocksarenowelectricclock,humancontinuouslyresearch,innovationrecord.TheUnitedStatesoutJuanDALLAShasfinecurrentchargeoflowpowerconsumptioncanrealtimeclockcircuitDS1302.Itcanbetoyear,month,day,Sunday,when,minutesandsecondsforthetime,alsohasaleapyearcompensationandotherfunctions,andtheDS1302longservicelifeandsmallerror.Fordigitalelectroniccalendarusingintuitivedigitaldisplay,canalsoshowsthatyear,month,day,Sunday,when,minutesandsecondsandtemperature,information,butalsohastimecalibrationetc.Function.ThiscircuitAT89S52SCMasthecore,powerconsumptionissmall,canbein3Voflow-pressurework,voltagecanchoose3~5Vvoltagepowersupply.
Tosumupthecalendarhasreadtheconvenient,directdisplay,functionaldiversity,simplecircuit,lowcost,andmanyotheradvantages,conformtothetrendofthedevelopmentofelectronicinstruments,andhasabroadmarketprospect.
Thiscircuittorealizethefunctionofelectroniccalendar,USESthemonolithicintegratedcircuitAT89S52,aidedbythenecessaryperipheralcircuit,withtheClanguageprogram,andthemodulardesignandintoelectroniccalendarsystem.ItthroughtheLCDcandisplaycorrectYinYangLiweekanddeterminedwhen,withfunctionstability,highprecisionandadjustablecharacteristics.
Keywords:
monolithicintegratedcircuitAT89S52;DS1302;LCD;
33
目录
摘要 I
Abstract II
第一章绪论 1
1.1设计目的与意义 1
1.2方案选择与DIY电子万年历的研究情况 1
1.2.1时钟芯片选择 1
1.2.2键盘选择 2
1.2.3显示模块选择 3
1.2.4DIY万年历的研究情况 3
第二章主要硬件描述 4
2.189C52模块 4
2.2显示模块LCM12864 4
2.2.1液晶模块概述 4
2.2.2液晶模块特点 4
2.3芯片DS1302简介 5
2.4芯片DS18B20简介 5
第三章硬件设计与实现 6
3.1单片机最小系统的设计 6
3.2时钟电路的设计 7
3.3温度采集模块的设计 7
3.4人机交互模块设计 8
第四章系统软件设计与实现 9
4.1主要算法流程图描述 9
4.2LCM16824子程序的实现 13
4.3DS1302子程序的实现 14
4.4DS18B20子程序的实现 15
4.5键盘子程序的实现 16
4.6主程序的实现 17
第五章测试结果分析与结果 18
5.1测试结果分析 18
5.2测试总结 18
结束语 19
致谢 20
参考文献 21
附录一作品实物图 21
附录二原理图 22
附录三部分程序 23
第一章绪论
1.1设计目的与意义
随着电子技术的高速发展,对电子方面人才的要求越来越高,不仅要求其具备相关的专业理论知识,还要求其具有较强的设计、制作等实践动手能力.此次学校举行的电子设计无疑是对从事电子相关专业的人的一次很好的锻炼和考验,是培养信息人才的一次良好的机会,为其提供了一个理论知识与实践相结合的平台。
通过本次课程设计,引导学生结合所学的电路理论和程序设计的知识,思考设计方案,以小组合作方式,分工完成各个部分,从而掌握相关的硬件结合软件显示电路的设计和调试技术,一方面提高了学生的实践动手和协作能力,另一方面培养了学生综合运用所学理论知识进行工程设计的能力。
1.2方案选择与DIY电子万年历的研究情况
1.2.1时钟芯片选择
方案一:
不使用芯片,采用单片机的定时计数器
这种方法原理是利用单片机芯片的定时器来产生固定的时间,模拟时钟的时,分,秒。
如:
利用AT80C52芯片,定时器用工作方式1,每50ms产生一个中断,循环20次,即1s周期。
每一个周期加1,那么1min为60个周期,1h就是60*60=3600个周期,一天就是3600*24=86400个周期。
此方法优点是可以省去一些外围的芯片,但这种方法只能适用于一些要求不是十分精确,不做长期保留的场合。
方案二:
并行接口时钟芯片DS12887
特点:
采用单片机应用系统并行总线(三总线)扩展的接口电路,采用这种接口电路具有操作速度快,编程方便的优点。
但是对于80C52单片机来说,低位地址线要通过锁存器输出,还要地址译码器,而且并行口芯片的体积相对较大,DS12887管脚图如图1所示。
图1DS12887管脚图
方案三:
串行接口时钟芯片DS1302
芯片主特性:
(1)实时时钟具有能计算2100年之前的秒分时日日期星期月年的能力,还有闰年调整的能力
(2)8位暂存数据存储RAM
(3)串行I/O口使得管脚数量最少
(4)工作电压范围2.0~5.5V
(5)工作电流2.0V时,小于300nA
(5)读/写时钟或RAM数据时有两种传送方式单字节传送和多字节传送字符组方式
(6)8脚DIP封装或可选的8脚SOIC封装根据表面装配
(7)简单3线接口
(8)与TTL兼容Vcc=5V
(9)可选工业级温度范围-40+85
优点:
串行接口的日历时钟芯片,使用简单,接口容易,与微型计算机连线较少等特点,在单片机系统尤其是手持式信息设备中己得到了广泛的应用。
所以,最终选择串行时钟芯片DS1302,DS1302的管脚图如图2所示。
图2DS1302管脚图
1.2.2键盘选择
方案一:
矩阵式键盘
矩阵式键盘电路图如图3所示。
图3矩阵式键盘
行列式键盘的原理就是每一行线与每一列线的交叉地方不相通,而是接上一个按键,通过按键来接通。
特点:
以省出不少的I/O口资源,程序编写相对复杂点,适用于键数比较多的情况。
方案二:
独立式键盘
独立式键盘电路图如图4所示。
图4独立式键盘
独立式键盘是指各个按键相互独立地连接到各自的单片机的I/O口,I/O口只需要做输入口就能读到所有的按键。
特点:
电路简单,程序容易写,适用于按键数较少的情况。
所以我们选择独立式键盘。
1.2.3显示模块选择
方案一:
LED数码管显示
数码管显示比较常用的是采用CD4511和74LS138实现数码转换,数码显示分动态显示和静态显示,静态显示具有锁存功能,可以使数据显示得很清楚,但浪费了一些资源。
目前单片机数码管普通采用动态显示。
编程简单,但只能显示数字,不能显示中文。
方案二:
LCD1602
能够显示英文和数字。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号。
方案三:
LCD12864
作为一种输出方式,液晶显示最大的特点就是能够实现友好的人机界面,它己经广泛应用于现代工业控制和智能化仪器仪表等领域,它己经成为单片机就用开发领域典型模块之一。
能够方便的显示文字和数字。
所以最终选择LCD12864。
1.2.4DIY万年历的研究情况
目前电子爱好者,所设计的万年历大部分都采用LCD1602或数码管显示,只能显示阳历,不能显示阴历,而且没有阴历相对应的的天干地支和生肖年,没有达到多功能的效果。
我们采用LCD12864显示,通过算法实现,能正确显示阴历,具有良好的界面,为了追求时间的准确,我们采用芯片DS1302,通过单片机控制,读出时间显示在LCD上。
我们除了用芯片DS18B20,通过程序控制,把温度也显示出来外还通过算法控制,把阴历的天干地支和生肖年也显示出来,达到多功能效果。
第二章主要硬件描述
2.189C52模块
Mcs-51单片机管脚图图如图5所示。
图5单片机管脚图
(1)一个8位的微处理器(CPU)
(2)片内数据存储器RAM(128B/256B)
(3)片内程序存储器ROM/EPROM(4kB/8kB)
(4)4个8位并行I/O拉口P0-P3,每个口既可以作输入也可以作输出
(5)2个16位定时器/计数器
(6)5个中断源的中断控制系统
(7)1个全双工的串行I/O接口
(8)片内时钟振荡器
2.2显示模块LCM12864
2.2.1液晶模块概述
我们采用FG12864J显示模块,如图6所示,它是一种图形点阵液晶显示器。
它主要采用动态驱动原理由行驱动—控制器和列驱动器两部分组成了128(列)×64(行)的全点阵液晶显示。
2.2.2液晶模块特点
(1)工作电压为+5V±10%,可自带驱动LCD所需的负电压
(2)全屏幕点阵,点阵数为128(列)×64(行),可显示8(/行)×4(行)个(16×16点阵)汉字,也可完成图形,字符的显示
(3)与CPU接口采用5条位控制总线和8位并行数据总线输入输出,适配M6800系列时序
(4)内部有显示数据锁存器
(5)简单的操作指令显示开关设置,显示起始行设置,地址指针设置和数据读/写等指令
图6FG12864J显示模块
2.3芯片DS1302简介
DS1302是DALLAS公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM指示决定采用24或12小时格式。
DS1302与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1RES复位2I/O数据线3SCLK串行时钟时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式通信DS1302工作时功耗很低保持数据和时钟信息时功率小于1mW。
DS1302的管脚描述如表1所示。
表1DS1302管脚
X1X2
32.758KHz晶振管脚
GND
地
RST
复位
I/O
数据输入/输出引脚
SCLK
串行时钟
Vcc1Vcc2
电源供电管脚
2.4芯片DS18B20简介
DS18B20温度传感器当仁不让。
超小的体积,超低的硬件开消,抗干扰能力强,精度高,附加功能强。
对电子爱好者来说,DS18B20是我们开发温度相关的首选小产品。
DS18B20引脚功能如表2所示。
表2DS18B20引脚功能
GND
地
DQ
单数据总线
VDD
电源电压
NC
空引脚
第三章硬件设计与实现
该万年历以89S52作为控制核心,外接DS18B20温度传感器,DS1302时钟芯片,显示采用LCM12864,调表采用矩阵式键盘,整体硬件电路的框图如图7所示。
DS1302
时钟芯片
MCU
8052
DS18B20
温度采样
LCD显示
调整电路
图7硬件电路框图
3.1单片机最小系统的设计
AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。
单片机的最小系统如图8所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。
第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。
图8单片机最小系统
3.2时钟电路的设计
本系统采用有DS1302串行时钟芯片作为主时钟电路,该电路使用单独的32.768M的晶振和单独的电源供电,减小主控的负担。
电路图如图9所示。
图9时钟电路
3.3温度采集模块的设计
采用数字式温度传感器DS18B20,它是数字式温度传感器,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,使用P0.7与DS18B20的I/O口连接加一个上拉电阻,Vcc接电源,Vss接地。
电路图如图10所示。
图10温度采集电路
3.4人机交互模块设计
该系统输入模块采用独立式式键盘输入,显示模块采用LCM12864,很好的实现了人机交互,液晶与主控制器的接口如图11所示。
图11液晶接口电路
第四章系统软件设计与实现
4.1主要算法流程图描述
以80C52为核心,处理外转电路传进来的信号,实现时钟数据的读取,保存,显示其及键盘操作。
流程图如图12所示。
图12主程序流程图
阳历和时分秒都是通过DS1302读出来的,经过主控的转换和处理最终显示在LCM12864上,该程序流程图如图13所示。
图13计算阳历和时分秒流程图
阴历是通过一种算法转换过来,首先得到阳历值,然后根据这种算法把阳历转换成阴历,最终显示在LCM12864模块上,该程序流程图如图14所示。
图14计算阴历程序流程图
时间调整是通过四个独立按键来调整时间值,时间调整流程图如图15所示。
图15时间调整程序流程图
星期的计算方法如下:
星期=(日期年份+所过闰年数+月校正数)%7,如果是在闰年又不到3月份上述之和要减一天再除7,其1到12月的校正数据为[622503514624],该程序中采用1个字节表示年份闰年数也只计算1900年以后的闰年数。
该程序的流程图如图16所示。
图16计算星期算法
4.2LCM16824子程序的实现
LCM12864的读写时序如图17所示。
图17LCM12864读写时序
主要函数模块:
函数:
voidlcd_init(void)
显示初始化程序
函数:
VoidGUI_init()
该函数用于初始化显示界面,把一些固定不需要刷新的文字固定下来
函数:
voidlw(ucharx,uchary,uchardd)
用来写数据的子程序
函数:
voiddisplay(ucharxx,ucharyy,ucharn,ucharfb,ucharhz[])
用于显示汉字,每个汉字为16*16的点阵
函数:
voidshownum(ucharxx,ucharyy,ucharn,ucharfb,ucharnum[])
用于显示数字,每个数字为8*16的点阵
4.3DS1302子程序的实现
DS1302的读写时序如图18所示。
图18DS1302读写时序
定义结构体数组SYSTEMTIME的时间类型,结构体数组如下:
typedefstruct__SYSTEMTIME__
{
unsignedcharSecond;
unsignedcharMinute;
unsignedcharHour;
unsignedcharWeek;
unsignedcharDay;
unsignedcharMonth;
unsignedcharYear;
}SYSTEMTIME
主要函数模块:
函数:
voidInitial_DS1302(void)
描述:
时钟芯片初始化
函数:
voidWrite1302(unsignedcharucAddr,unsignedcharucDa)
描述:
把某个数据写进某个地址
函数:
unsignedcharRead1302(unsignedcharucAddr)
描述:
从芯片内某地址读取数据
函数:
voidDS1302_GetTime(SYSTEMTIME*Time)
描述:
获取时钟芯片的时钟数据到自定义的结构型数组
函数:
voidDS1302InputByte(unsignedchard)
描述:
往时钟写入一字节
函数:
unsignedcharDS1302OutputByte(void)
描述:
从时间内读取一个字节
4.4DS18B20子程序的实现
DS18B20的读写时序如图19所示。
图19DS18B20读写时序
简易的程序流程图如图20所示:
图20DS18B20读写程序流程图
主要函数描述:
函数:
voidInit_DS18B20(void)
描述:
单总线传输初始化函数.
函数:
voidWriteOneChar(uchardat)
描述:
往芯片内部地址写入一个字节,有写数据和写指令之分.
函数:
voidReadTemp(void)
描述:
读取芯片的温度.
函数:
voiddelay_18B20(unsignedinti)
描述:
延时函数
4.5键盘子程序的实现
键盘示意图如图21所示。
图21按键示意图
主要函数模块:
函数名:
voidkey_count()
功能描述:
设置状态转换函数,根据变量count的不同值,对应不同的设置状态按下设置键,自动切换设置位
函数名:
voidkey_out()
功能描述:
跳出设置模式
函数名:
ucharkey_up(inttemp,intmax,intmin)
功能描述:
按键加函数,在最大值与最小值之间变化
函数名:
ucharkey_down(inttemp,intmax,intmin)
功能描述:
按键减函数,在最大值与最小值之间变化
函数名:
voidset_year();voidset_month();voidset_day();voidset_hour();
voidset_minute();
功能描述:
分别是用来设置年月日时分秒
函数名:
voidkey_al01()
功能描述:
设置定时报警功能
4.6主程序的实现
主要函数模块:
函数名
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 电子 万年历 设计