基于DS1302与数码管方案设计书的可调数字钟.docx

上传人:b****1 文档编号:2420086 上传时间:2022-10-29 格式:DOCX 页数:20 大小:301.27KB
下载 相关 举报
基于DS1302与数码管方案设计书的可调数字钟.docx_第1页
第1页 / 共20页
基于DS1302与数码管方案设计书的可调数字钟.docx_第2页
第2页 / 共20页
基于DS1302与数码管方案设计书的可调数字钟.docx_第3页
第3页 / 共20页
基于DS1302与数码管方案设计书的可调数字钟.docx_第4页
第4页 / 共20页
基于DS1302与数码管方案设计书的可调数字钟.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

基于DS1302与数码管方案设计书的可调数字钟.docx

《基于DS1302与数码管方案设计书的可调数字钟.docx》由会员分享,可在线阅读,更多相关《基于DS1302与数码管方案设计书的可调数字钟.docx(20页珍藏版)》请在冰豆网上搜索。

基于DS1302与数码管方案设计书的可调数字钟.docx

基于DS1302与数码管方案设计书的可调数字钟

之基于DS1302与数码管设计的可调数字钟

☆点名,复习

1、定时器的工作方式有哪些?

如何对定时器进行初始化。

2、数码管动态显示技术的原理?

☆新课讲授

2.2基于DS1302与数码管设计的可调数字钟

前面我们用定时器产生1秒的时间,从而也设计出了可以调节数字钟,但用这种方法设计出来的电子钟不够准确。

这节课我们用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路DS1302,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能。

同时,我们还是用数码管作为显示时间的硬件。

2.2.1DS1302芯片技术资料

DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。

DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。

DS1302的外部引脚分配如图1所示及内部结构如图2所示。

DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。

图1DS1302引脚

图2DS1302内部结构

1、引脚功能及结构

DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。

在主电源关闭的情况下,也能保持时钟的连续运行。

DS1302由Vcc1或Vcc2两者中的较大者供电。

当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。

当Vcc2小于Vcc1时,DS1302由Vcc1供电。

X1和X2是振荡源,外接32.768kHz晶振。

RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。

RST输入有两种功能:

首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。

当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。

如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。

上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。

只有在SCLK为低电平时,才能将RST置为高电平。

I/O为串行数据输入输出端(双向),SCLK始终是输入端。

2、DS1302的寄存器和控制命令

对DS1302的操作就是对其内部寄存器的操作,DS1302内部共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。

小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。

当为高时,选择12小时模式。

在12小时模式时,位5是,当为1时,表示PM,当为0时,表示AM。

在24小时模式时,位5是第二个10小时位。

秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。

当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。

控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。

在任何的对时钟和RAM的写操作之前,WP位必须为0。

当WP位为1时,写保护位防止对任一寄存器的写操作。

日历、时间寄存器及控制字如表1所示:

表1日历、时钟寄存器与控制字对照表

寄存器名称

7

6

5

4

3

2

1

0

1

RAM/CK

A4

A3

A2

A1

A0

RD/W

秒寄存器

1

0

0

0

0

0

0

0/1

分寄存器

1

0

0

0

0

0

1

0/1

小时寄存器

1

0

0

0

0

1

0

0/1

日寄存器

1

0

0

0

0

1

1

0/1

月寄存器

1

0

0

0

1

0

0

0/1

星期寄存器

1

0

0

0

1

0

1

0/1

年寄存器

1

0

0

0

1

1

0

0/1

写保护寄存器

1

0

0

0

1

1

1

0/1

慢充电寄存器

1

0

0

1

0

0

0

0/1

时钟突发寄存器

1

0

1

0

1

1

1

0/1

最后一位RD/W为“0”时表示进行写操作,为“1”时表示读操作。

此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。

时钟突发寄存器可一次性顺序读写除充电寄存器以外的寄存器。

DS1302内部的RAM分为两类,一类是单个RAM单元,共31个,每个单元为一个8位的字节,其命令控制

字为COH~FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。

 

表2DS1302内部主要寄存器分布表

寄存器名称

命令字

取值范围

寄存器定义

7

6

5

4

3

2

1

0

秒寄存器

80H

81H

00-59

CH

10SEC

SEC

分寄存器

82H

83H

00-59

0

10MIN

MIN

小时寄存器

84H

85H

01-12或00-23

12/24

0

10

HR

HR

A/P

日寄存器

86H

87H

01-28,29,30,31

0

10DATE

DATE

月寄存器

88H

89H

