蓝桥杯单片机快速开发笔记——DS1302实时时钟

一、原理分析

        考试时可能会需要自己编写底层驱动的.h文件,编写.h的关键是会查原理图把SCK、SDA、RST定义好。

sbit SCK = P1^7;
sbit SDA = P2^3;
sbit RST = P1^3;

二、应用:

  1. 实时时钟:DS1302可以提供精确的实时时钟功能,包括秒、分、时、日、月、年等信息,适用于各种需要时间计时的应用场景。

  2. 日历功能:DS1302可以提供日历功能,包括自动调整月末日期、闰年判断等功能,方便实现日历显示和计算。

  3. 定时功能:DS1302内置有定时器功能,可以设置定时触发事件,如定时浇花、定时报警等。

  4. 电子表:DS1302常用于电子表、时钟、计时器等设备中,提供精确的时间显示和计时功能。

  5. 数据记录:DS1302的时间戳功能可以用于数据记录,记录特定时间点的数据,如温度、湿度等。

  6. 低功耗设计:DS1302具有低功耗特性,适合用于需要长时间运行的电池供电设备。

三、思维导图

四、示例代码

#include "ds1302.h"

unsigned char hour = 0;                 //时
unsigned char min = 0;                  //分
unsigned char sec = 0;                  //秒

//定义DS1302读操作的日历时钟存储器地址
unsigned char code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
//定义DS1302写操作的日历时钟存储器地址
unsigned char code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
//定义DS1302日历时钟的七个配置参数
unsigned char TIME[7] = {0x50, 0x59, 0x18, 0x22, 0x02, 0x02, 0x22};
                        /*秒   分    时    日    月    星期  年*/

// 初始化DS1302的参数
void Init_DS1302_Param()  
{
    Write_Ds1302_Byte(0x8E, 0x00);  // 解除写保护
    for (int i = 0; i < 7; i++) {
        Write_Ds1302_Byte(WRITE_RTC_ADDR[i], TIME[i]);  // 依次写入7个数据
    }
    Write_Ds1302_Byte(0x8E, 0x80);  // 使能写保护
}

// 读取DS1302中的时分秒
void Read_Ds1302_Time()  
{
    sec = Read_Ds1302_Byte(READ_RTC_ADDR[0]);
    min = Read_Ds1302_Byte(READ_RTC_ADDR[1]);
    hour = Read_Ds1302_Byte(READ_RTC_ADDR[2]);	
}

        这段代码主要实现了DS1302实时时钟芯片的初始化和读取时分秒信息的功能。通过初始化参数和读取时间信息,可以实现对DS1302时钟的控制和获取当前时间。

  1. unsigned char hour = 0;unsigned char min = 0;unsigned char sec = 0;:定义了三个无符号字符型变量hourminsec,分别用于存储时、分、秒的时间信息,并初始化为0。

  2. unsigned char code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};:定义了一个包含7个元素的无符号字符型数组READ_RTC_ADDR,用于存储DS1302读操作的日历时钟存储器地址。

  3. unsigned char code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};:定义了一个包含7个元素的无符号字符型数组WRITE_RTC_ADDR,用于存储DS1302写操作的日历时钟存储器地址。

  4. unsigned char TIME[7] = {0x50, 0x59, 0x18, 0x22, 0x02, 0x02, 0x22};:定义了一个包含7个元素的无符号字符型数组TIME,用于存储DS1302日历时钟的七个配置参数,包括秒、分、时、日、月、星期、年。

  5. void Init_DS1302_Param():定义了一个无返回值的函数Init_DS1302_Param(),用于初始化DS1302的参数。

  6. Write_Ds1302_Byte(0x8E, 0x00);:调用函数Write_Ds1302_Byte(),向DS1302的控制寄存器地址0x8E写入数据0x00,解除写保护。

  7. for (int i = 0; i < 7; i++) {:for循环,初始化一个整型变量i为0,循环条件为i小于7。

  8. Write_Ds1302_Byte(WRITE_RTC_ADDR[i], TIME[i]);:在循环中调用函数Write_Ds1302_Byte(),向DS1302的写操作日历时钟存储器地址写入对应的时间参数。

  9. Write_Ds1302_Byte(0x8E, 0x80);:再次调用函数Write_Ds1302_Byte(),向DS1302的控制寄存器地址0x8E写入数据0x80,使能写保护。

  10. void Read_Ds1302_Time():定义了一个无返回值的函数Read_Ds1302_Time(),用于读取DS1302中的时分秒信息。

  11. sec = Read_Ds1302_Byte(READ_RTC_ADDR[0]);:调用函数Read_Ds1302_Byte(),从DS1302的地址0x81读取秒钟信息,并存储到变量sec中。

  12. min = Read_Ds1302_Byte(READ_RTC_ADDR[1]);:类似地,从DS1302的地址0x83读取分钟信息,并存储到变量min中。

  13. hour = Read_Ds1302_Byte(READ_RTC_ADDR[2]);:从DS1302的地址0x85读取小时信息,并存储到变量hour中。

  • 28
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木木不迷茫(˵¯͒¯͒˵)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值