51单片机电子万年历设计带有proteus仿真.docx
- 文档编号:2924041
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:21
- 大小:585.72KB
51单片机电子万年历设计带有proteus仿真.docx
《51单片机电子万年历设计带有proteus仿真.docx》由会员分享,可在线阅读,更多相关《51单片机电子万年历设计带有proteus仿真.docx(21页珍藏版)》请在冰点文库上搜索。
51单片机电子万年历设计带有proteus仿真
湖南文理学院课程设计
课程名称:
单片机课程设计
设计题目:
电子万年历
教学院部:
电气与信息工程学院
专业班级:
自动化09101班
指导教师:
张晓虎
(
学生姓名:
邵泽
学号:
0120
完成时间:
2012年6月12日
报告成绩:
评阅意见:
`
;
评阅教师日期
{
摘要:
电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。
它可以对年、月、日、周日、时、分和秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。
对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒等信息,还具有时间校准等功能。
该电路采用AT89C52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3到5V电压供电。
万年历的设计过程在硬件与软件方面进行同步设计。
硬件部分主要由AT89C52单片机,液晶显示电路,复位电路,时钟电路,稳压电路电路以及串口下载电路等组成。
在单片机的选择上使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。
显示器使用液晶LCD1602。
软件方面主要包括日历程序、液晶驱动程序,显示程序等。
程序采用汇编语言编写。
所有程序编写完成后,在KeilC51软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。
关键词时钟电钟,DS1302,液晶LCD1602,单片机
Abstract:
…
Electroniccalendarisaveryextensivedailytimingtoolformodernsocietyismoreandmorepopular.Itcanbetoyear,month,day,Sunday,when,minutes,andsecondsforthetime,alsohasaleapyearcompensationandotherfunctions,andtheDS1302longservicelifeandsmallerror.Fordigitalelectroniccalendarusingintuitivedigitaldisplay,canalsoshowsthatyear,month,day,Sunday,whentheinformationsuchas,minutesandseconds,stillhavetimecalibrationetc.Function.TheAT89C52singlechipmicrocomputerascircuitadoptscore,powerconsumptionissmall,canbein3Voflow-pressurework,voltagecanchoose3to5Vvoltagepowersupply.
Thedesignprocessofthecalendarinthehardwareandsoftwaredesignofsynchronization.MainlybyAT89C52singlechipmicrocomputerhardwarepart,liquidcrystaldisplaycircuit,resetcircuit,clockingcircuitonthecircuitcircuitandserialdownloadcircuitetc.TheprocessoronthechoiceofthesinglechipmicrocomputerAT89C52use,thesinglechipmicrocomputersuitableformanymorecomplexcontrolapplications.UseofliquidcrystaldisplayLCD1602.Softwareismainlyincludingcalendarprogram,liquidcrystaldriver,showprogram,etc.Programusingassemblylanguage.Allprogramming,afterthecompletionofKeilC51softwareincommissioning,makesureno,afterProteussoftwareembeddedinwithinthesinglechipmicrocomputersimulation.
KeywordsDianZhongclock,DS1302,liquidcrystalLCD1602,microcontroller
1设计要求与方案论证3
设计要求3
系统基本方案选择和论证3
单片机芯片的选择方案和论证3
"
时钟芯片的选择方案和论证:
4
电路设计最终方案决定5
2系统的硬件设计与实现5
电路设计框图5
系统硬件概述5
主要单元电路的设计5
单片机主控制模块的设计6
时钟电路模块的设计6
}
显示模块电路7
串口下载电路8
复位电路9
稳压电路10
3系统的软件设计11
程序流程框图11
子程序的设计11
读写DS1302子程序11
】
读写LCD1602子程序12
4软件测试及分析14
分析与结论14
调试分析14
调试和结论15
5总结15
1设计要求与方案论证
设计要求
—
①能够显示年、月、日、时、分。
②可以人为校正年、月、日、时、分。
③地一次开机显示:
20000101。
④掉电信息不丢失。
系统基本方案选择和论证
系统方案包括单片机的选型、时钟芯片的选择和显示模块的确定等。
单片机芯片的选择方案和论证
方案一:
采用89C51芯片作为硬件核心,采用FlashROM,内部具有4KBROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。
(
方案二:
采用AT89C52,片内ROM全都采用FlashROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KBROM存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。
所以选择采用AT89C52作为主控制系统控制整个系统的正常工作。
显示模块选择方案和论证
方案一:
采用数码管显示,数码管是由八个发光二极管组成,对于显示数字字符比较适合,但对于电子万年历需要的数码管位数多,编程麻烦,且不稳定,存在抖动现象,需要通过软件延时进行消抖。
方案二:
采用LCD1602液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,易于编程,稳定可靠。
通过对比,本课程设计采用LCD1602作为显示模块。
?
时钟芯片的选择方案和论证:
方案一:
直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、时、分计数。
采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。
所以不采用此方案。
方案二:
采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对分、时、日、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM作为数据暂存区,工作电压~范围内,时耗电小于300nA。
同时在外加电源和外加晶振电路下,掉电后走时准确。
本课程设计采用DS1302作为时钟的芯片。
电路设计最终方案决定
综上各方案所述,对此次设计的方案选定:
采用AT89C52作为主控制系统;DS1302提供时钟;LCD1602作为显示。
2系统的硬件设计与实现
电路设计框图
…
系统硬件概述
本电路是由AT89C52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、时、分和秒进行计时,具有闰年补偿功能,工作电压为~。
采用三线接口(SPI总线)与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。
可产生年、月、日、时、分,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;显示部分由LCD1602显示,精度高,显示稳定。
主要单元电路的设计
单元电路的设计包括主控制系统、时钟电路模块、显示模块、串口下载模块、复位电路和稳压电路的设计。
单片机主控制模块的设计
AT89C52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。
单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和30PF电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和30PF电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端.如图2-1所示
]
图2-1主控制系统
时钟电路模块的设计
图2-2示出DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
X1和X2是振荡源,外接32.7、68KHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
I/O为串行数据输入端(双向)。
SCLK始终是输入端。
如图2-2所示。
图2-2DS1302的引脚图
*
显示模块电路
如图2-3所示,采用液晶1602数据端由P0提供实现8位并行通信,其数据交换的速率比较快VL是调整液晶显示的亮度,E是使能端口,RW是读写控制端口,高电平读信号,低电平写信号;RS是读写命令与数据控制端口,高电平写数据,低电平写命令。
图2-3LCD1062的电路图
串口下载电路
经过KEILC51编译的汇编程序必须下载到单片机内部运行,才能实现所需要的功能。
然而单片机得1、0是用5V、和0V表示的,而电脑中的1、0用的电压并不是5V、和0V,因此,必须用MAX232进行电压转化,于是设计的串口下载电路。
如图2-4所示。
}
图2-4串口下载电路
复位电路
在单片机中运行程序时,如果程序跑飞,即程序运行的地址出现混乱时,可以用复位电路,在低电平时程序从零地址从新开始运行。
同时也可以使用看门狗,定时的喂狗,使程序每次从零地址开始运行。
防止程序跑飞。
如图2-5所示。
图2-5复位电路
稳压电路
当输入的电压高于或者低于51v时,可以用L7805CV稳压到5V,保证单片机稳定的性能和可靠的稳定性,其中的二极管是利用了单片机的单向导电性,导致单片机被烧毁或者系统不能正常工作。
如图2-6所示。
.
图2-6稳压电路
3系统的软件设计
程序流程框图
】
4软件proteus测试及分析
】
通过调节四个按键设定时间为2000年1月1日12点整。
软件测试
电子万年历是多功能的数字显示仪器。
由于功能很多,所以对于它的程序也较为复杂,因此本次设计采用简化模型,即只显示年月日,时分秒。
但在程序调试时出现了相对较多的错误。
最后经过多次的模块子程序的修改,一步一步的完成,最终解决了软件。
在软件的调试过程中主要遇到的问题如下:
分析与结论
调试分析
(1)显示的数据秒并没有变化,原因是没有启动定时器,我有不断的读取DS1302时钟芯片寄存器中的数据,并显示才能实现所需要的功能,实时显示年、月、日、星期、分钟、小时、秒等基本功能来满足系统的需求。
(2)调整时间后应该先去掉写保护,如果存在写保护,那么在初始化写入初始时间时,是写不进去初始化的时间的。
因而会看见显示的时间并不随着设置的初始化的值变化而变化,甚至我们看见的时间并不按着一秒一秒的增加。
@
(3)液晶显示的时候,由于采用的并行总线,显然传输速度快,但是数据端口必须接1K的排阻,以实现驱动,实践证明,没有排阻的时候,液晶显示就会不稳定,甚至出现乱码。
因此,排阻的作用很大。
写程序时要严格按照时序就行,否则,也不会显示。
调试和结论
经过多次反复修改程序,对电路各模块的原理及功能更加熟悉,同时提高了设计能力与及对电路的分析能力.同时在软件的编程方面得到更到的提高,对所学的知识得到很大的提高与巩固.
5总结
通过这次制作使我了解了整个万年历的工作过程和各个部分的工作原理。
使我认识到利用单片机设计的万年历便于操作。
经过认真的仿真观察,本次设计的万年历能够正确的显示年、月、日等,总体来说算是比较成功的。
本次单片机课程设计是使用Protues设计工具、协同使用Keil编程软件制作的。
这也使我又掌握了一门非常实用的软件,对于我以后的毕业设计算是又多了一个非常好的选择。
在看同学编写程序的过程中我自己也学到了很多的东西,对于一些Protues程序的不同用法和功能能够比较顺畅的读程序和简单的应用。
6参考文献
$
1刘勇编数字电路电子工业出版社2004
2陈正振编电子电路设计与制作广西交通职业技术学院信息工程系2007
3杨子文编单片机原理及应用西安电子科技大学出版社2006
4王法能编单片机原理及应用科学出版社2004
附录一:
系统电路图
]
附录二:
系统程序清单
#include<>
#include<>
#include<>
#defineuintunsignedint
#defineucharunsignedchar
sbitIO=P1^0;.,六,为了与DS1302的星期格式匹配,返回值需要加1
DateTime[5]=(w+d)%7+1;
}
//*****年月日时分++/--********//
voidDateTime_Adjust(charx)
{switch(Adjust_Index)
{
case6:
//年00-99
if(x==1&&DateTime[6]<99)DateTime[6]++;
if(x==-1&&DateTime[6]>0)DateTime[6]--;
//获取2月天数
MonthsDays[2]=isLeapYear(2000+DateTime[6])29:
28;
//如果年份变化后当前月份的天数大于上限则设为上限
if(DateTime[3]>MonthsDays[DateTime[4]])
{DateTime[3]=MonthsDays[DateTime[4]];}
RefreshWeekDay();//刷新星期
break;
case4:
//月01-12
if(x==1&&DateTime[4]<12)DateTime[4]++;
if(x==-1&&DateTime[4]>1)DateTime[4]--;
MonthsDays[2]=isLeapYear(2000+DateTime[6])29:
28;
if(DateTime[3]>MonthsDays[DateTime[4]])
{DateTime[3]=MonthsDays[DateTime[4]];}
RefreshWeekDay();
break;
case3:
//日00-28、29、30、31,调节之前首先根据年份得出该年中断二月天数
MonthsDays[2]=isLeapYear(2000+DateTime[6])29:
28;
//根据当前月份决定调节日期的上限
if(x==1&&DateTime[3] if(x==-1&&DateTime[3]>0)DateTime[3]--; RefreshWeekDay(); break; case2: //时 if(x==1&&DateTime[2]<23)DateTime[2]++; if(x==-1&&DateTime[2]>0)DateTime[2]--; break; case1: //分 if(x==1&&DateTime[1]<59)DateTime[1]++; if(x==-1&&DateTime[1]>0)DateTime[1]--; break; } } //---定时器0每秒刷新LCD显示----// voidT0_INT()interrupt1 { TH0=-50000/256; TL0=-50000%256; if(++tCount! =2)return; tCount=0; //按指定格式生成待显示的日期时间串 Format_DateTime(DateTime[6],LCD_DSY_BUFFER1+5); Format_DateTime(DateTime[4],LCD_DSY_BUFFER1+8); Format_DateTime(DateTime[3],LCD_DSY_BUFFER1+11); //星期 strcpy(LCD_DSY_BUFFER1+13,WEEK[DateTime[5]-1]); //时分秒 Format_DateTime(DateTime[2],LCD_DSY_BUFFER2+5); Format_DateTime(DateTime[1],LCD_DSY_BUFFER2+8); Format_DateTime(DateTime[0],LCD_DSY_BUFFER2+11); //显示年月日,星期,时分秒 Display_LCD_String(0x00,LCD_DSY_BUFFER1); Display_LCD_String(0x40,LCD_DSY_BUFFER2); } //----------键盘中断(INT0)-------------// voidEX_INT0()interrupt0 { if(K1==0)//选择调整对象(YMDHM) { DelayMS(10); if(K1==0){ //while(K1==0); if(Adjust_Index==-1||Adjust_Index==1) { Adjust_Index=7; } Adjust_Index--; if(Adjust_Index==5)Adjust_Index=4; LCD_DSY_BUFFER2[13]='['; LCD_DSY_BUFFER2[14]=Change_Flag[Adjust_Index];//显示调节对象 LCD_DSY_BUFFER2[15]=']'; } } elseif(K2==0)//加 {//while(K2==0); DelayMS(10); if(K2==0) DateTime_Adjust (1); } elseif(K3==0)//减 { DelayMS(10);//while(K3==0); if(K3==0) DateTime_Adjust(-1); } elseif(K4==0)//确定 { //while(K4==0); DelayMS(10); if(K4==0){ SET_DS1302();//将调整后的时间写入DS1302 LCD_DSY_BUFFER2[13]=''; LCD_DSY_BUFFER2[14]=''; LCD_DSY_BUFFER2[15]=''; Adjust_Index=-1; } } } voidmain() {Init_LCD();//液晶初始化 IE=0x83;//允许INT0,T0中断,EA=1,,ET0=1,EX0=1 IP=0x01;//设置外部中断0为高级中断 IT0=0x01;//外部中断0为电平触发,低电平有效 TMOD=0x01;//设置定时器T0工作方式为方式1, TH0=-50000/256;//装入初始值,定时1秒 TL0=-50000%256; TR0=1;//启动定时器 while (1) { //如果未执行调整操作则正常读取当前时间 if(Adjust_Index==-1)GetTime(); } } 、
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 电子 万年历 设计 带有 proteus 仿真