DS1302 时钟使用ESP8266驱动硬件软件代码一条龙

一、硬件购买

1.时钟模块
时钟模块

DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.0V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。
结构
DS1302的引脚排列,其中Vcc2为主电源,VCC1为后备电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。

2.ESP8266开发板
在这里插入图片描述

二、接线方式

ESP8266DS1302
VCCVCC
GNDGND
IO14RST
IO12DAT
IO13CLK

三、代码

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

//时钟模块管脚定义
#define kCePin 14    // 复位引脚 RST
#define kIoPin 12    // 数据引脚 DAT
#define kSclkPin 13  // 时钟引脚 CLK
DS1302 rtc(kCePin, kIoPin, kSclkPin);

// 时间分隔符闪烁标识
bool ShowPoint = true;
//时间和日期交替显示
int showCount = 0;

namespace {

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)";
}
}  // namespace

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

  // 星期几
  const String day = dayAsString(t.day);

  // 格式化时间数据
  char buf[50];

  // snprintf  所需头文件 #include <stdio.h> 函数返回值
  // snprintf(char *str, size_t size, const char *format, ...)
  //将可变参数 “…” 按照format的格式格式化为字符串,然后再将其拷贝至str中。
  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);
}

void showTime() {
  // 从模块获得当前时间
  Time t = rtc.time();
  int h = t.hr;
  int mn = t.min;

  int b0 = h / 10;
  int b1 = h % 10;

  int b2 = mn / 10;
  int b3 = mn % 10;

  ShowPoint = !ShowPoint;
}

void showData() {
  // 从模块获得当前时间
  Time t = rtc.time();
  int m = t.mon;
  int d = t.date;

  int m0 = m / 10;
  int m1 = m % 10;

  int d2 = d / 10;
  int d3 = d % 10;

}  // namespace

void setTime() {
  // 设置初始时间为 2018-1-18,17:28:00 星期五
  Time t(2022, 11, 11, 11, 50, 59, Time::kFriday);
  rtc.time(t);
}

void setup() {
  Serial.begin(115200);
  rtc.writeProtect(false);
  rtc.halt(false);
  // setTime();
  //  printTime();
}

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

  //每隔10s显示一次日期
  // if (showCount <= 10) {
  //   showTime();
  //   showCount++;
  //   delay(1000);
  // } else {
  //   showData();
  //   showCount = 0;
  //   delay(2000);
  // }
}

四、结果展示

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值