【Arduino】使用DS1302时钟模块搭配TM1637四位数码管制作简易电子钟

  • 材料准备
  • DS1302时钟模块
    • DS1302芯片简介
    • DS1302时钟模块简介
  • TM1637四位数码管简介
  • 部分接线图
  • Arduino IDE代码
  • 完成效果
  • 注意事项

材料准备

① Arduino UNO R3主板(仅供参考)
② DS1302时钟模块
③ TM1637四位数码管
④ 面包板
⑤ 杜邦线若干

DS1302时钟模块

DS1302芯片简介

DS1302可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。

引脚 说明
Vcc2 主电源(2.0V ~ 5.5V),当电压比Vcc1高0.2V时使用主电源
Vcc1 备用电源,当主电源切断或电压比Vcc2高时使用备用电源供电
GND 接地
SCLK 输入引脚,时钟信号输入
I/O 双向通信引脚,内置有40kΩ的下拉电阻
CE 输入引脚,芯片进行读写时必须保持高电平,内置有40kΩ的下拉电阻
X1、 X2 需要用一个标准的32.768kHz石英晶体相连

DS1302时钟模块简介


当然,如果我们使用集成有DS1302 芯片的时钟模块,那就变得简便了不少。本次使用的模块已经用32.768kHz的石英晶体把X1、X2相连,并使用CR2032纽扣电池作备用电源。
当主电源被切断使用并备用电源后,若重新接通主电源,时钟信息会被刷新

引脚 说明
Vcc 主电源,接+5V电源
GND 接地
CLK 与DS1302的SCLK相连,时钟信号输入
DAT 与DS1302的I/0相连,双向数据引脚
RST 与DS1302的CE相连,读写需保持高电平

TM1637四位数码管简介

引脚 说明
CLK 时钟信号输入
DIO 数据输入/输出
VCC 接+5V电源
GND 接地

部分接线图

Arduino IDE代码

代码调用了 Rtc_by_Makuna 和 TM1637_Driver 两个库
两者皆可在Arduino IDE的管理库中搜索添加

参考库的示例程序,编写代码

#include <TM1637.h>
#include <ThreeWire.h>
#include <RtcDS1302.h>// configurations
// TM1637 DIO Pin  3
// TM1637 CLK Pin  2
// DS1302 CLK/SCLK 4
// DS1302 DAT/IO   5
// DS1302 RST/CE   6
// DS1302 VCC      5v
// DS1302 GND      GNDTM1637 tm(2,3); //定义针脚
ThreeWire myWire(5,4,6); // DAT, CLK, RST
RtcDS1302<ThreeWire> Rtc(myWire);void setup() {tm.init();  //初始化tm1637tm.setBrightness(1);  //设置亮度为 1 Serial.begin(9600);Serial.print("已获取系统时间并设定为: ");Serial.print(__DATE__);Serial.print(" ");Serial.println(__TIME__);Rtc.Begin();RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);printDateTime(compiled);Serial.println();RtcDateTime now = Rtc.GetDateTime();if (now < compiled) {Rtc.SetDateTime(compiled);}else if (now > compiled) {Rtc.SetDateTime(compiled);}else if (now == compiled) {Serial.println("当前时间和编译时相同");}
}void loop() {tm.switchColon();  //TM1637中间的点闪烁RtcDateTime now = Rtc.GetDateTime();String Timestr = printDateTime(now);Serial.println();if (!now.IsValid())  //若now没有被实例化{Serial.println("获取时间失败,检查RTC是否连接");}int c0 = Timestr[15]-48; //ASCII码转数字int c1 = Timestr[14]-48;int c2 = Timestr[12]-48;int c3 = Timestr[11]-48;tm.display(c3, false, false, 3);tm.display(c2, false, false, 2);tm.display(c1, false, false, 1);tm.display(c0, false, false, 0);delay(1000);
}#define countof(a) (sizeof(a) / sizeof(a[0]))
String printDateTime(const RtcDateTime& dt)
{char datestring[20];snprintf_P(datestring, countof(datestring),PSTR("%02u/%02u/%04u %02u:%02u:%02u"),dt.Month(),dt.Day(),dt.Year(),dt.Hour(),dt.Minute(),dt.Second() );Serial.print(datestring);return (datestring);
}

完成效果

注意事项

需要注意的是,校准电子钟会调用电脑的系统时间,因此要确保电脑系统时间已校准;若需重新校准电子钟只能重新上传程序,不能通过Arduino上的重新执行程序按钮校准;当主电源被切断并使用备用电源后,若重新接通主电源,时钟信息会被刷新。

