单片机 数字万年历 课设.doc_第1页
单片机 数字万年历 课设.doc_第2页
单片机 数字万年历 课设.doc_第3页
单片机 数字万年历 课设.doc_第4页
单片机 数字万年历 课设.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

第1章 课程设计要求1.1设计任务通过对本题的设计,进一步熟悉单片机控制系统,并了解系统设计的一般规律。用P89V51RB2设计一个数字万年历,实现时间的显示功能。1.2 设计要求(1) 用DS1302或HT1380设计一个数字万年历。(2) 通过一个四位数码管显示年月日小时分钟的循环显示。(3) 可通过按键设置时间。(4) 写出详细的设计报告(含操作说明),给出全部电路和源程序。1.3 设计意义(1)在学习了单片机原理与应用和微型级数机控制技术实用教程课程后,为了加深对理论知识的理解,学习理论知识在实际中的运用,培养动手能力和解决实际问题的经验让学生接触专用时钟芯片DS1302,并会用DS1302芯片开发时钟模块,应用到其他系统中去。熟悉WAVE软件调试程序和仿真.(2)、通过实验提高对单片机的认识;(3)通过实验提高焊接、布局、电路检查能力;(4)、通过实验提高软件调试能力;(5) 进一步熟悉和掌握单片机的结构及工作原理。(6) 通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,了解表关电路参数的计算方法。(7)通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。(8) 通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程,为今后从事相应打下基础。第2章 课程设计原理2.1方案选择按照系统设计功能的要求,初步确定设计系统由主控模块、时钟模块、显示模块、键盘接口模块共4个模块组成,电路系统构成框图如图2.1所示。主控芯片使用51系列AT89c52单片机,时钟芯片使用美国DALLAs公司推出的一种高性能、低功耗、带RAM的实时时钟DSl302。采用DSl 302作为主要计时芯片,可以做到计时准确。更重要的是,DSl302可以在很小电流的后备电源(2555v电源,在25v时耗电小于300 nA)下继续计时,并可编程选择多种充电电流来对后备电源进行慢速充电,可以保证后备电源基本不耗电。 显示模块采用普通的共阳LED数码管,键输入采用查询法实现调整功能。89C52控制模块显示电路键扫描电路DS1302时钟电路 图2.1 电子万年历电路系统构成框图2.2 芯片工作原理2.2.1主控制器AT89C52ATMEL公司生产的AT89C52单片机采用高性能的静态80C51设计,由先进工艺制造,并带有非易失性F1ash程序存储器。它是一种高性能、低功耗的8位cMos微处理芯片,市场应用最多。主要性能特点有: 8KH F1ash ROM,可以擦除1000次以上,数据保存10年256字节内部RAM。电源控制模式 时钟可停止和恢复 空闲模式; 掉电模式。6个中断源。4个中断优先级。4个8位IO口。全双工增强型UART。3个16位定时计数器,To、T1(标准80c51)和增加的T2(捕获和比较)。全静态工作方式:0-24MH z。2.2.2 时钟电路DSl302(1)ds1302的性能特性 实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数; 用于高速数据暂存的318位RAM; 最少引脚的串行Io; 2555V电压工作范围; 25V时耗电小于300 nA; 用于时钟或RAM数据读写的单字节或多字节(脉冲方式)数据传送方式; 简单的3线接口; 可选的慢速充电(至Vcc1)的能力。 D51302时钟芯片包括实时时钟日历和3l字节的静态RAM。它经过一个简单的串行接口与微处理器通信。实时时钟 日历提供秒、分、时、日、周、月和年等信息。对于小于31天的月利月末的日期自动进行调整,还包括闰年校正的功能。时钟的运行可以采用24H或带AM(上午)PM(下午)的12H格式。采用三线接口与cPu进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。Dsl302有主电源后备电源双电源引脚:Vcc1在单电源与电他供电的系统中提供低电源,并提供低功率的电池备份;Vcc2在双电源系统中提供主电源,在这种运用方式中,Vcc1连接到备份电,以便在没有主电源的情况下能保存时间信息以及数据。Ds1302由Vcc1或vcc2中较大者供电。当vcc2大于Vcc1十o2v时,vcc2v给DSl302供电;当vcc2小于Vcc1时,DSl302由Vcc1供电。(2) DSl302数据操作原理 Dsl 302在任何数据传送时必须先初始化,把RsT脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在scLK的上升沿被输入。无论是读周期还是写周期,开始8位指定40个寄存器中哪个将被访问到。在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作时写人数据。时钟脉冲的个数在单字节方式下为8加8,在多字节方式下为8加字节数,最大可达248字节数。如果在传送过程中置RsT脚为低电平,则会终止本次数据传送,并且I()引脚变为高阻态。上电运行时,在 Vcc2.5 V之前 ,RsT脚必须保持低电平。只有在scLK为低电平时,才能将RsT置为高电平。D引302的引脚及内部结构图如图2.3所示,表2.1为各引脚的功能。 表2.1 DS102引脚功能 引脚号引脚名称功 能1VCC2主电源2,3X1,X2振荡源,外接32768KHZ晶振4GND地线5RST复位/片选线6I/O串行数据输入/输出端(双向)7SCLK串行数据输入端8VCC1后备电源图2.3 DS1302引脚及内部结构 Dsl302的控制字如图2.4所示。控制字节的最高有效位(位7)必须是逻辑1;如果它为0,则不能把数据写入到Dsl302中。位6如果为0,则表示存取日历时钟数据;为1表示存取RAM数据。位51(A4一A0)指示操作单元的地址。最低有效位(位0)如为0,表示要进行写操作;为1表示进行读操作。控制字节总是从最低位开始输入输出。 为了提高对32个地址的寻址能力(地址命令位15逻辑1),可以把时钟日历或RAM寄存器规定为多字节(burst)方式。位6规定时钟或RAM,而位0规定读或写。在时钟日历寄存器中的地址931或RAM寄存器中的地址31不能存储数据。在多字节方式中,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写所有31字节。小管是否写了全部31字节,所写的每一字节都将传送至RAM。图2.4 DS1302的控制字 图2.5 DS1302数据读/写时序 Dsl302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。其H历、时间寄存器及其控制字见表32,其中奇数为读操作,偶数为写操作。 时钟暂停:秒寄存器的位7定义位时钟暂停位。当它为1时,DS1302停止振荡,进入低功耗的备份方式.通常在对Dsl302进行写操作时(如进入时钟调整程序),停止振荡。当它为0时,时钟将开始启动。 AMPM1224小时方式:小时寄存器的位7定义为12或24小时方式选择位。它为高电平时,选择12小时方式。在此方式下,位5是AMPM位,此位是高电平时表示PM,低电平表示AM。在24小时方式下,位5为第二个10小时位(20一23h)。 表2.2 内部寄存器地址和内容 Dsl302的品振选用32768kH z,电容推荐值为6PF,因为振荡频率较低,也可以不接电容对计时精度影响不大。第三章 课程的总体设计3.1系统硬件电路的设计图3.1为电子万年历电路设计原理图,系统由主控制器AT89C52、时钟芯片DSl302、串口显示电路及键扫描电路组成。3.2 显示电路的设计 显示部分采用普通的共阳数码管显示,采用动态扫描,以减少硬件电路。3.3键盘接口的设计由于按键只有3个,用普通按钮接1kw上拉电阻,用查询法完成读键功能。3.4系统程序的设计因为使用了时钟芯片Dsl302,阳历程序只需从Dsl302各寄存器中读出年、周、月、日、小时、分、秒等数据,再处理即可。在首次对Dsl302进行操作之前,必须对它进行初始化,然后从Dsl302中读出数据,再经过处理后,送给显示缓冲单元。阳历程序流程图见图3.1所示。开始初始化13021302开始振荡从1302中读出时间读出数据都为BCD码,将其高低位分离,送显示缓冲单元图3.1 阳历程序流程图3.4 时间调整程序设计调整时间用2个调整按钮,1个作为移位、控制用,另外1个作为加和减用,分别定义为控制按钮、加按钮。在调整时间过程中,要调整的位与别的位应该有区别,所以增加了闪烁功能,即调整的位一直在闪烁,直到调整下一位。闪烁原理就是,让要调整的一位每隔一定时间熄灭一次,比如说50 m s。利用定时器计时,当达到50 ms溢出时,就送给该位熄灭符,在下一次溢出时。再送正常显示的值,不断交替,直到调整该位结束。此时送正常显示值给该位,再进人下一位调整闪烁程序。 第四章 调试总结及改进1)DS1302与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位MSB(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入),D0=1,指定读操作(输出)。在DS1302的时钟日历或RAM进行数据传送时,DS1302必须首先发送命令字节。若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM寄存器,在此方式下可一次性读、写所有的RAM的31个字节。 (2)在仿真头调试时候,我发现在LED显示板上能够正常显示数字,但是秒位不能记数,检查DS1302的连接(没有错,接触也良好),说明了这片DS1302不能记数,然后换掉DS1302后此时不但可以正常显示数字,而且可以正常记数,说明刚才那片是坏的。(3)(2M)晶振的调试,在调试晶振的时候发现,在没有给电路同电的时候,晶振两端输出波形是个不稳定的正弦波,而通电后也是个正弦波,但是中间一个引脚接地时候,波形比较稳定,接示波器时间长了,发现DS1302很发烫(时间很短内温度达到很高),但是不接示波器,时间长点也不会出现发烫现象。我认为是示波器引脚上的电和电路板上的电相通的原因。 附录一 元器件清单序号名称与规格数量序号名称与规格数量1电容30pF26时钟模块DS130212晶振32.768KHz17驱动器ULN280313电阻47088PNP44电阻50019发光二极管(红)15按钮开关410四位共阳数码管1附录二 源程序#include#include #define uchar unsigned char#define uint unsigned intuchar second,minute,hour,day,month,year,week;uchar time5;uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;uchar code wei=0xf7,0xfb,0xfd,0xfe;uchar a,b,temp;sbit s0=P00;sbit s1=P01;sbit s2=P02;sbit s3=P03;sbit led=P27;sbit SCLK=P34;sbit IO=P35;sbit RST=P36;bit setflag;uchar readdata(uchar addr) uchar i,j,k; RST=0; SCLK=0; RST=1; for(i=0x01,j=0;j8;j+) if(addr&i)IO=1;elseIO=0;SCLK=1;i=i1;SCLK=0; k=0; for(i=0;i=1;SCLK=0;if(IO)k|=0x80;SCLK=1; RST=0; /!保证ds1302完整的数据读取,直接这样写: REST=0; CLK=1;此处也可以正常显示 SCLK=0; _nop_(); SCLK=1; return(k); /*函数功能:ds1302数据写入*入口参数:8位地址,8位数据*返 回: 无*/ void writedata(uchar addr,uchar dat) uchar i,j; RST=0; SCLK=0; RST=1; for(i=0x01,j=0;j8;j+) if(addr&i)IO=1;elseIO=0;SCLK=1;i=i1;SCLK=0; for(i=0x01,j=0;j8;j+) if(dat&i)IO=1;elseIO=0;SCLK=0;SCLK=1;i=i1; RST=0; SCLK=1;/*函数功能:ds1302初始化*入口参数:无*返 回: 无*/ void Init1302()writedata(0x8e,0x00); /控制写入WP=0writedata(0x90,0x00);writedata(0x80,(0/10)4)|(0%10); /秒writedata(0x82,(14/10)4)|(14%10); /分writedata(0x84,(7/10)4)|(7%10); /时writedata(0x86,(7/10)4)|(7%10); /日writedata(0x88,(7/10)4)|(7%10); /月writedata(0x8a,(4/10)4)|(4%10); /星期writedata(0x8c,(10/10)4)*10+(time0&0x0f);minute=(time1&0x70)4)*10+(time1&0x0f);hour=(time2&0x30)4)*10+(time2&0x0f);day=(time3&0x30)4)*10+(time3&0x0f);month=(time4&0x10)4)*10+(time4&0x0f);year=(time6&0xf0)4)*10+(time6&0x0f);week=(time5&0x00)4)*10+(time5&0x0f);void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);display(a)switch(a)case 1: /显示时分P1=tableminute%10;P2=wei0;delay(1);P1=tableminute/10;P2=wei1;delay(1);P1=tablehour%10;P2=wei2;delay(1);P1=tablehour%10;P2=wei3;delay(1);break;case 2: /显示日月P1=tableday%10;P2=wei0;delay(1);P1=tableday/10;P2=wei1;delay(1);P1=tablemonth%10;P2=wei2;delay(1);P1=tablemonth%10;P2=wei3;delay(1);break;case 3: /显示年P1=tableyear%10;P2=wei0;delay(1);P1=tableyear/10;P2=wei1;delay(1);P1=table0;P2=wei2;delay(1);P1=table2;P2=wei3;delay(1);break;void buttonscan()if(!s0)delay(5);if(!s0)setflag=setflag;main()a=1;b=0;Init1302();while(1)donetime();display(a);buttonscan();while(setflag)led=0;temp=timeb;if(!s1)delay(5);if(!s1)b+;while(!s1)display(a);display(a);if(!s2)delay(5);if(!s2)if(b=5)b=0;timeb+;switch(b)case 0:a=3;break;case 1:case 2:a=2;break;case 3:case 4:a=1;break;while(!s2)display(a);display(a);buttonscan();i

温馨提示

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

评论

0/150

提交评论