Arduino: ESP32 驱动 DS1302 (时钟模块)(13)

目的

使用 DS1302 模块实现时钟功能

主要函数

DS1302::DS1302(const uint8_t ce_pin, const uint8_t io_pin, const uint8_t sclk_pin) 开启 DS1302 的实例,并初始化DS1302

参数 功能
ce_pin 对应连接 RST 的引脚
io_pin 对应连接 DAT 的引脚
sclk_pin 对应连接 CLK 的引脚

Time::Time(const uint16_t yr, const uint8_t mon, const uint8_t date, const uint8_t hr, const uint8_t min, const uint8_t sec, const Day day)创建时间实例,并设置的时间

参数 功能
yr
mon
date
hr
min
sec
day 星期几

day 有它对应的构造

public:
    enum Day
    {
        kSunday = 1,
        kMonday = 2,
        kTuesday = 3,
        kWednesday = 4,
        kThursday = 5,
        kFriday = 6,
        kSaturday = 7
    };

使用示例

#include <stdio.h>
#include <DS1302.h>

namespace {

const int kCePin   = 26;  // 复位引脚
const int kIoPin   = 17;  // 数据引脚
const int kSclkPin = 16;  // 时钟引脚

DS1302 rtc(kCePin, kIoPin, kSclkPin);

// 获取星期
String dayAsString(const Time::Day day) {
  switch (day) {
    case Time::kSunday: return "Sunday";
    case Time::kMonday: return "Monday";
    case Time::kTuesday: return "Tuesday";
    case Time::kWednesday: return "Wednesday";
    case Time::kThursday: return "Thursday";
    case Time::kFriday: return "Friday";
    case Time::kSaturday: return "Saturday";
  }
  return "(unknown day)";
}

void printTime() {
  // 从模块获得当前时间
  Time t = rtc.time();

 
  const String day = dayAsString(t.day);

  // 格式化时间数据
  char buf[50];
  snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d",
           day.c_str(),
           t.yr, t.mon, t.date,
           t.hr, t.min, t.sec);
  Serial.println(buf);
}

}  // namespace

void setup() {
  Serial.begin(9600);
   rtc.writeProtect(false);
   rtc.halt(false);

   // 设置初始时间
   Time t(2019, 6, 18, 16, 40, 40, Time::kTuesday);
   rtc.time(t);
}

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

资料

代码、库函数、原理图

1 个赞

最好每个文章都有一个小视频 ,1-2分钟,显示出运行环境与结果,可以上传到腾讯视频 ,再在贴子中给出链接。

可以补点小视频,群里发出来给我一份~我帮你补进来