arduino控制DS1302

2020-04-14 01:52

Arduino 连接 DS1302时钟模块

注:6楼有阉割DS1302库,只显示时钟,没有日期。可以减小体积。

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

DS1302数据手册可以看这里:

http://www.maxim-ic.com/datasheet/index.mvp/id/2685/t/al

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-0023\\libraries文件夹下面

DS1302.rar (4.53 KB, 下载次数: 60)

例子代码如下:

/*

Arduino 连接 DS1302

代码来源:http://quadpoint.org/projects/arduino-ds1302 增加了串口调整时间代码 */

#include #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, \); break; case 2: strcpy(day, \); break; case 3: strcpy(day, \); break; case 4: strcpy(day, \); break; case 5: strcpy(day, \); break;

case 6: strcpy(day, \); break; case 7: strcpy(day, \); break; }

/* 将日期代码格式化凑成buf等待输出 */

snprintf(buf, sizeof(buf), \, 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(\); 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串口调试器即可看到当前时间。如果需要调整时间的话,只需要在串口输入当前日期时间,以逗号分隔

格式为:

年,月,日,时,分,秒,星期

星期数:Sunday=1,MOnday=2,...Saturday=7

比如,今天是2011年11月17日11时23分40秒星期四 填入2011,11,17,11,22,40,5即可

2011-11-18 13:08:20 上传 下载附件 (58.37 KB)


arduino控制DS1302.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2019届天津市第一中学高三上学期第一次月考英语试题(word版)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: