Arduino 实时时钟DS1302模块

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino 实时时钟DS1302模块相关的知识,希望对你有一定的参考价值。

  • DS1302模块
    在这里插入图片描述
  • 开发板选择Arduino uno板子
  • 所使用的库:国内镜像地址:https://codechina.csdn.net/mirrors/msparks/arduino-ds1302?utm_source=csdn_github_accelerator
  • GitHub地址:https://github.com/msparks/arduino-ds1302
  • 引脚定义:DS1302 rtc(2, 3, 4); //对应DS1302的RST–2,DAT–3,CLK–4

操作分两步:
1.设置ds1302为现在的时间。(烧写第一遍程序)
2.注释掉setup里面的设置函数initRTCTime(),重新上传代码。(烧写第二遍程序)

  • 程序代码
#include <DS1302.h>

DS1302 rtc(2, 3, 4); //对应DS1302的RST,DAT,CLK

void initRTCTime(void)//初始化RTC时钟
{
  rtc.writeProtect(false); //关闭写保护
  rtc.halt(false); //清除时钟停止标志
  Time t(2021, 7, 15, 10, 34, 50, 5); //创建时间对象 最后参数位,为星期数据,周日为1,周一为2,周二为3,周四为5以此类推.
  rtc.time(t);//向DS1302设置时间数据
}

void printTime()//打印时间数据
{
  Time tim = rtc.time(); //从DS1302获取时间数据
  char buf[50];
  snprintf(buf, sizeof(buf), "%04d-%02d-%02d %02d:%02d:%02d Today:%d",
           tim.yr, tim.mon, tim.date,
           tim.hr, tim.min, tim.sec ,tim.day-1);
//获取星期时,需要做减一计算,由前面的星期映射关系决定的
  Serial.println(buf);
}

void setup() {
  Serial.begin(115200);

  //新模块上电需要设置一次当前时间,
  //下载完成后需屏蔽此函数再次下载,否则每次上电都会初始化时间数据
 // initRTCTime();

}

void loop() {
  printTime();
  delay(1000);
}

在这里插入图片描述

  • 总结

如果程序烧录进去后,串口监视输出的时间没有走动,可能是ds1302模块没有正常工作导致的,可以尝试拨动旁边的晶振,看看串口输出数据是否会变化和跳动,大部分ds1302不能正常工作的原因是由于那个32.768KHZ的晶振没有工作导致的,如果拨动没有反应可以尝试更换相同频率的晶振来测试。

以上是关于Arduino 实时时钟DS1302模块的主要内容,如果未能解决你的问题,请参考以下文章

Arduino UNO + DS1302简单获取时间并串口打印

玩转 RTC时钟库 DS1302

Arduino UNO + DS1302利用31字节静态RAM存储数据并串口打印

基于51单片机+DS1302时钟模块+LCD1602显示

基于51单片机+DS1302时钟模块+LCD1602显示

基于51单片机+DS1302时钟模块+LCD1602显示