第十五届蓝桥杯单片机组——DS1302

发布时间:2024年01月22日

一、DS1302介绍

1.时钟数据:DS1302可以提供秒、分钟、小时、天、日期、月份和年份数据,且时间制可以是24小时制或12小时制。同时该IC内部有一个专门的控制器用以识别闰年。
2.串行通信:DS1302通过三线接口(数据I/O、时钟和使能线)与微控制器进行串行通信。蓝桥杯用到四种通信协议一个:IIC、OneWire、UART还有一个就是DS1302的串行通信。
3.RAM存储:DS1302还配有一小片RAM,允许用户在接通电源时读取和存储额外的数据。

二、使用DS1302需要注意的点

2.1 写保护

在写入数据的时候向0x8e这个地址写入关闭写保护0x00

在这里插入图片描述

2.2 写入的时间需要以BCD码形式

在这里插入图片描述

2.3 12小时模式 or 24小时模式

在这里插入图片描述

三、代码编写

发送数据的话需要知道我们要把数据发到哪里,所以需要一个地址。
读取数据一样,我们要从哪个地址去读取数据。
一个寄存器对应两个地址(逻辑地址),目的就是为了区分读和写,分别是读地址和写地址,如下图:
在这里插入图片描述

3.1 初始化时间

在这里插入图片描述

unsigned char code READ_RTC_ADDR[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};	// 读取数据的地址
unsigned char code WRITE_RTC_ADDR[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};	// 写数据地址
unsigned char TIME[7]={0x30, 0x59, 0x23, 0x17, 0x02, 0x06, 0x18};  //注意必须用BCD码,顺序是秒、分、时、日、月、星期、年
void DS1302_Config()
{
	unsigned char n;
	Write_Ds1302_Byte( 0x8e,0x00 ); //关闭写保护
	for(n=0;n<7;n++){
		Write_Ds1302_Byte(WRITE_RTC_ADDR[n],TIME[n]);
	}
	Write_Ds1302_Byte( 0x8e,0x80 );  //开启写保护
}

3.2 读取RTC时间

void DS1302_Read()
{
	unsigned char n;
	for(n=0;n<7;n++)
	{
		TIME[n]=Read_Ds1302_Byte(READ_RTC_ADDR[n]);  //读取7个字节的实时时间
	}
}
文章来源:https://blog.csdn.net/struggle_success/article/details/135724218
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。