ImageVerifierCode 换一换
格式:DOCX , 页数:37 ,大小:1.09MB ,
资源ID:17621426      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17621426.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实时时钟的设计Word下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实时时钟的设计Word下载.docx

1、2.总体方案2.1模块方案选择:2.1.1单片机模块方案一:使用AT89C51单片机模块。AT89C51是一种带4K字节FLASH存储器(FPEROMFlash Programmable and Erasable Read Only Memory)以及128 BYTES随机数据存储器的低电压、高性能CMOS 8位微处理器。内置功能强大微型计算机的AT89C51提供了高性价比的解决方案。方案二:使用MSP430单片机模块。MSP430系列单片机是美国德州仪器1996年开始推向市场的一种16位超低功耗、具有精简指令集(RISC)的混合信号处理器(Mixed Signal Processor)。其具

2、有 处理能力强、运算速度快、超低功耗、片内资源丰富等特点,因而在许多单片机领域都得到广泛应用。AT89C51相对于MSP430虽然存储容量小,功能较为逊色。但是出于我对AT89C51单片机较为熟悉,而且AT89C51足以满足此次设计任务,因此我选择AT89C51模块。 2.1.2时钟模块基本门电路搭建。用基本门电路来实现时钟发生器,电路结构复杂,故障西数大,不易测试专用时钟芯片。目前市场上有许多实时时钟芯片。如DS1302、DS12887、DS1307、X1227等,芯片内都集成了时钟/日历功能,给时钟系统设计带来了很多方便。DS1302在功耗方面表现非常出色(2.5V5.5V电源,在2.5V

3、时耗电量小于300Na),且性能稳定,购买方便,因此在时钟模块我决定采用DS1302作为实时时钟芯片。2.1.3键盘模块 根据设计要求,本次用电脑键盘设定时钟对时钟进行调整。 2.1.4 显示模块采用液晶显示器。液晶相对于传统的显示器相比,最大的优点在于耗电量和体积,一般的液晶显示器的分辨率可达到720dpi以上。而且,当要显示的信息量较多时, LCD液晶显示器的优点就会凸显出来。而且,LCD界面显示相对友好。采用数码管显示电路。LED数码管能在低电压,小电流条件下驱动发光管发光,能与CMOS、ITL电路兼容。具有发光响应时间极短,高频特性好、单色性好,亮度高等优点。由于此次设计显示信息量较多

4、,而且为了追求更加友好的界面,决定采用LCD液晶显示器。 2.2 方案设计综上,基于界面最友好的原则,此次设计采用51系列的AT89C51作为主控芯片,DS1302作为实时时钟芯片,时钟调整由电脑键盘输入,由LCD液晶显示屏显示时钟信息,系统总体框图如下: 图2.1 系统结构图 各组成部分功能、特色如下:1DS1302为系统提供精准的秒、分、时、日、月、周、年等信息,单片机能够对其进行写入和读出,计时准确,使用方便。2LCD点阵显示屏用来显示时间信息。3需要改写的时间信息有电脑键盘输入,改写格式为: Year-Week-Month-Day-Hour-Minute-Second 每一部分均由两位

5、数构成,如“周五” 应输入“05”,7个部分输入完按回车键确定。4MCU控制整个系统的运行:对DS1302进行读来获取时间、将电脑键盘输入的信息写入DS1302内以改写时间、将从DS1302获取的时间信息显示在LCD液晶显示器上。3.硬件设计3.1关键器件简介3.1.1 AT89C51简介AT89C51 提供以下标准功能:4k字节Flash闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但

6、允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。实物图及引脚排列如下:图3.1 AT89C51实物图图3.2 AT89C51引脚图3.1.2 DS1302实时时钟芯片简介 DS1302时钟内含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与单片机进行通信,实时时钟/日历电路提供年、月、日、星期、时、分、秒的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM只是决定采用24或12小时格式。DS1302与单片机之间能简单的采用同步串行的方式进行通信,仅需用到三个口线:(1)RE