【Arduino】使用DS1302时钟模块搭配TM1637四位数码管制作简易电子钟相关推荐

  1. 【雕爷学编程】Arduino动手做(73)---TM1637四位数码管

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...

  2. 【Arduino】ESP8266DS1302时钟模块

    前言 ​ ESP8266基于Arduino IDE的DS1302时钟模块使用,的过程记录.DS1302时钟模块就不详细介绍了,网上还是有很多资料的,这里只说如何快速上手. 下载文件 代码理解 实际测试 ...

  3. Arduino UNO+DS1302+74HC595联级+8位数码管时钟+Proteus仿真

    Arduino UNO+DS1302+74HC595联级+8位数码管时钟+Proteus仿真 最新篇<Arduino UNO+DS1302+74HC595联级+8位数码管时钟+Proteus仿真 ...

  4. 蓝桥杯单片机之DS1302时钟模块的使用

    蓝桥杯单片机之DS1302时钟模块的使用 DS1302简介 SPI串口简介 BCD码 阅读手册获取寄存器信息 日历时钟寄存器 控制字 将手册中的数据进行分析可得 完整代码示例: 总结 DS1302简介 ...

  5. 基于51单片机、DS1302时钟模块的电子闹钟设计

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.设计原理 1.DS1302介绍 2.闹钟音乐播放原理 二.程序设计 1.DS1302.h 2.ds1302.c 3.mu ...

  6. 【Arduino】温湿度传感器(DHT11)控制设计 四位数码管,LCD1602,带蜂鸣器、LED灯报警,串口输入设定阈值

    @[TOC]( [Arduino]温湿度传感器(DHT11)控制设计 四位数码管,LCD1602,带蜂鸣器.LED灯报警,串口输入设定阈值 ) 一.实验器材 UNO控制板:1块 共阳极四位数码管:1个 ...

  7. 「雕爷学编程」Arduino动手做(29)——DS1302时钟模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...

  8. Arduino使用TM1637四位数码管

    index 1. 简介 引脚 2. Grove - 4-Digit Display Library 2.1类中比较实用的函数有: 2.1.1 库中提供了三个示例 2.2 库文件及帮助 2.3 利用tm ...

  9. arduino与DS1302时钟调试失败的分析

    前两天测试了时钟模块,但是,一直失败,能读取时间,但是设置不了时间,所以.这次我查了很多资料,发现好像是信号线的问题,线太长,数据收到干扰, 资料如下http://www.51hei.com/bbs/ ...

  10. DS1302时钟模块

    DS1302时钟比起DS18B20而言要简单的多. 需要注意的大概三点: 1. 写入时分秒 void set_time(unsigned char shi, unsigned char fen ,un ...

最新文章

  1. 【Docker】容器的几种网络模式
  2. 5G NGC — 关键技术 — R15 SBA
  3. Swift: 可变参数
  4. poj 1716 差分约束
  5. excel插入页码_Excel里毫不起眼的页眉页脚,居然有这3种高能用法!
  6. C++:const VS define
  7. 如何安装Windows7多语言支持
  8. LeetCode 357. Count Numbers with Unique Digits
  9. mysql导出表到新建_用navicat导出mysql的数据库后,再用navicat导入到新建的数据库,报错。...
  10. 主流JS框架中DOMReady事件的实现
  11. stm32 串口2空闲中断死机_STM32F373 串口空闲中断问题
  12. chrome Flash Player离线安装包下载
  13. 数据库mysql去重_MySQL数据库去重 SQL解决
  14. layui 确认,取消弹窗
  15. html实现文字在表格上方左侧,html,表格,左对齐.doc
  16. 判断单链表是否中心对称算法
  17. Python每日一练-----快乐数
  18. 遭遇XP-664129A8.EXE
  19. 360P2建html网站,如何自己建网站
  20. Eclipse如何安装lombok插件

热门文章

  1. Adobe Reader安装错误150120的解决
  2. 第15课:JSP动作 Jsp forward动作(JSP教程 JSP入门实战教程 黄菊华Java网站开发系列教程)
  3. 基于php旅游网站的设计与实现
  4. 基于PHP的网上购物网站设计(含源文件)
  5. 计算机的超级终端程序无法使用,超级终端怎么用?
  6. 蓝桥杯矩阵求和_刷蓝桥杯官网习题,准备蓝桥杯的小伙伴,一起来交流吧(✪ω✪)。(2月27日更新)...
  7. SQL Server 2005 无法连接服务器(error:10061)
  8. oracle数据库架构视频教程,Oracle数据库体系架构_oracle架构_oracle学习视频_oracle数据库_课课家...
  9. 写在网管员世界杂志更名之际
  10. Java中使用native2ascii工具处理.properties文件