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

文章目录

  • 一、DS1302介绍
  • 二、使用DS1302需要注意的点
    • 2.1 写保护
    • 2.2 写入的时间需要以BCD码形式
    • 2.3 12小时模式 or 24小时模式
  • 三、代码编写
    • 3.1 初始化时间
    • 3.2 读取RTC时间

一、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小时模式

在这里插入图片描述

三、代码编写

发送数据的话需要知道我们要把数据发到哪里,所以需要一个地址。
读取数据一样,我们要从哪个地址去读取数据。
一个寄存器对应两个地址(逻辑地址),目的就是为了区分读和写,分别是读地址和写地址,如下图:
第十五届蓝桥杯单片机组——DS1302_第1张图片

3.1 初始化时间

第十五届蓝桥杯单片机组——DS1302_第2张图片

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个字节的实时时间
	}
}

你可能感兴趣的:(蓝桥杯单片机组,蓝桥杯,单片机)