7、S(复位、也称为使能位)(2)I/O(3)SCLK(串行时钟),时钟RAM的读写数据以一个或多达31个字节的字符组方式通信。RST输入时复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入由两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc超过2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端,SCLK始终是输入端。实物及引脚排列如下:图3.3 DS1302实

8、物图 图3.4 DS1302引脚图3.1.3 LCD1602 液晶显示器简介1602液晶是一种工业字符型液晶,能够同时显示1602即32个字符(16列2行)。它是一种专门用来显示字母、数字、符号等的点阵型液晶模块,它有若干个57或者511等点阵字符位组成,每个点阵字符位都可以显示一个字符。1602正常工作状态下接+5V电压,且其对比度可调;内部含有复位电路;提供各种控制功能命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能;内含80字节显示数据存储器DDRAM;内建有192个57点阵的字型的字符发生器CGROM;8个可由用户自定义的57的字符发生器CGRAM;有微功耗、体积小、显示内容丰富

9、、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。实物图和引脚图如下: 图3.5 LCD1602 实物图图3.6 LCD1602 引脚图3.2 系统电路原理仿真图 图3.7 系统电路原理仿真图3.3 器件主要参数介绍3.3.1 DS1302模块1查询手册,知DS1302 引脚2/3之间的晶振为32.768KHZ。2可以设定规定载荷电容为6pF。3DS1302工作电压为2.05.5V,VCC2为主电源、VCC1为备用电源。当主电源关闭时,也能保持时钟的连续运行。由于DS1302兼容TTL电路,故我们均采用5V供电。足以提供大于最小驱动电流(320纳安,2.0V时)的电流。3.3.2 LCD1602

10、模块1查询手册,知1602芯片工作电压在4.55.5V。模块最佳工作电压在5.0V,故我们采用5V电压给LCD1602供电,此时的工作电流为2.0mA,足以驱动1602工作。2显示容量:162个字符3字符尺寸:2.954.35mm412号引脚为液晶显示偏压信号,通过改变此引脚上电压,可以改变1602的显示对比度。51602数据引脚接在最小系统的P0口,由于P0口是准双向口(不存在高阻抗状态),需要在片外接上拉电阻。3.3.3 键盘输入模块1Proteus仿真环境下采用虚拟终端作为串口通信的通道,传输波特率设置为9600bit/s。2实际运行过程中,用串口调试助手软件对DS1302实现写的操作,

11、同样波特率设置为9600bit/s。3.3.4 最小系统模块:1整个系统采用5V供电。2AT89C51静态工作频率为024MHZ,为了满足串口传输数据,我们采用11.0592MHZ的晶振为系统提供振荡频率。3振荡电路电容容量规定在2040pF之间,我们采用典型值30pF。4复位电路实现复位时通过在RST引脚上施加2个机器周期的高电平,即可实现复位。为了使电容的充电、放电时间满足要求,我们取C的容量为10F。4.软件设计4.1 流程图4.1.1 系统设计总流程图系统设计总流程图如图4.1所示,接通电源之后,系统就处在取数据-显示数据的循环之中。图4.1 系统总流程图4.1.2 从DS1302取时

12、间流程图图4.2 从DS1302取时间流程图4.1.3 串口数据接收、处理流程图 每当接收一次串口送来的数据,就进一次串口服务中断子程序。在串口服务中断子程序中,对接收的数据进行处理:判断接收的若干个数据是否符合输入要求。如果符合,就将数据存入接收缓冲单元中,并进行转换(将接收到的数据由字符BCD码),然后将转换过后的数据写入到DS1302中。如果接收到的数据不符合输入要求,则将这次接收的数据舍弃。流程图如下: 图4.3 串口数据接收、处理流程图4.1.4 LCD1602显示时间流程图 在每次写操作执行前,都需要对1602检查其是否处于“忙”的状态,如果其处于“忙”状态,那么就等其处于空闲状态

