查看: 12613|回复: 11

RTC module DS1302时钟模块

[复制链接]
  • TA的每日心情
    开心
    2017-3-1 09:21
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2017-2-21 23:30 | 显示全部楼层 |阅读模式
    Arduino 连接 DS1302时钟模块


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

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

    DS1302数据手册可以看这里:http://www.maxim-ic.com/datasheet/index.mvp/id/2685/t/al

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

    2.gif (5.69 KB, 下载次数: 565)
    下载附件  [url=]保存到相册[/url]
    2011-11-17 12:25 上传



    1.gif (4.75 KB, 下载次数: 527)
    下载附件  [url=]保存到相册[/url]
    2011-11-17 12:25 上传





    连线方法:
    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


    示例代码:

    kittenblock中小学创客名师推荐的图形化编程软件

    
    /*Arduino 连接 DS1302
    代码来源:http://quadpoint.org/projects/arduino-ds1302
    增加了串口调整时间代码
    */
    #include <stdio.h>
    #include <string.h>
    #include <DS1302.h>
    
    /* 接口定义
    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 == ',' || comdata == 0x10 || comdata == 0x13)
                 {
                     j++;
                 }
                 else
                 {
                     numdata[j] = numdata[j] * 10 + (comdata - '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=0;
         }
         
         /* 打印当前时间 */
         print_time();
         delay(1000);
     }
    


    库文件:
    DS1302.zip (6.52 KB, 下载次数: 1202)
  • TA的每日心情
    开心
    2017-3-1 09:21
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2017-2-21 23:30 | 显示全部楼层
  • TA的每日心情
    开心
    2017-3-1 09:21
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2017-2-21 23:35 | 显示全部楼层
    RST即CE,接D5
    DAT即I/O,接D6
    SCLK即CLK,接D7
  • TA的每日心情
    开心
    2017-3-1 09:21
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2017-4-5 16:24 | 显示全部楼层
    学习DS1302硬件时钟模块硬件设计  http://smallxuan2008.blog.163.co ... 489201142763641957/
  • TA的每日心情
    开心
    2017-3-1 09:21
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2017-4-5 16:28 | 显示全部楼层
    英文文章:osoyoo.com/2016/07/26/ds1302_clock_module/
  • TA的每日心情
    无聊
    2019-9-3 11:40
  • 签到天数: 53 天

    [LV.5]常住居民I

    发表于 2017-4-6 08:45 | 显示全部楼层
    本来想买一个的,但现在已经做成联网更新了...
  • TA的每日心情
    开心
    2017-3-1 09:21
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2017-4-13 11:52 | 显示全部楼层

    该用户从未签到

    发表于 2018-1-28 14:34 | 显示全部楼层
    非常棒的资料 谢谢
  • TA的每日心情
    无聊
    2018-12-6 13:19
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2018-11-6 14:51 | 显示全部楼层
    还是很不错的

    该用户从未签到

    发表于 2019-2-21 10:09 | 显示全部楼层
    跟液晶有冲突吗
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    [限时福利]5分钟带你快速了解新一代开发板:M5STACK
    [限时福利]5分钟带你快速
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    天猫精灵接入语音提示找不到该设备?
    天猫精灵接入语音提示找不
    今天又刷了一遍代码,天猫精灵提示 没有找到你要操作的设备! 怎么回事啊??? 折腾
    引入库的问题,不知道怎么叙述 看图吧
    引入库的问题,不知道怎么
    最左边的是主文件 也就是启动的文件 后边三个是引入的 在后边这个文件再引入库就报错
    blinker电源插座
    blinker电源插座
    这台blinker电源插座有blinker控制和手动控制两种工作方式. 1.blinker控制:滑条用于设
    blinker灯、环境传感器套件意见收集
    blinker灯、环境传感器套
    计划春节后推出blinker氛围灯和环境检测套件。 本帖收集相关建议,如若采纳,发红包(
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表