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

上传人:b****6 文档编号:17621426 上传时间:2022-12-07 格式:DOCX 页数:37 大小:1.09MB
下载 相关 举报
实时时钟的设计Word下载.docx_第1页
第1页 / 共37页
实时时钟的设计Word下载.docx_第2页
第2页 / 共37页
实时时钟的设计Word下载.docx_第3页
第3页 / 共37页
实时时钟的设计Word下载.docx_第4页
第4页 / 共37页
实时时钟的设计Word下载.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

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

《实时时钟的设计Word下载.docx》由会员分享,可在线阅读,更多相关《实时时钟的设计Word下载.docx(37页珍藏版)》请在冰豆网上搜索。

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

2.总体方案

2.1模块方案选择:

2.1.1单片机模块

方案一:

使用AT89C51单片机模块。

AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)以及128BYTES随机数据存储器的低电压、高性能CMOS8位微处理器。

内置功能强大微型计算机的AT89C51提供了高性价比的解决方案。

方案二:

使用MSP430单片机模块。

MSP430系列单片机是美国德州仪器1996年开始推向市场的一种16位超低功耗、具有精简指令集(RISC)的混合信号处理器(MixedSignalProcessor)。

其具有处理能力强、运算速度快、超低功耗、片内资源丰富等特点,因而在许多单片机领域都得到广泛应用。

AT89C51相对于MSP430虽然存储容量小,功能较为逊色。

但是出于我对AT89C51单片机较为熟悉,而且AT89C51足以满足此次设计任务,因此我选择AT89C51模块。

2.1.2时钟模块

基本门电路搭建。

用基本门电路来实现时钟发生器,电路结构复杂,故障西数大,不易测试

专用时钟芯片。

目前市场上有许多实时时钟芯片。

如DS1302、DS12887、DS1307、X1227等,芯片内都集成了时钟/日历功能,给时钟系统设计带来了很多方便。

DS1302在功耗方面表现非常出色(2.5V~5.5V电源,在2.5V时耗电量小于300Na),且性能稳定,购买方便,因此在时钟模块我决定采用DS1302作为实时时钟芯片。

2.1.3键盘模块

根据设计要求,本次用电脑键盘设定时钟对时钟进行调整。

2.1.4显示模块

采用液晶显示器。

液晶相对于传统的显示器相比,最大的优点在于耗电量和体积,一般的液晶显示器的分辨率可达到720dpi以上。

而且,当要显示的信息量较多时,LCD液晶显示器的优点就会凸显出来。

而且,LCD界面显示相对友好。

采用数码管显示电路。

LED数码管能在低电压,小电流条件下驱动发光管发光,能与CMOS、ITL电路兼容。

具有发光响应时间极短,高频特性好、单色性好,亮度高等优点。

由于此次设计显示信息量较多,而且为了追求更加友好的界面,决定采用LCD液晶显示器。

2.2方案设计

综上,基于界面最友好的原则,此次设计采用51系列的AT89C51作为主控芯片,DS1302作为实时时钟芯片,时钟调整由电脑键盘输入,由LCD液晶显示屏显示时钟信息,系统总体框图如下:

图2.1系统结构图

各组成部分功能、特色如下:

1 DS1302为系统提供精准的秒、分、时、日、月、周、年等信息,单片机能够对其进行写入和读出,计时准确,使用方便。

2 LCD点阵显示屏用来显示时间信息。

3 需要改写的时间信息有电脑键盘输入,改写格式为:

Year-Week-Month-Day-Hour-Minute-Second

每一部分均由两位数构成,如“周五”应输入“05”,7个部分输入完按回车键确定。

4 MCU控制整个系统的运行:

对DS1302进行读来获取时间、将电脑键盘输入的信息写入DS1302内以改写时间、将从DS1302获取的时间信息显示在LCD液晶显示器上。

3.硬件设计

3.1关键器件简介

3.1.1AT89C51简介

AT89C51提供以下标准功能:

4k 

字节Flash 

闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。

同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。

空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。

掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

实物图及引脚排列如下:

图3.1AT89C51实物图

图3.2AT89C51引脚图

3.1.2DS1302实时时钟芯片简介

