(毕业论文)Proteus课程设计-电子万年历_第1页
(毕业论文)Proteus课程设计-电子万年历_第2页
(毕业论文)Proteus课程设计-电子万年历_第3页
(毕业论文)Proteus课程设计-电子万年历_第4页
(毕业论文)Proteus课程设计-电子万年历_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程论文 电气信息工程学院制2013年11月目录 3 31.3方案论证1.3.1方案论述 31.3.2方案比较 41.3.3时钟模块 51.3.4语音报时模块 5 5 51.6单元电路设计1.6.1主控制系统 61.6.2时钟震荡电路 71.6.3复位电路 81.6.4DS1302时钟电路 81.6.5按键电路 1.6.6显示电路 1.7流程图与软件设计1.7.1程序流程图 1.7.2软件设计 1.7.3软件调试 电子万年历该电子时钟主要采用AT89C51单片机作为主控核心,由DS1302时钟芯片提供时钟、LED动态扫描显示屏显示AT89C51单片机是由Atmel公司推出的,功耗小,电压可选用4~6V电压供电;DS1302时钟芯片是美国DALLAS公司推出的具有涓细电流充电功能的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小;数字显示是采用的LED显示屏来显示,可以同时显示年、月、日、星期、时、分、秒等信息。此外,该电子时钟还具有时间校准本文提出了一种基于AT89C51单片机的时钟设计方案,本方案以AT89C51单片机作为主控核心,与时钟芯片DS1302、按键、LED显示等模块组成硬件系统。在硬件系统中设有独立按键和LED显示器,能显示丰富的信息,根据使用者的需要可以随时对时间进行校准、选择时间等,综上所述此电子时钟具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。1.2功能要求1、显示年月日时分秒及星期信息2、具有可调整日期和时间功能3、增加闰年计算功能4、实现语音报时1.3方案论证随着国内超大规模集成电路的出现,微处理器及其外围芯片有了迅速的发展。集成技术的最新发展之一是将CPU和外围芯片,如程序存储器、数据存储器、并行I/O口、串行I/O口、定时/计数器、中断控制器及其他控制部件集成在一个芯片之中,制成单片计算机 (Single-ChipMicrocomputer)。而近年来推出的一些高档单片机还包括有许多特殊功能单控制输出单元、PWM输出时的死区可编程控制功能等。因此,只要外加一些扩展电路及必要的通道接口就可以构成各种计算机应用系统,如工业流水线控制系统、作为家用电器的主控制器、分布式控制系统的终端节点或作为其主控制节点起中继的作用、数据采集系统、自动测试系统等。单片机的出现,并在各技术领域中得到如此迅猛的发展,与单片机构成计算机应用系统所形成的下述特点有关:1、单片机构成的应用系统有较大的可靠性。这些可靠性的获得除了依靠单片机芯片本身的高可靠性以及应用有最少的联接外,还可以方便地采用软、硬件技术。2、系统扩展、系统配置较典型、规范,容易构成各种规模的应用系统,应用系统有3、由于构成的应用系统是一个计算机系统,相当多的测、控功能由软件实现,故具有柔性特征,不须改变硬件系统就能适当地改变系统功能。4、有优异的性能、价格比。一:控制MCU方案一:STM8,STM公司推出的新款MCU,性能高,外设资源丰富,其功耗非常小,价格便宜,性价比非常高。缺点是只能用官方开发的缺点是价格比较高。方案三:STC89C52,宏晶公司的51系列单片机,价格便宜,在国内使用者非常多。支持串口下载,使用非常方便,且具有很大的价格优势。缺点是仅支持串口下载,不支持在线下载,使用中会有些不方便。由于本设计对控制芯片的要求不高,因此选用方案三。1.3.3时钟模块方案一:用单片机的定时器产生1S的时基信号,然后用程序来实现时钟的时、分、秒计时,同时用程序来产生年、月、日。该方案优点是减少使用外设芯片;缺点是用单片机模拟时钟,使编程量增大,且用定时器产生时基信号,精度不高。方案二:使用时钟芯片DS12C887。优点是8位数据线并行控制,控制简单;自带有锂电池,外部掉电时,其内部时间信息还能够保持10年之久。缺点是并行控制,占用太多的IO口,且价格很高,不适合一般的电子制作。方案三:使用时钟芯片DS1302。优点是同步串行通信,仅使用3个IO口,占用最少的单片机资源;其内部功能强大。更重要的是其价格便宜,具有非常高的性价比。缺点是串行通信,控制比较复杂。综上,本设计选择方案三。方案二:使用专用OTP时钟语音芯片NY3PO35AP8。OTP时钟语音芯片专门为时钟语音电路设计,内置32段语音数据,包括了各种时钟报时语音,且内置功放。更主要的是价格低,单信号线控制,使用方便。综上,本设计选择方案二。1.4逻辑总框图该电子万年历的总体设计框图如图(1)所示。AT89C52AT89C52444时钟电路图(1)电子万年历总体设计框图1.5设计所需的元件:元件名称型号数量/个单片机AT89C51时钟芯片DS13021晶振12MHz晶振32.768kHz1电容30pF2电容22uF1按键开关4滑动变阻器1K1LCDLCD1602电源Vcc+5导线若干1.6单元电路设计:1.6.1主控制系统单片机中央处理系统的方案设计,选用AT89C51单片机作为中央处理器,如图(2)所示。该单片机除了拥有MCS-51系列单片机的所有优点外,内部还具有8K的在系统可编程序存储器、数据存储器等硬件,其硬件能符合整个控制系统的要求,不需要外接其他存储器芯片和定时器件,方便地构成一个最小系统。整个系统结构紧凑,抗干扰能力强,性912345678XTAL1XTAL2ALEP1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51KTEXT×P0.4/AD4P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.1/TXD P3.5/T11.6.2时钟振荡电路时钟振荡电路图(3)所示,时钟振荡电路用于产生单片机正常工作时所需要的时钟信号,电路由两个30pF的瓷片电容和一个12MHz的晶振组成,并接入到单片机的XTAL1和XTAL2引脚处,使单片机工作于内部振荡模式。此电路在加电后延迟大约10ms振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率决定。电路中两个电容C1、C2的作用使电路快速起振,提高电路的运行速度。图(4)复位电路1.6.3复位电路复位电路由电阻和极性电容组成,如图(4)所示,通过高电平使单片机复位,在时钟电路开始工作后,当高电平的时间超过大约2us时,即可实现复位。此复位电路为上电复位,较为简单。若改进可以添加手动复位的功能,上电复位发生在开机加电时,由系统自动完成,手动复位通过一个按键来实现,在程序运行时,若遇到死机,死循环或程序“跑飞”等情况,通过手动复位就可以实现重新启动的操作。手动按钮复位需要人为在复位输采用3线串行接口,占用引脚少,内部集成了可编程日历时钟,用户可以根据需要通过单片机的控制来自行设置,支持双电源供电,可以使用外部主电源和备用电源,备份电源能VCC1X135768图(5)DS1302管脚图UZUZX24P1.3P1.46P1.52P1.6P1.7DS1302AT89CEVCC2X1VCC1P1.0P1.1P1.2CRYSTAL67512318385图(6)DS1302时钟电路DS1302各引脚的功能为:1:Vcc2:5V电源。当Vcc2>Vccl+0.2V时,由Vcc2向DS1302供电,当Vcc2<Vccl时,由Vccl向DS1302供电;DS1302有关日历、时间的寄存器:写寄存器范围10秒秒10秒分0时时AM/PM0010日日000月月00000周日10年年0000000----1、秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。当初始上电时该位置为1,时钟振荡器停止,DS1302处于低功耗状态;只有将秒寄器的该位置改写为0时,时钟才能开始运行。2、小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是,当为1时,表示PM。在24小时模式时,位5是第二个10小时位3、控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。在对任何的时钟和RAM的写操作之前,WP位必须为0。当WP位为1时,写保护位防止对任一寄存器的写操作。也就是说在电路上电的初始态WP是1,这时是不能改写上面任何一个时间寄存器的,只有首先将WP改写为0,才能进行其它寄存器的写操作。DS1302读写时序DS1302是SPI总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存1A4A3A2A1A0WR控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302位6:如果为0,则表示存取日历时钟数据,为1表示存取位5至位1(A4~A0):指示操作单元的地址;位0(最低有效位):如为0,表示要进行写操作,为1表示进行读操作。读数据时在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据是从最低位到最高位。数据被写入DS1302,数据输入也是从最低位(0位)开始。按键电路由四个轻触开关组成,如图(9)所示。按键用来调整时间,其一这四个按键有一个按下就会在P3.2检测到一低电平就触发外部中断0进入按键调节程序中,通过与个各键相连的端口P3.4_P3AND_41.6.6显示电路1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一令,7至14脚为LCD1602的数据口,将数传送到LCD1602中。图(10)LCD1602显示电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功有80字节显示数据存储器内建有160个5X7点阵的字型的字符发生器CGROM,8个可由用户自定义的5X7的字符状态字;指令码;输出:无。LCD1602的各种指令不再一一说明。主程序首先初始化定时器、LCD1602及DS1302,然后就开始查询按键,有键按下则开始调整时间和日期,若没有按下,则执行下面的时间、日期的显示,最后依次循环这些相同的操作,相应流程图如图(11)所示:LCD1602,显示初始时间否按下是否图(12)程序流程图间及日期,同时在第一行最右端显示被选择的对象,第一次按下K1时,设置年份,若按下K3,则是减1操作,按下K2是加1操作,设置好年后,第二次按下K1时,则是设置月设置好按下即可保存设置了。软件总设计:主程序首先对系统环境初始化,设置定时器TO工作模式为16位定时/初始化。接着扫描键盘,在键盘程序里面是对时间、日期及闹钟的调整,块化设计的特点,所以本系统的软件采用C51编写。具体程序见附件一:程序T016LDATETIME三出曾始POO10*D1POPOPOPOPOPOPOTALZ4AD508引A708D7A82A10.708P³XD2mP33TTT就任所育貌(年月叶分x日P1.1P1ZP13P1,4P15P5PS春是09=N258g8T016LDATETIME三出曾始POO10*D1POPOPOPOPOPOPOTALZ4AD508引A708D7A82A10.708P³XD2mP33TTT就任所育貌(年月叶分x日P1.1P1ZP13P1,4P15P5PS春是09=N258g8在软件调试过程中,当调节时间和日期后,单片机上电后更新的是PC的时间,后来查找资料发现,是设置ds1302的问题,对于开发板上的液晶一般RW都接的地,故不需要读液晶状态,也不需要读忙,但在仿真中还是加上了这一部分。还有一个问题,在按键操作时有时会出现功能不稳定,这是由于按键存在抖动,所以后来加个去抖动的延时后在判断,基本就可以解决问题,电子万年历硬件电路图及仿真如图(13)所示,系统由AT89C52单片机,按键扫描电路、显示电路、时钟电路、晶振电路、复位电路及电源指示电路。仿真正确显示了时间,在LCD1602中正确显示了当前日期、时间,通过按按键K1,就可以开始设置时间,依次按K1依次在年、月、日、时、分之间切换,,按K2键用于加1操作,K3键用于减1操作,K4是确定按钮。仿真正确显示了时间和日期,符合设计的要求。LC图(13)电子万年历硬件电路图该设计涉及到了单片机的时序控制,数据接口包括并行数据接口以及串行通信接口,同时用到了控制按键、环境信息检测、数据显示处理等。这次设计,基本上涉及到了所有的单片机控制功能模块。因此,通过这次设计,能完全掌握单片机的所有基本控制,这也是我们组选择该题目的一个重要原因。在这学期的课程序设计中,收获知识的同时,还收获了阅历,收获了成熟,通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手制作的能力,在各种其它能力上也都有了提高。更重要的是,在课程序设计里,我们学会了很多学习的方法,知道了理论和实践的巨大差别。而这是以后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。同时在与老师和同学的交流过程中,互动学习,将知识融会贯通。通过自己的努力,做出了一个万年历,对以后的学习是一个莫大的鼓舞,激起了我的学习兴趣和开发创新思维。[1]张毅坤陈善久,单片微型计算机原理及应用西安电子科技大学出版社[2]张毅刚,彭喜元,单片机原理与应用设计电子工业出版社[3]赵建领薛园园,零基础学单片机C语言程序设计机械工业出版社[4]周向红51单片机课程设计华中科技大学出版社,[5]郭天祥51单片机C[6]赵亮侯国锐.单片机C语言编程与实例人民邮电出版社[7]陈忠平,基于proteus的51单片机设计与仿真电子工业出版社#include<string.h>#defineuintunsignedint//DS1302数据线//DS130时钟线//DS1302复位线//LCD数据/命令选择端//LCD读/写控制//选择//减sbitK4=P3^7;//确定uchartCount=0;ucharMonthsDays[]={0,31,0,31,30,31,30,31,31,30,31,30,31};uchar*WEEK[]={"SUN","MON","TUS","WEN","THU","FRI","SAT"};ucharLCD_DSY_BUFFER1[]={”DATE00-00-00”};//显示格式ucharLCD_DSY_BUFFER2[]={"TIME00:00:00"};ucharDateTime[7];//所读取的日期时间charAdjust_Index=-1;//当前调节的时间对象:,,分,是,日,月,年ucharChange_Flag[]=”-MHDM-Y";//(分,时,日,月,年)(不调节秒与/*---------延时程序------------------*/voidDelayMS(uintms)while(ms--){for(i=0;i<120;i++);//-----------向DS1302写入一字节------------------//voidWrite_A_Byte_TO_DS1302(ucharx)IO=x&0x01;//每一位与1与存入I0中SCLK=1;SCLK=0;//一个高脉冲将数据送入液晶控制器x>>=1;//右移}//-----------从DS1302读取一字节------------------//b|=_crol_((uchar)IO,i);}//-----------从DS1302指定位置读数据------------------//ucharRead_Data(ucharad{RST=0;SCLK=0;RST=1;Write_A_Byte_TO_DS1302(addr);//先写入地址dat=Get_A_Byte_FROM_DS1302();SCLK=1;RST=0;//---------向DS1302某地址写入数据--------------------//voidWrite_DS1302(ucharaddr,uchardat)Write_A_Byte_TO_DS1302(addr);SCLK=0;RST=0;//高脉冲写入数据//--------------设置时间----------------////写控制字,取消写保护Write_DS1302(0x8E,0x00);//分时日月年依次写入{//分的起始地址10000010(0x82),后面依次是时,日,月,周,年,写入地址每次递增2Write_DS1302(0x80+2*i,(DateTime[i]/10<<4)|(DateTime[i]%10));}Write_DS1302(0x8E,Ox80);//加保护}//----------读取当前日期时间------------//for(i=0;i<7;i++){DateTime[i]=Read_Data(0X81+2*i);}//-----------读LCD状态-ucharRead_LCD_State()DelayMS(1);EN=0;DelayMS(1);returnstate;//-----------忙等待--/voidLCD_Busy_Wait()while((Read_LCD_State()&0x80)==0x80);DelayMS(5);//-----------向LCD写数据-voidWrite_LCD_Data(uchardat)LCD_Busy_Wait();PO=dat;EN=1;DelayMS(1);EN=0;//-------------写LCD指令-------------------//voidWrite_LCD_Command(ucharcmd){PO=cmd;EN=1;DelayMS(1);EN=0;//-------------LCD初始化-------------------//Write_LCD_Command(0x38);//设置16*2显示,5*7点阵,8位数据接口DelayMS(1);DelayMS(1);DelayMS(1);DelayMS(1);}//----------Write_LCDCommand(p|0x80);//相当于在0x80基础上加入位置量}//----在LCD上显示字符串---------//Write_LCD_Data(s[i]);//在固定位置显示时间日期DelayMS(1);//---------日期与时间值转换为数字字符----////判断是否为闰年ucharisLeapYear(uinty)//求自2000.1.1开始的任何一天是星期几//函数没有通过,求出总天数后再求星期几//因为求总天数可能会超出uint的范围voidRefreshWeekDay(){uinti,d,w=5;//已知1999.12.31是周五for(i=2000;i<2000+DateTime[6];i++)d=isLeapYear(i)?366:365;for(i=1;i<DateTime[4];//保存星期,0~6表示星期日,星期一,二,...,六,为了与DS1302的星期格式匹配,返回值需要加1DateTime[5]=(w+d)%7+1;//*****年月日时分++/--********//voidDateTime_Adjust(charx){case6://年00-99if(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]])break;case4://月01-12if(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]=MonthsDaysRefreshWeekDay();break;case3://日00-28、29、30、31,调节之前首先根据年份得出该年中断二月天数MonthsDays[2]=isLeapYear(2000+DateTime[6])?29:28;//根据当前月份决定调节日期的上限if(x==1&&DateTime[3]<MonthsDays[DateTime[4]])DateTime[3]++;if(x==-1&&D

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论