1. 概述
DS1302 是DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31 字节静态RAM ,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天数可自动调整。时钟操作可通过AM/PM 指示决定采用24 或12 小时格式。DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:(1)RST 复位(2)I/O 数据线(3)SCLK串行时钟。时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信。DS1302 工作时功耗很低保持数据和时钟信息时功率小于1mW。模块自带2个定位孔,方便你将模块固定在其他设备。
2. 规格参数
工作电压:3.3V-5V(DC)
接口:5PIN接口
重量:2.4g
工作温度:0°—70°
备用电池为CR1220,电压3V,电流40mAh,非可充电电池。理论数据保持时间大于1年
3. 连接图
4. 测试代码
#include <stdio.h>
#include <string.h>
#include <DS1302.h>
/* 接口定义
CE(DS1302 pin5) -> Arduino D5 (RST)
IO(DS1302 pin6) -> Arduino D6 (DAT)
SCLK(DS1302 pin7) -> Arduino D7 (CLK)
*/
uint8_t CE_PIN = 5;
uint8_t IO_PIN = 6;
uint8_t SCLK_PIN = 7;
/* 日期变量缓存 */
char buf[50];
char day[10];
/* 创建 DS1302 对象 */
DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);
void print_time()
{
/* 从 DS1302 获取当前时间 */
Time t = rtc.time();
/* 将星期从数字转换为名称 */
memset(day, 0, sizeof(day));
switch (t.day) {
case 1:
strcpy(day, “Sunday”);
break;
case 2:
strcpy(day, “Monday”);
break;
case 3:
strcpy(day, “Tuesday”);
break;
case 4:
strcpy(day, “Wednesday”);
break;
case 5:
strcpy(day, “Thursday”);
break;
case 6:
strcpy(day, “Friday”);
break;
case 7:
strcpy(day, “Saturday”);
break;
}
/* 将日期代码格式化凑成buf等待输出 */
snprintf(buf, sizeof(buf), “%s %04d-%02d-%02d %02d:%02d:%02d”,
day,
t.yr, t.mon, t.date,
t.hr, t.min, t.sec);
/* 输出日期到串口 */
Serial.println(buf);
}
void setup()
{
Serial.begin(9600); //设置波特率
rtc.write_protect(false);
rtc.halt(false);
/*设置开始时间为2017年5月9日8点50分37秒星期二 */
Time t(2017,5, 9, 8, 50, 37, 3);
rtc.time(t);
}
/* 每一秒循环输出时间 */
void loop()
{
print_time();
delay(1000);
}
5. 测试结果
按照上图接好线,烧录好代码,上电后,通电后,我们可在软件串口监视器中看到当前时间日期,并计时,如下图。
6. 相关库文件链接
https://pan.baidu.com/s/1mBHuL054Jhy9LBvqb01Bfg
提取码:45c7