DS1302时钟内含有一个实时时钟/日历和31字节静态RAM,通过简单

的串行接口与单片机进行通信,实时时钟/日历电路提供年、月、日、星期、

时、分、秒的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过

AM/PM只是决定采用24或12小时格式。

DS1302与单片机之间能简单的采用同步串行的方式进行通信,仅需用到三个口线:

(1)RES(复位、也称为使能位)

(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.3DS1302实物图

图3.4DS1302引脚图

3.1.3LCD1602液晶显示器简介

1602液晶是一种工业字符型液晶,能够同时显示16×

02即32个字符(16列2行)。

它是一种专门用来显示字母、数字、符号等的点阵型液晶模块,它有若干个5×

7或者5×

11等点阵字符位组成,每个点阵字符位都可以显示一个字符。

1602正常工作状态下接+5V电压,且其对比度可调;

内部含有复位电路;

提供各种控制功能命令,如:

清屏、字符闪烁、光标闪烁、显示移位等多种功能;

内含80字节显示数据存储器DDRAM;

内建有192个5×

7点阵的字型的字符发生器CGROM;

8个可由用户自定义的5×

7的字符发生器CGRAM;

有微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。

实物图和引脚图如下:

图3.5LCD1602实物图

图3.6LCD1602引脚图

3.2系统电路原理仿真图

图3.7系统电路原理仿真图

3.3器件主要参数介绍

3.3.1DS1302模块

1 查询手册,知DS1302引脚2/3之间的晶振为32.768KHZ。

2 可以设定规定载荷电容为6pF。

3 DS1302工作电压为2.0~5.5V,VCC2为主电源、VCC1为备用电源。

当主电源关闭时,也能保持时钟的连续运行。

由于DS1302兼容TTL电路,故我们均采用5V供电。

足以提供大于最小驱动电流(320纳安,2.0V时)的电流。

3.3.2LCD1602模块

1 查询手册,知1602芯片工作电压在4.5~5.5V。

模块最佳工作电压在5.0V,故我们采用5V电压给LCD1602供电,此时的工作电流为2.0mA,足以驱动1602工作。

2 显示容量:

16×

2个字符

3 字符尺寸:

2.95×

4.35mm

4 12号引脚为液晶显示偏压信号,通过改变此引脚上电压,可以改变1602的显示对比度。

5 1602数据引脚接在最小系统的P0口,由于P0口是准双向口(不存在高阻抗状态),需要在片外接上拉电阻。

3.3.3键盘输入模块

1 Proteus仿真环境下采用虚拟终端作为串口通信的通道,传输波特率设置为9600bit/s。

2 实际运行过程中,用串口调试助手软件对DS1302实现写的操作,同样波特率设置为9600bit/s。

3.3.4最小系统模块:

1 整个系统采用5V供电。

2 AT89C51静态工作频率为0~24MHZ,为了满足串口传输数据,我们采用11.0592MHZ的晶振为系统提供振荡频率。

3 振荡电路电容容量规定在20~40pF之间,我们采用典型值30pF。

4 复位电路实现复位时通过在RST引脚上施加2个机器周期的高电平,即可实现复位。

为了使电容的充电、放电时间满足要求,我们取C的容量为10μF。

4.软件设计

4.1流程图

4.1.1系统设计总流程图

系统设计总流程图如图4.1所示,接通电源之后,系统就处在取数据--显示数据的循环之中。

图4.1系统总流程图

4.1.2从DS1302取时间流程图

图4.2从DS1302取时间流程图

4.1.3串口数据接收、处理流程图

每当接收一次串口送来的数据,就进一次串口服务中断子程序。

在串口服务中断子程序中,对接收的数据进行处理:

判断接收的若干个数据是否符合输入要求。

如果符合,就将数据存入接收缓冲单元中,并进行转换(将接收到的数据由字符→BCD码),然后将转换过后的数据写入到DS1302中。

如果接收到的数据不符合输入要求,则将这次接收的数据舍弃。

流程图如下:

图4.3串口数据接收、处理流程图

4.1.4LCD1602显示时间流程图

在每次写操作执行前,都需要对1602检查其是否处于“忙”的状态,如果其处于“忙”状态,那么就等其处于空闲状态之后再对其进行写操作。

图4.4串口数据接收、处理流程图

4.2模块工作过程介绍

4.2.1DS1302模块

1 工作过程:

在DS1302进行数据传输时,RST引脚必须被置为高电平,在每个SCLK上升沿时数据被输入,下降沿时数据被输出,一次只能读写一位,通过8个脉冲便可读取一个字节或写入一个字节从而实现串行输入与输出。

时序图如下:

图4.5DS1302单字节读时序图

经过8个时钟周期的控制读指令串行输入后,一个字节的数据将在接下来8个时钟周期的下降沿被输出。

代码如下:

ucharGet_A_Byte_FROM_DS1302()

{

uchari,b=0x00;

for(i=0;

i<

8;

i++)

{

b|=_crol_((uchar)IO,i);

SCLK=1;

SCLK=0;

}

returnb/16*10+b%16;

}

图4.6DS1302单字节写时序图

经过8个时钟周期的控制字节的写入,一个字节数据将在接下来8个时钟周期的上升沿完成,数据的传输从字节最低位开始。

voidWrite_A_Byte_TO_DS1302(ucharx)

uchari;

IO=x&

0x01;

SCLK=1;

x>

>

=1;

2 控制指令:

图4.7DS1302控制指令图

Bit7位必须为1,如果是0写入将被禁止。

Bit6位为0是指定对时钟/日历寄存器控制读写操作,为1则为对RAM区数据的控制读写操作,最低位Bit0指定是写操作(0)还是读操作

(1)。

3 时钟/日历寄存器

图4.8DS1302时钟日历寄存器

“秒”寄存器中Bit7位为时钟停止标志位,若CH=1,时钟晶振停止起振,DS1302进入低功耗待命模式,若CH=0,晶振开始起振。

WP位为写保护位,为1有效。

在任何写操作执行前,WP位都应该置0,使写保护位无效,即允许写。

注意:

写入时钟日历寄存器内的内容应为BCD码,必须将串口接收到的数据转化为BCD码然后再存放在DS1302中,转换代码如下:

voidDateChange(void)//将10进制数转换为BCD码存放在

//RECEIVE_BUFFER2数组中

inti;

7;

{RECEIVE_BUFFER2[i]=RECEIVE_BUFFER1[i*3]*10+RECEIVE_BUFFER1[i*3+1];

RECEIVE_BUFFER2[i]=RECEIVE_BUFFER2[i]/10*16+RECEIVE_BUFFER2[i]%10;

4.2.2LCD1602模块

1 LCD1602读操作:

LCD1602作为一个显示设备,其读操作一般很少用到,只有在向1602写数据,需要判断其是否“忙”时,才会用到读操作。

读操作时序图如下:

图4.9LCD1602读时序图

首先将RS拉低,RW置高,表示读数据,再将使能端置高,P0口上的数据输入,即可将数据读入。

ucharRead_LCD_State()

ucharstate;

RS=0;

RW=1;

EN=1;

DelayMS

(1);

state=P0;

EN=0;

returnstate;

2 LCD1602写操作:

相较于读操作,写操作用的很多。

写操作时序图如下:

图4.10LCD1602写时序图

需要注意的是,在每次写操作执行前,都需要对1602检查其是否处于“忙”的状态,如果其处于“忙”状态,那么就等其处于空闲状态之后再对其进行写操作。

判忙代码如下:

voidLCD_Busy_Wait()

while((Read_LCD_State()&

0x80)==0x80);

DelayMS(5);

写数据代码如下:

voidWrite_LCD_Data(uchardat)

LCD_Busy_Wait();

RS=1;

RW=0;

EN=0;

P0=dat;

写指令代码如下:

voidWrite_LCD_Command(ucharcmd)

P0=cmd;

3 LCD1602初始化操作:

1602初始化操作是对1602显示的方式、功能作一些设置,达到预期的显示效果。

通过将指令写入1602中即可实现初始化操作。

指令说明如下:

显示模式设置:

图4.11LCD1602显示模式设置

显示开/关及光标设置:

图4.12LCD1602显示开/关及光标设置

初始化代码如下:

voidInit_LCD()

Write_LCD_Command(0x38);

//16×

2显示,5×

7点阵,8位数据接口

DelayMS

(1);

Write_LCD_Command(0x01);

//清屏

Write_LCD_Command(0x06);

//增量方式,不移位

Write_LCD_Command(0x0c);

/开显示,光标关,字符不闪烁

4.2.3串口接收模块

用电脑键盘,将要输入的时间通过串口发送给MCU。

串口采用方式1,波特率设置为9600Bit/s。

发送及接收时序图如图所示:

图4.13串口工作方式1的时序图

串口接收代码如下:

voidUART_ISR()interrupt4//串口中断:

由串口输入

ucharTemp;

if(RI)

RI=0;

Temp=SBUF;

if(Temp!

=0x0d)

{

RECEIVE_BUFFER1[rec_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(TI)

TI=0;

5.系统调试与仿真

5.1采用Proteus硬件仿真调试

创建调试过程如图:

1 在Debug模式下选择ProteusVSMMonitor-51Driver硬件驱动。

然后点击确定即可。

如图5.1所示。

图5.1调试设置

2 点击工具栏上

按钮,即可开始keil与proteus联调过程,如图5.2所示:

图5.2联调过程

5.2调试过程

调试过程中,我遇到了一些问题,后来都通过调试解决了。

1 我的本次设计有一项功能:

若操作者没有按照规定格式输入,则虚拟中断(串口调试助手)会显示一个字符串“Error”。

如图:

图5.3运行过程

而我在最初阶段并没有实现此功能。

后来通过调试,我发现了问题所在:

输出此段字符应采用查询方式输出,而我采用了中断方式。

在执行此操作时,就处在串口中断服务子程序内,系统不会再响应串口中断。

将此中断方式输出改为查询方式输出就解决了这个问题。

2 在我通过虚拟终端向系统输入日期时,DS1302不能接收我输入的数据。

调试过程中,我发现是时序出了问题。

向DS1302写入数据时,RST为高的情况下,SCLK上升沿时IO口数据被写入DS1302,而我程序内则写成了下降沿时数据被写入。

5.3运行效果

Proteus运行按钮按下,LCD1602显示的时间与当前系统的时间同步,且虚拟中断输出一段字符串,用来提示输入格式。

如图所示:

图5.4运行过程

接下来,按照提示的格式输入时间,如:

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仿真的局限性

软件仿真与实际验证有很大的不同。

软件仿真是将元器件、导线等理想化了,不会出错,而实际电路的走线布线、元器件、工作环境(如温度、湿度等)对电路的运行都是有影响的,只是影响大小不同而已,甚至期间因为受到影响而直接损坏,这些都是在软件仿真时不可能遇到的。

除此之外,同一型号的元器件,不同厂家,甚至是同一厂家不同批次生产出来的元器件都多少有些差异,而这些差异都有可能使硬件运行失败。

最直观的例子就是:

我在调试的过程中,在Proteus上完美运行的程序,烧写进实验板之后现实的效果就没有了。

根本看不见时间。

最后经过很长时间的调试,期间对1602工作的时序作了一些调整,我才解决了这个问题,让实验板与仿真实现同样的效果。

由此看来,仿真的局限性很大,只有在硬件上实现才能算是真正的完成了设计。

5.5方案改进

虽然此设计已经满足了基本要求,但在满足用户方面还存在一些欠缺。

比如:

用户如果输入一个不存在的时间,如2012年2月29日。

系统应该能识别2010年不是闰年,并不存在此时间。

此时,系统应提示输入错误。

此外,LCD1602显示界面还可以做一些调整,如增加温度显示,湿度显示等。

6.设计总结

虽然本次课程设计只持续了不到一周,但我学到的东西很多很多。

从接到这个题目到现在设计的完成,每一步我都有深刻的体会。

作为一名工科生,我更喜欢有条理地总结这次设计的收获:

1 首先,本次设计我收获最大的就是我懂得了:

学习单片机这门课不单单是学会画图、写代码就OK了。

而是应该培养自己的“工程师”能力。

从分析设计要求到选择方案再

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

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

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