Arduino学习笔记A8 -Arduino 连接 DS1302时钟

来源:本站
导读:目前正在解读《Arduino学习笔记A8 -Arduino 连接 DS1302时钟》的相关信息,《Arduino学习笔记A8 -Arduino 连接 DS1302时钟》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《Arduino学习笔记A8 -Arduino 连接 DS1302时钟》的详细说明。
简介:本文介绍了Arduino学习A8 -Arduino 连接 DS1302时钟过程中所遇到的问题及解决方法的笔记

DS1302 是maxim 美信生产的时钟模块,支持年、月、日、时、分、秒、星期显示。支持为 后备电池涓流充电。可以。跟Arduino 只需要3 条数据连接线即可使用。

DS1302 电路很简单,如果洞洞板自制的话,可以参考下图:

Arduino学习笔记A8 -Arduino 连接 DS1302时钟

连线方法:

CE(DS1302 pin5) -> Arduino D5

IO(DS1302 pin6) -> Arduino D6

SCLK(DS1302 pin7) -> Arduino D7

Vcc2(DS1302 pin1) -> Arduino +5v

GND(DS1302 pin4) -> Arduino GND

Arduino 连接DS1302代码

#include

2

#include

#include

/* 接口定义

CE(DS1302 pin5) -> Arduino D5

IO(DS1302 pin6) -> Arduino D6

SCLK(DS1302 pin7) -> Arduino D7

*/

uint8_t CE_PIN = 5;

uint8_t IO_PIN = 6;

uint8_t SCLK_PIN = 7;

/* 日期变量缓存*/

char buf[50];

char day[10];

/* 串口数据缓存*/

String comdata = "";

int numdata[7] ={0}, j = 0, mark = 0;

/* 创建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);

}

void loop()

{

/* 当串口有数据的时候,将数据拼接到变量comdata */

while (Serial.available() > 0)

{

comdata += char(Serial.read());

delay(2);

mark = 1;

}

/* 以逗号分隔分解comdata 的字符串,分解结果变成转换成数字到numdata[]数组*/

if(mark == 1)

{

Serial.print("You inputed : ");

Serial.println(comdata);

for(int i = 0; i < comdata.length() ; i++)

{

if(comdata[i] == ',' || comdata[i] == 0x10 || comdata[i] == 0x13)

{

j++;

}

else

{

numdata[j] = numdata[j] * 10 + (comdata[i] - '0');

}

}

/* 将转换好的numdata 凑成时间格式,写入DS1302 */

Time t(numdata[0], numdata[1], numdata[2], numdata[3], numdata[4],

numdata[5], numdata[6]);

rtc.time(t);

mark = 0;j=0;

/* 清空comdata 变量,以便等待下一次输入*/

comdata = String("");

/* 清空numdata */

for(int i = 0; i < 7 ; i++) numdata[i]=0;

}

/* 打印当前时间*/

print_time();

delay(1000);

}

提醒:《Arduino学习笔记A8 -Arduino 连接 DS1302时钟》最后刷新时间 2024-03-14 01:09:52,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《Arduino学习笔记A8 -Arduino 连接 DS1302时钟》该内容的真实性请自行鉴别。