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简单获取时间并串口打印