13、之后再对其进行写操作。 图4.4 串口数据接收、处理流程图4.2 模块工作过程介绍4.2.1 DS1302模块1工作过程:在DS1302进行数据传输时,RST引脚必须被置为高电平,在每个SCLK上升沿时数据被输入,下降沿时数据被输出,一次只能读写一位,通过8个脉冲便可读取一个字节或写入一个字节从而实现串行输入与输出。时序图如下:图4.5 DS1302单字节 读 时序图经过8个时钟周期的控制读指令串行输入后,一个字节的数据将在接下来8个时钟周期的下降沿被输出。代码如下:uchar Get_A_Byte_FROM_DS1302() uchar i,b=0x00; for(i=0;i=1;2控制指令

14、:图4.7 DS1302 控制指令图Bit7位必须为1,如果是0写入将被禁止。Bit6位为0是指定对时钟/日历寄存器控制读写操作,为1则为对RAM区数据的控制读写操作,最低位Bit0指定是写操作(0)还是读操作(1)。3时钟/日历寄存器图4.8 DS1302时钟日历寄存器“秒”寄存器中Bit7位为时钟停止标志位,若CH=1,时钟晶振停止起振,DS1302进入低功耗待命模式,若CH=0,晶振开始起振。 WP位为写保护位,为1有效。在任何 写 操作执行前,WP位都应该置0,使写保护位无效,即允许写。注意:写入时钟日历寄存器内的内容应为BCD码,必须将串口接收到的数据转化为BCD码然后再存放在DS1

15、302中,转换代码如下:void DateChange(void) /将10进制数转换为BCD码存放在 /RECEIVE_BUFFER2数组中 int i;7; RECEIVE_BUFFER2i=RECEIVE_BUFFER1i*3*10+RECEIVE_BUF FER1i*3+1; RECEIVE_BUFFER2i=RECEIVE_BUFFER2i/10*16+RECEIVE_BUFF ER2i%10;4.2.2 LCD1602模块1LCD1602读操作:LCD1602作为一个显示设备,其读操作一般很少用到,只有在向1602写数据,需要判断其是否“忙”时,才会用到读操作。读操作时序图如下:图

16、4.9 LCD1602 读 时序图首先将RS拉低,RW置高,表示 读数据,再将使能端置高,P0口上的数据输入,即可将数据读入。uchar Read_LCD_State() uchar state; RS=0;RW=1;EN=1;DelayMS(1); state=P0; EN = 0; return state;2LCD1602写操作:相较于读操作,写操作用的很多。写操作时序图如下:图4.10 LCD1602 写 时序图需要注意的是,在每次写操作执行前,都需要对1602检查其是否处于“忙”的状态,如果其处于“忙”状态,那么就等其处于空闲状态之后再对其进行写操作。判忙代码如下:void LCD_

17、Busy_Wait() while(Read_LCD_State()&0x80)=0x80); DelayMS(5);写 数据代码如下:void Write_LCD_Data(uchar dat) LCD_Busy_Wait(); RS=1;RW=0;EN=0;P0=dat;写 指令代码如下:void Write_LCD_Command(uchar cmd)P0=cmd;3LCD1602 初始化操作: 1602初始化操作是对1602显示的方式、功能作一些设置,达到预期的显示效果。通过将指令写入1602中即可实现初始化操作。指令说明如下: 显示模式设置: 图4.11 LCD1602 显示模式设置

18、 显示开/关及光标设置: 图4.12 LCD1602 显示开/关及光标设置初始化代码如下:void Init_LCD() Write_LCD_Command(0x38); /162显示,57点阵,8位数据接口 DelayMS(1); Write_LCD_Command(0x01); /清屏 Write_LCD_Command(0x06); /增量方式,不移位 Write_LCD_Command(0x0c); /开显示,光标关,字符不闪烁 4.2.3 串口接收模块用电脑键盘,将要输入的时间通过串口发送给MCU。串口采用方式1,波特率设置为9600Bit/s。发送及接收时序图如图所示: 图4.13

