Arduino使用DS1302读取时间

在科技爱好者博客原来的文章中,使用树莓派和DS1302链接,来读取实时时间,感兴趣的可以点击查看树莓派使用DS1302实现实时时钟功能。本文教大家在Arduino 上使用DS1302来读取当前时间。

一、DS1302 芯片介绍

DS1302实时时钟模块,内含有一个实时时钟/日历和31 字节静态RAM ,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天数可自动调整。时钟操作可通过AM/PM 指示决定采用24 或12 小时格式。DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:(1)RST 复位(2)I/O 数据线(3)SCLK串行时钟。时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信。DS1302 工作时功耗很低保持数据和时钟信息时功率小于1mW。

更加详细的 DS1302实时时钟模块 介绍可以查看这篇文章: 树莓派使用DS1302实现实时时钟功能

二、Arduino 与DS1302硬件连接

我使用的是DS1302的模块,这样方便连接和使用。

DS1302时钟模块
DS1302时钟模块

VCC连接Arduino 3.3V接口

GND连接 Arduino 接地接口

CLK连接 Arduino 11接口

DAT 连接 Arduino 10接口

RST 连接 Arduino 9接口

三、程序设计

在编写程序前,首先要下载DS1302的库,点击这里下载。

下载完成后,将库文件放在Ardunio的libraries文件夹

之后打开IDE,编写程序,代码如下。

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

namespace {

// Set the appropriate digital I/O pin connections. These are the pin
// assignments for the Arduino as well for as the DS1302 chip. See the DS1302
// datasheet:
//
//   http://datasheets.maximintegrated.com/en/ds/DS1302.pdf
const int kCePin   = 9;  // Chip Enable
const int kIoPin   = 10;  // Input/Output
const int kSclkPin = 11;  // Serial Clock

// Create a DS1302 object.
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() {
  // Get the current time and date from the chip.
  Time t = rtc.time();

  // Name the day of the week.
  const String day = dayAsString(t.day);

  // Format the time and date and insert into the temporary buffer.
  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);

  // Print the formatted string to serial so we can see the time.
  Serial.println(buf);
}

}  // namespace

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

  // Initialize a new chip by turning off write protection and clearing the
  // clock halt flag. These methods needn't always be called. See the DS1302
  // datasheet for details.
  rtc.writeProtect(false);
  rtc.halt(false);

  // Make a new time object to set the date and time.
  // Sunday, September 22, 2020 at 01:38:50.
  Time t(2020, 9, 22, 1, 38, 50, Time::kSunday);

  // Set the time and date on the chip.
  rtc.time(t);
}

// Loop and print the time every second.
void loop() {
  printTime();
  delay(1000);
}

完成后编译下载,打开串口调试工具,可以看到实时时间。

实时时间

原创文章,转载请注明: 转载自科技爱好者博客

本文链接地址: Arduino使用DS1302读取时间 (https://www.lxx1.com/3627)

如果博客对您有帮助,请给我 赞助


热度:542℃

Arduino使用DS1302读取时间》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据