推荐电子万年历的设计与制作课程设计 精品.docx
《推荐电子万年历的设计与制作课程设计 精品.docx》由会员分享,可在线阅读,更多相关《推荐电子万年历的设计与制作课程设计 精品.docx(21页珍藏版)》请在冰豆网上搜索。
![推荐电子万年历的设计与制作课程设计 精品.docx](https://file1.bdocx.com/fileroot1/2023-6/9/35c5ca01-3270-45a8-bf7d-536538faa4ab/35c5ca01-3270-45a8-bf7d-536538faa4ab1.gif)
推荐电子万年历的设计与制作课程设计精品
华南农业大学
电子工程学院应用物理系
课程设计(报告)任务书
设计题目:
电子万年历的设计与制作
任务与要求(请按所选题目自行总结)
任务:
设计一个电子万年历,利用实时时钟芯片ds1302和51单片机制作实时时钟。
要求:
1.使用LCD1602显示屏显示日期和时间;
2.能够显示新历和农历;
3.包括时钟模块,能够显示实时时钟;
4.要有时间设置按键部分;
5.完成硬件电路的设计后,编写程序,实现时间和日期的显示等功能;
6.调试程序,完成功能验证,写出完整的课程设计。
实验器材:
1.单片机最小系统:
单片机(插座),晶振,电阻,电容,按键;
2.电源模块:
自锁开关,LED灯,USB插座;
3.按键模块:
按键;
4.1602显示模块:
1602(排母),电位器,电容;
5.RTC模块:
DS1302芯片(插座),晶振,CR2032电池(插座);
6.DIY小部件:
漆包线,杜邦线,排针,排母,IC插座,电阻包,电容包,烙铁套装;
开始日期20XX年3月4日完成日期20XX年3月23日
电子万年历设计
摘要:
本系统是由单片机最小系统、电源模块、按键模块、LCD1602显示模块及RTC模块组成的电子万年历系统。
通过时钟模块实时进行时间和日期的计数,进而传递给单片机处理,单片机再将其传递给LCD1602模块显示当前时间,另设有按键模块可以完成时间设置以及日期查询等功能操作。
其设计简单,性能优良,时间设置可调,同时同步显示农历和星期,具有较强的实用性。
本文先简要介绍每个模块的工作原理,再作整个系统电路的综合分析,说明该电子万年历的实现过程。
Summary:
Thissystem,electroniccalendarsystem,isposedofSCMminimumsystem,powersupplymodule,keysmodule,LCD1602displaymoduleandRTCmodule.ThroughRTCmoduleforcountingthetimeanddate,andthentransmittoSCMforprocessing,andthensendittotheLCD1602moduletoshowthecurrenttime,alsooperateskeymodulescanbepletedtimesettingandoperatingdatequeryfunction.Itssimpledesign,excellentperformance,adjustabletimesetting,synchronousdisplaylunarcalendarandweekatthesametime,hasstrongpracticability.Thispaperfirstbrieflyintroducestheworkingprincipleofeachmodule,andthenaprehensiveanalysisofthecircuit.Thelast,illustratethewholesystemimplementationprocessoftheelectroniccalendar.
关键词:
万年历,计时,显示,农历
Keywords:
calendar、timing、display、
1.引言
在社会发展快速的今天,便利和谐的生活方式无疑成为人们追求的目标,而在现实生活中,很多地方还是依靠传统的日历和时钟来查看日期和时间,这样既不能快速地同时查看日期和时间,而且一般的时钟精度不高,经常需要人工校准时间。
单片机作为自动控制领域中的一个重要部件,发挥着其重要作用。
用单片机实现电子万年历,功能完善,电路的设计简单,集成芯片的可靠度高,还可以利用软件来进行定期时间校准。
在群众环保意识日益增强的今天,电子万年历可以代替传统的纸质日历,同时还可以显示实时时间,具有很强的实用性。
2.系统的设计与理论分析
2.1系统的模块图如下所示:
图1系统模块图
系统框图简单说明:
单片机最小系统作为核心处理模块,读取RTC模块的实时时间并输送到LCD1602模块进行显示,通过按键模块可以更改当前时间以及查询日期信息,电源模块为整个电路系统供电。
2.2系统的理论分析
2.2.1系统的硬件系统和软件系统概括
电子万年历系统主要由单片机最小系统、按键模块、时钟模块和显示模块构成。
单片机最小系统起到数据处理的作用,初始化RTC模块和LCD模块,时钟模块接收单片机发出的指令或进行时间设置或进行实时时间计数,单片机读取时钟信息送到显示模块显示,并且可以根据不同的按键按下而实现不同的功能。
硬件部分主要由以上4部分组成,而RTC模块可以完成新历的计数功能,直接读取其时间就能得到新历时间信息,其余的功能可以通过相应的算法即用程序完成,比如农历的同步显示、星期的同步显示、按键设置时间以及自动日期纠错和自动时间校准。
在本设计程序中,时钟模块及显示模块的初始化分别通过Ds1302Init()和Lcd1602Init()来实现。
单片机从时钟模块读取数据是通过Ds1302Read(ucharaddr)来实现,而时钟模块从单片机那里读取数据是通过Ds1302ReadTime()来实现。
单片机传送命令到显示屏是通过voidLcdWrite(uchar)完成,写入数据到显示屏显示是通过LcdWriteData(uchardat)来完成。
调用conversion_week()可以实现星期的同步显示,以及nongli1()可以实现农历的同步显示。
整体的代码架构包括六部分:
头文件:
LCD1602.h,DS1302.h,nongli.h;
C文件:
LCD1602.c,DS1302.c,main.c。
2.2.2系统完成步骤与可行性分析
首先完成原理图的绘制,根据原理图分模块完成硬件部分焊接,每焊接一个模块就测试一个模块,知道整个硬件电路都测试完,最后把整个系统程序烧录到单片机进行功能验证和程序调试。
基于硬件电路比较简洁,只要有耐心以及细心就能够完成焊接;程序部分通过小组三人的合作,细推慢敲也一定能够实现基本功能要求,故在有限的时间内,只要分工明确,刻苦坚持,也能够做出完善的系统设计。
3.硬件系统设计
3.1单片机最小系统
单片机最小系统主要由电源、复位、振荡电路以及扩展部分等部分组成。
最小系统原理图如图3所示。
图3最小系统电路图
3.1.1电源供电模块
图4电源模块电路图
对于一个完整的电子设计来讲,首要问题就是为整个系统提供电源供电模块,电源模块的稳定可靠是系统平稳运行的前提和基础。
51单片机虽然使用时间最早、应用范围最广,但是在实际使用过程中,一个和典型的问题就是相比其他系列的单片机,51单片机更容易受到干扰而出现程序跑飞的现象,克服这种现象出现的一个重要手段就是为单片机系统配置一个稳定可靠的电源供电模块。
本最小系统中的电源供电模块的电源通过计算机的USB口供给。
电源电路中接入了电源指示LED,图中R11为LED的限流电阻,S1为电源开关。
3.1.2复位电路
图5复位电路图
单片机的置位和复位,都是为了把电路初始化到一个确定的状态,一般来说,单片机复位电路作用是把一个例如状态机初始化到空状态,而在单片机内部,复位的时候单片机是把一些寄存器以及存储设备装入厂商预设的一个值。
复位电路由按键复位和上电复位两部分组成。
(1)上电复位:
STC89系列单片及为高电平复位,通常在复位引脚RST上连接一个电容到VCC,再连接一个电阻到GND,由此形成一个RC充放电回路保证单片机在上电时RST脚上有足够时间的高电平进行复位,随后回归到低电平进入正常工作状态,这个电阻和电容的典型值为10K和10uF。
(2)按键复位:
按键复位就是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平,而且由于电容的充电,会保持一段时间的高电平来使单片机复位。
3.1.3振荡电路
图6振荡电路图
单片机系统里都有晶振,在单片机系统里晶振作用非常大,它结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片机的一切指令的执行都是建立在单片机晶振提供的时钟频率。
3.2RTC时钟模块
RTC模块采用DS1302芯片,晶振工作频率为32.786M。
3.2.1DS1302芯片概括
DS1302是一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。
实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。
工作电压宽达2.5~5.5V。
采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。
(1)DS1302引脚示意图如下所示:
图3DS1302芯片图
VCC2:
电源输入端
:
复位端/使能端
X1:
晶振连接端I/O:
数据传输端
X2:
晶振连接端SCLK:
时钟信号输入端
GND:
接地端VCC1:
备用电源输入端
(2)RTC模块电路接线原理图如下所示:
图4时钟模块连接原理图
3.2.2DS1302工作时序
DS1302是通过SPI串行总线跟单片机通信的,当进行一次读写操作时最少得读写两个字节,第一个字节是控制字节,就是一个命令,告诉DS1302是读还是写操作,是对RAM还是对CLOK寄存器操作。
第二个字节就是要读或写的数据了。
(1)单字节读
单字节读:
只有在SCLK为低电平时,才能将CE置为高电平。
所以在进行操作之前先将SCLK置低电平,然后将CE置为高电平,接着开始在IO上面放入要传送的电平信号,然后跳变SCLK。
数据在SCLK上升沿时,DS1302读取数据,在SCLK下降沿时,DS1302放置数据到IO上。
(2)单字节写
单字节写:
只有在SCLK为低电平时,才能将RST置为高电平。
说以在进行操作之前先将SCLK置低电平,然后将RST置为高电平,开始在IO上面放入要传送的电平信号,然后跳变SCLK。
数据在SCLK上升沿时,DS1302读取数据,在SCLK下降沿时,DS1302放置数据到IO上。
(3)DS1302内部寄存器原理图
时钟/日历包含在7个寄存器中,数据在时钟/日历寄存器中是二进制编码的十进制格式存储的,也就是常说的BCD码存储的。
3.3显示模块
显示模块使用的是LCD1602液晶,也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号的点阵型液晶模块。
它是由若干个5x7或者5x11的点阵字符位组成,每个点阵字符位都可以用显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。
LCD1602的引脚图:
LCD1602引脚说明:
1脚和2脚:
GND和VCC,为LCD1602工作的电源接入。
3脚:
VL,液晶显示偏压信号,用于调整LCD1602的显示对比度,一般会外接电位器用以调整偏压信号,注意此脚电压为0时可以得到最强的对比度。
4脚:
RS,数据/命令选择端,当此脚为高电平时,可以对1602进行数据字节的传输操作,而为电平时,则是进行命令字节的传输操作。
命令字节,即是用来对LCD1602的一些工作方式作设置的字节;数据字节,即使用以在1602上显示的字节。
值得一提的是,LCD1602的数据是8位的。
5脚:
R/W,读写选择端。
当此脚为高电平可对LCD1602进行读数据操作,反之进行写数据操作。
笔者认为,此脚其实用处不大,直接接地永久置为低电平也不会影响其正常工作。
但是尚未经过复杂系统验证,保留此意见。
6脚:
E,使能信号,其实是LCD1602的数据控制时钟信号,利用该信号的上升沿实现对LCD1602的数据传输。
7~14脚:
8位并行数据口,使得对LCD1602的数据读写大为方便。
15、16脚:
BGVCC和BGGND,为LCD1602背光显示的电源接入。
LCD1602显示模块接线原理图如下所示:
图5LCD1602连接原理图
操作步骤:
1、初始化;
2、写命令(RS=L)设置显示坐标;
3、写数据(RS=H)。
写操作时序图:
显示开/关及光标设置图:
RAM地址映射图图:
3.4系统总流程分析及系统原理图
图6电子万年历总体原理图
电源通过USB插口接入,接到自锁开关,开关控制整个电路的电源,再接到单片机STC89S52芯片的VCC脚,其中引脚40为接地端GND。
单片机的P3^0~P3^3引脚连接4个按键,其中一个连了外部中断0,用来实现时间暂停以便进入时间和日期设置,其余3个则为时间加减以及设置位的选择。
单片机的P3^5~P3^脚分别连接DS1302芯片的
(复位端)、SCLK(时钟信号输入端)以及I/O(数据传输端)端,用来与DS1302芯片进行数据传输,此外还增加了备用电源,在没有接电时用来保持时间;单片机的P0^7~P0^0脚则接LCD1602的数据口,P2^4~P2^6脚分别连接LCD1602的RW、RS及EN,控制LCD1602的数据传输功能,LCD1602外接一个电位器用来控制液晶屏显示对比度,电源和地接入一个发光二极管(串联一个电阻),作为电源指示灯。
4.软件系统设计
4.1功能设计与特点
(1)能够显示公历和当前时间;
(2)农历和星期跟随公历同步显示,并且能够显示出农历中的闰月;
(3)可对当前时间进行设置,有时间‘+’和时间‘-’操作;
(4)自动日期更正,即按键设置过程中不会显示错误的日期;
(5)农历查询范围达到200年。
4.2程序子模块设计
(1)时钟模块及显示模块的初始化;
(2)RTC时钟模块操作函数;
(3)LCD显示模块操作函数;
(4)扫描按键进行时钟模块的时间设置;
(5)显示子程序,合理排版公历、农历、时间和星期的显示;
(6)农历和星期转换函数;
4.3程序的流程图如下所示
4.4程序关键算法设计
(1)星期转换算法
公历日所对应的星期天可以通过计算直接得到,理论上公元0年1月1日为星期日,只要求得公历日离公元0年1月1日的日子数除7后的余数就是星期天。
为了简化计算,采用月校正法,根据公历的年月日可直接计算出星期天。
其算法是:
日期+年份+所过闰年数+月校正数之和除以7的余数就是星期天,但如果是在闰年又不到3月份,上述之和要减一天再除7。
其1-12月的校正数据为:
6、2、2、5、0、3、5、1、4、6、2、4。
(2)农历转换算法
实现公历与农历的转换,一般采用查表法,按日查表是速度最快的方法,但51单片机寻址能力有限,不可能采用按日查表的方法,除按日查外,我们可以通过按月查表和按年查表的方法,再通过适当的计算,来确定公历日所对应的农历日期。
本文采用的是按年查表法,最大限度地减少表格所占的程序空间。
对于农历月来说,大月为30天,小月为29天,这是固定不变的,这样我们就可用1个BIT来表示大小月信息。
农历一年,如有闰月为13个月,否则是12个月,所以一年需要用13个BIT,闰月在农历年中所在的月份并不固定,大部分闰月分布在农历2-8月,但也有少量年份在9月以后,所以要表示闰月的信息,至少要4BIT,在这里我们用4BIT的值来表示闰月的月份,值为0表示本年没有闰月。
有了以上信息还不足以判断公历日对应的农历日,因为还需要一个参照日,我们选用农历正月初一所对应的公历日期作参照日,公历日最大为31日,需要5BIT来表示,而春节所在的月份不是1月就是2月,用1BIT就够了,考虑到表达方便,我们用2BIT来表示春节月,2BIT的值直接表示月份。
这样一年的农历信息只用3个字节就全部包括了。
计算公历日对应的农历日期的方法:
先计算出公历日离当年元旦的天数,然后查表取得当年的春节日期,计算出春节离元旦的天数,二者相减即可算出公历日离春节的天数,以后只要根据大小月和闰月信息,减一月天数,调整一月农历月份,即可推算出公历日所对应的农历日期。
如公历日不到春节日期,农历年要比公历年小一年,农历大小月取前一年的信息,农历月从12月向前推算。
5.系统运行情况分析
(1)上电开始工作
USB插口外接5V直流电源,开启开关,电路正常工作,显示当前时间与日期。
(2)时间和日期的设置
按下按键K3,触发中断,进入时间设置模式,光标显示出当前设置位,按键K2可以移动光标并且转向其他设置位,而K1和K4分别为‘+’和‘-’功能,可以方便的设置时间。
(3)LCD显示的内容
LCD左上角显示的是年、月、日,右下角显示的是相应的农历。
LCD右上角显示的是星期,左下角显示的是当前的时间,表现为24小时制的时、分、秒。
(4)在设置时间的过程中,从不会出现显示错误的日期,达到了预期的目标。
(5)农历的显示范围以及闰月的显示
在查询时间时,农历可以正确显示从1900~2099年间200年范围,并且在闰月出现时能够显示一个‘R’代表闰月,达到预期功能。
(6)时间误差测试
经过两天的测试,系统时间精度能到达到每天小于1S的时间误差。
6.总结与讨论
6.1系统不足与改进
在设计电路与调试的过程中,我们遇到了不少问题,经过仔细思考找到了问题原因,也对实际应用情况下应该注意及改善的问题进行了总结,这些经验对于我们以后自己设计电路的时候无疑有很大的帮助。
主要有以下几点:
1.电源指示灯不能直接接到单片机的VCC,LED灯的压降使得单片机无法正常工作。
2.单片机的P0口作为输出端口的时候要接上拉电阻。
3.焊电路时,应该要一个模块一个模块来焊接,并且逐一测试完再焊下一个模块,避免整个系统焊接完成出现问题而找不到问题原因所在。
4.程序的时间查询功能不完善,查询过程会改变当前时间,有待改进。
5.按键灵敏度不高。
6.程序缺少时间自动校准函数,这样长时间积累会造成时间误差,有待改进。
6.2总结语
在此次的课程设计中,我们对之前学的理论知识有进一步理解,并能将其应用到实际中,做到理论与实际相结合。
设计的过程中也遇到了不少困难,例如,一开始我们要自己设计原理图和选择元件,这和以前相比是不同的,原理图完全靠自己去想,老师不会给出。
当我们想到大致原理图时,开始进行软件画图和仿真,发现电路连接完却不能仿真出正确的结果,试过几次后,从各个模块检查,小组同学再一起进行探讨,最后终于发现导致仿真失败的原因,并且解决了问题,实现了预期功能。
不过实物图和仿真图总是存在差距,前者是理想化模型,后者则不然,当我们将原理图焊接在实验板上时,又出现了各种问题,虽然我们是先焊接一个模块测试没问题后,再焊接下一个模块,但问题还是出现了。
这一系列的问题包括芯片引脚焊接容易焊反、焊接线路短路、导线之间的干扰、输出信号不稳定等等,每当我们解决一个问题以为可以成功时,又有另一问题出现,虽然这过程很容易让人心烦,但是我们依旧不厌其烦的排除困难,最终做出一个可以实现预期功能的路灯控制器电路。
这次课程设计对我们小组而言,知识得到巩固、实践能力得到锻炼、团队精神得到提升,是一次宝贵的经历。
总体来说,通过这次课程设计学习,我们对数电、模电以及单片机的知识有了更深一层的了解,平且学会了一些实际应用,使我们对自己的专业知识有更深化的认识,为以后的学习打下了好的开端。
同时,我们也明白了一句古话:
纸上得来终觉浅,绝知此事要躬行!
附1:
实物图
附2:
参考文献
[1]微雪电子元件封装介绍
[2]申凤琴编著,电子电工技术及应用,北京:
机械工业出版社,20XX年9月出版,76-186
[3]孙肖子,田根登等编著,现代电子线路和技术实验,北京:
高等教育出版社,
20XX年1月出版,54-114
[4]李亚伯等编著,数字电路与系统,北京:
电子工业出版社,20XX年6月出版130-150
[5]苏畅,基于单片机控制的LCD显示万年历制作,长江大学学报(自科版),20XX-08-05
附3:
组内分工:
程序主要负责人:
电路主要负责人:
主要负责人:
附4:
元器件清单表格
元件名称
描述
单价
数量
总计
杜邦线
2
1
2
单片机IC
插座
1.1
1
1.1
单片机
3.4
2
6.8
DS1302
0.75
2
1.5
DS1302
时钟模块
2
1
2
液晶屏
5.5
1
5.5
单片机自锁插座
1.5
1
1.5
单片机最小系统
3
1
3
纽扣电池
0.7
1
0.7
电池座
0.2
2
0.4
排针、排母、电阻、电容、晶振等小零件
9
按键
1
2
2
总计
35.5
注:
清单里是四个小组一起买的,上述表格是平均每个小组的花费
评语:
成绩: