接线方法
VCC–》3.3
GND–》GND
CLK–》7
DAT–》6
RST–》5
DS1802设置时间
#include <stdio.h>
#include <DS1302.h>
namespace {
//设置适当的数字I / O引脚连接。这些是针
// Arduino的指配以及DS1302芯片的指配。见DS1302
//数据表:
//
// http://datasheets.maximintegrated.com/en/ds/DS1302.pdf
const int kCePin = 5 ; //芯片启用
const int kIoPin = 6 ; //输入/输出
const int kSclkPin = 7 ; //串行时钟
//创建DS1302对象。
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,以便我们可以看到时间。
Serial.println(buf);
}
} //命名空间
void setup() {
Serial.begin(9600);
//通过关闭写保护并清除来初始化新芯片
//时钟停止标志。不必总是调用这些方法。见DS1302
//数据表了解详情。
rtc.writeProtect(false);
rtc.halt(false);
//创建一个新的时间对象来设置日期和时间。
// 2013年9月22日星期日01:38:50
Time t(2013, 9, 22, 1, 38, 50, Time::kSunday);
//在芯片上设置时间和日期。
rtc.time(t);
}
//每秒循环并打印时间。
void loop() {
printTime();
delay(1000);
}
没啥卵用的,RAM操作方法 (来自搬砖人员的自嘲)
#include <stdio.h>
#include <DS1302.h>
namespace {
//设置适当的数字I / O引脚连接。这些是针
// Arduino的指配以及DS1302芯片的指配。见DS1302
//数据表:
//
// http://datasheets.maximintegrated.com/en/ds/DS1302.pdf
const int kCePin = 5 ; //芯片启用
const int kIoPin = 6 ; //输入/输出
const int kSclkPin = 7 ; //串行时钟
DS1302 rtc(kCePin, kIoPin, kSclkPin);
} //命名空间
void setup() {
Serial.begin(9600);
rtc.writeProtect(false);
//使用字节接口清除所有RAM字节。
for (int i = 0; i < DS1302::kRamSize; ++i) {
rtc.writeRam(i, 0x00);
}
//使用批量接口编写字符串。
static const char kHelloWorld[] = "hello world";
rtc.writeRamBulk((uint8_t*)kHelloWorld, sizeof(kHelloWorld) - 1);
}
void loop() {
char buf[32];
//使用字节界面将RAM字节值打印为十六进制。
for (int i = 0; i < DS1302::kRamSize; ++i) {
snprintf(buf, sizeof(buf), "[%02X]", rtc.readRam(i));
Serial.print(buf);
}
Serial.println();
//使用批量接口将RAM字节值打印为ASCII。
uint8_t ram[DS1302::kRamSize];
rtc.readRamBulk(ram, DS1302::kRamSize);
Serial.println((const char*)ram);
delay(3000);
}