01-12

0

0

0

10M

MONTH

星期寄存器

8AH

8BH

01-07

0

0

0

0

DAY

年寄存器

8CH

8DH

00-99

10year

year

写保护寄存器

8EH

8FH

WP

0

0

0

0

0

0

0

慢充电寄存器

90H

91H

TCS

TCS

TCS

TCS

DS

DS

DS

DS

我们现在已经知道了控制寄存器和RAM的逻辑地址,接着就需要知道如何通过外部接口来访问这些资源。

单片机是通过简单的同步串行通讯与DS1302通讯的,每次通讯都必须由单片机发起,无论是读还是写操作,单片机都必须先向DS1302写入一个命令帧,这个帧的格式如图3所示,最高位BIT7固定为1,BIT6决定操作是针对RAM还是时钟寄存器,接着的5个BIT是RAM或时钟寄存器在DS1302的内部地址,最后一个BIT表示这次操作是读操作抑或是写操作。

DS1302是SPI总线驱动方式。

它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。

要想与DS1302通信,首先要先了解DS1302的控制字。

DS1302的控制字如图3所示。

控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1(A4~A0)指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。

图3命令字节格式

在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。

同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。

数据读写时序如图4。

图4-1单字节读时序

图4-2单字节写时序

物理上,DS1302的通讯接口由3个口线组成,即RST,SCLK,I/O。

其中RST从低电平变成高电平启动一次数据传输过程,SCLK是时钟线,I/O是数据线。

具体的读写时序参考图4,但是请注意,无论是哪种通讯类型的串行接口,都是对时钟信号敏感的,而且一般数据写入有效是在上升沿,读出有效是在下降沿(DS1302正是如此的,但是在芯片手册里没有明确说明),如果不是特别确定,则把程序设计成这样:

平时SCLK保持低电平,在时钟变动前设置数据,在时钟变动后读取数据,即数据操作总是在SCLK保持为低电平的时候,相邻的操作之间间隔有一个上升沿和一个下降沿。

3调试中问题说明

(1)DS1302与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高MSB(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5~D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入),D0=1,指定读操作(输出)。

(2)在DS1302的时钟日历或RAM进行数据传送时,DS1302必须首先发送命令字节。

若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节。

(3)要特别说明的是备用电源B1,可以用电池或者超级电容器(0.1F以上)。

虽然DS1302在主电源掉电后的耗电很小,但是,如果要长时间保证时钟正常,最好选用小型充电电池。

可以用老式电脑主板上的3.6V充电电池。

如果断电时间较短(几小时或几天)时,就可以用漏电较小的普通电解电容器代替。

100μF就可以保证1小时的正常走时。

DS1302在第一次加电后,必须进行初始化操作。

初始化后就可以按正常方法调整时间。

2.2.2硬件电路设计

硬件设计时使用了DS1302,电路结构简单,具体如下图所示:

2.2.3软件设计

软件设计中主要是针对DS1302芯片进行程序的设计,由以上DS1302的技术资料分析可知,作为程序设计人员,对DS1302的主要操作是:

(1)向DS1302中写一个字节,从DS1302的寄存器中读一个字节。

(2)向DS1302中写入一个数据(通常这个数据就是DS1302中某个寄存器的8位地址),从DS1302的某个寄存器中读取数据,比如读取时间寄存器中的时间。

(3)读取时间寄存器中的时间,主要是时、分、秒和年、月、日、星期等这七个寄存器的值。

1、写字节函数

voidWrite_Byte_TO_DS1302(ucharX)//向DS1302写入一个字节

{uchari。

for(i=0。

i<8。

i++)

{

SDA=X&1。

CLK=1。

CLK=0。

X>>=1。

}

}

2、读字节函数

ucharRead_Byte_FROM_DS1302()

{

uchari,byte,t。

for(i=0。

i<8。

i++)

{

byte>>=1。

t=SDA。

byte|=t<<7。

CLK=1。

CLK=0。

}

//BCD码转换

returnbyte/16*10+byte%16。

}

3、写数据函数

ucharRead_Data_FROM_DS1302(ucharaddr)

{

uchardat。

RST=0。

CLK=0。

RST=1。

Write_Byte_TO_DS1302(addr)。

//向DS1302写入一个地址

dat=Read_Byte_FROM_DS1302()。

//在上面写入的地址中读取数据

CLK=1。

RST=0。

returndat。

}

4、读数据函数

voidWrite_Data_TO_D

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

当前位置:首页 > 求职职场 > 面试

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

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