19、 串口工作方式1的时序图串口接收代码如下:void UART_ISR() interrupt 4 /串口中断:由串口输入 uchar Temp; if(RI) RI=0; Temp=SBUF; if(Temp!=0x0d) RECEIVE_BUFFER1rec_i=Temp-0; /获取字符对应的 rec_i+; if(Temp=0x0d) DateChange(); if(Date_Check()=1) DS1302Init(); /向DS1302写入 else ES=0; SBUF=E while(TI=0); TI=0;r o SBUF=0x0D; ES=1; rec_i=0; if(T

20、I) TI=0;5.系统调试与仿真5.1 采用Proteus硬件仿真调试创建调试过程如图:1在Debug模式下选择Proteus VSM Monitor-51 Driver硬件驱动。然后点击确定即可。如图5.1所示。图5.1 调试设置2点击工具栏上按钮,即可开始keil与proteus联调过程,如图5.2所示:图5.2 联调过程5.2 调试过程调试过程中,我遇到了一些问题,后来都通过调试解决了。1我的本次设计有一项功能:若操作者没有按照规定格式输入,则虚拟中断(串口调试助手)会显示一个字符串“Error”。如图:图5. 3运行过程而我在最初阶段并没有实现此功能。后来通过调试,我发现了问题所在:

21、输出此段字符应采用查询方式输出,而我采用了中断方式。在执行此操作时,就处在串口中断服务子程序内,系统不会再响应串口中断。将此中断方式输出改为查询方式输出就解决了这个问题。2在我通过虚拟终端向系统输入日期时,DS1302不能接收我输入的数据。调试过程中,我发现是时序出了问题。向DS1302写入数据时,RST为高的情况下,SCLK上升沿时IO口数据被写入DS1302,而我程序内则写成了下降沿时数据被写入。5.3 运行效果Proteus运行按钮按下,LCD1602显示的时间与当前系统的时间同步,且虚拟中断输出一段字符串,用来提示输入格式。如图所示:图5. 4运行过程接下来,按照提示的格式输入时间,如

22、:15-07-12-31-23-59-50 ,如图所示:图5. 5运行过程然后再按下回车键,则1602上即显示输入格式的时间,如图所示:图5. 6运行过程若重新按照格式输入,则时间会再一次改变,如图:图5. 7运行过程如若输入的格式不正确,则虚拟终端会输出一个字符串“Error”来提醒操作者输入格式错误,如图所示:图5. 8运行过程同时,此系统还有检测输入日期是否实际的功能,如输入:16-08-12-31-23-59-50 (周-08肯定是错误的),虚拟中断也会输出字符串“Error”来提示操作者,如图所示:图5. 9运行过程所有功能运行效果介绍完毕。5.4 仿真的局限性软件仿真与实际验证有很

23、大的不同。软件仿真是将元器件、导线等理想化了,不会出错,而实际电路的走线布线、元器件、工作环境(如温度、湿度等)对电路的运行都是有影响的,只是影响大小不同而已,甚至期间因为受到影响而直接损坏,这些都是在软件仿真时不可能遇到的。除此之外,同一型号的元器件,不同厂家,甚至是同一厂家不同批次生产出来的元器件都多少有些差异,而这些差异都有可能使硬件运行失败。最直观的例子就是:我在调试的过程中,在Proteus上完美运行的程序,烧写进实验板之后现实的效果就没有了。根本看不见时间。最后经过很长时间的调试,期间对1602工作的时序作了一些调整,我才解决了这个问题,让实验板与仿真实现同样的效果。由此看来,仿真

24、的局限性很大,只有在硬件上实现才能算是真正的完成了设计。5.5 方案改进虽然此设计已经满足了基本要求,但在满足用户方面还存在一些欠缺。比如:用户如果输入一个不存在的时间,如 2012年2月29日。系统应该能识别2010年不是闰年,并不存在此时间。此时,系统应提示输入错误。此外,LCD1602显示界面还可以做一些调整,如增加温度显示,湿度显示等。6.设计总结虽然本次课程设计只持续了不到一周,但我学到的东西很多很多。从接到这个题目到现在设计的完成,每一步我都有深刻的体会。作为一名工科生,我更喜欢有条理地总结这次设计的收获:1首先,本次设计我收获最大的就是我懂得了:学习单片机这门课不单单是学会画图、写代码就OK了。而是应该培养自己的“工程师”能力。从分析设计要求到选择方案再

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1