找回密码
 立即注册

QQ登录

只需一步,快速开始

基础模块资料库

本帖最后由 lxf 于 2021-5-18 14:32 编辑

基于Arduino使用DS1307高精度时钟模块

产品介绍

DS1307 是一款低功耗,具有56字节非失性RAM的全BCD码时钟日历实时时钟芯片,地址和数据通过两线双向的串行总线的传输,芯片可以提供秒,分,小时等信息,每一个月的天数能自动调整。并且有闰年补偿功能。AM/PM 标志位决定时钟工作于24小时或12小时模式,芯片有一个内置的电源感应电路,具有掉电检测和电池切换功能。

图片1.png

产品参数

1、产品尺寸:27*28*8.4mm
2、DS1307 I2C实时时钟芯片(RTC)
3、 24C32 32K I2C EEPROM储存器
4、 采用CR2032电池,解决带备电池不能读写的问题,可计时一年
5、引出DS1307的时钟引脚,为单片机提供时钟信号,可以级联其他I2C设备
6、控制接口为12C接口,控制接口点评为5V或3.3V,电源建议为5VD
7、产品重量:7.5g

产品特点

1、可对秒/时/分,每月的天数、月份,每周的天数进行记数,并具有闰年补偿功能,记年上限2100
2、56字节非失性的RAM
3、两线串行接口
4、可编程方波输出
5、自动掉电检测和切换电路
6、在电池备份模式下,功耗小于500nA

接线方式
图片2.png
(DS1307高精度时钟模块 )

DS1307高精度时钟模块   <------>   Arduino UNO
               VCC                  <------>            5V
              GND                  <------>          GND
               SCL                   <------>            A5
               SDA                  <------>            A4

基础案例——DS1307高精度时钟模块读取系统时间使用显示器显示

OLED显示屏接线方式
Arduino UNO      <------>   OLED显示屏
      3V3/5V           <------>          VCC
         GND            <------>          GND
         D13             <------>          SCL
         D11             <------>          SDA
          D8              <------>          RES
          D9              <------>           DC
          D10            <------>           CS

Mixly图形化编程程序

第一次上传以下程序,DS1307高精度时钟模块读取上传程序时的系统时间,并在显示屏上显示。

图片6.png

第二次上传以下程序,删除了“RTC设置时日期/时间”模块,DS1307高精度时钟模块在重启后不读取程序上传时的系统时间,读取的是当前的系统时间。

图片7.png
Arduino IDE编程

需要使用到OLED显示屏及DS1307高精度时钟模块的第三方库文件

OLED显示屏第三方库文件链接:
提取码:syr7

DS1307高精度时钟模块第三方库文件链接:
提取码:2aqd

下载后解压,把解压后的三个文件夹“U8g2”、“SoftwareWire”和“RTC”,复制放到Arduino安装包的“libraries”文件夹里面。

图片3.png

图片4.png

微信图片_20210518134844.png

实现这个案例需要上传两次程序,第一次上传以下程序,DS1307高精度时钟模块读取上传程序时的系统时间,并在显示屏上显示。

第一次程序实现代码

  1. #include <RtcDS1307.h>
  2. #include <SoftwareWire.h>
  3. #include <U8g2lib.h>
  4. #include <SPI.h>
  5. SoftwareWire myWire(A4,A5);
  6. RtcDS1307<SoftwareWire> Rtc(myWire);
  7. U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, 10, 9, 8);
  8. void page1() {
  9.   u8g2.setFont(u8g2_font_timR08_tf);
  10.   u8g2.setFontPosTop();
  11.   u8g2.setCursor(0,20);
  12.   u8g2.print(String(String(Rtc.GetDateTime().Year()) + String("-")) + String(String(Rtc.GetDateTime().Month()) + String("-")) + String(Rtc.GetDateTime().Day()));
  13.   u8g2.setCursor(0,40);
  14.   u8g2.print(String(String(Rtc.GetDateTime().Hour()) + String(":")) + String(String(Rtc.GetDateTime().Minute()) + String(":")) + String(Rtc.GetDateTime().Second()));
  15. }
  16. void setup(){
  17.   Rtc.Begin();
  18.   Rtc.SetDateTime(RtcDateTime(__DATE__, __TIME__));//读取上传程序的系统时间
  19.   u8g2.begin();
  20.   u8g2.enableUTF8Print();
  21. }
  22. void loop(){
  23.   u8g2.firstPage();
  24.   do
  25.   {
  26.     page1();
  27.   }while(u8g2.nextPage());
  28. }
复制代码

第二次上传以下程序,删除了“ Rtc.SetDateTime(RtcDateTime(__DATE__, __TIME__))”代码,DS1307高精度时钟模块在重启后不读取程序上传时的系统时间,读取的是当前的系统时间。

第二次程序实现代码

  1. #include <RtcDS1307.h>
  2. #include <SoftwareWire.h>
  3. #include <U8g2lib.h>
  4. #include <SPI.h>
  5. SoftwareWire myWire(A4,A5);
  6. RtcDS1307<SoftwareWire> Rtc(myWire);
  7. U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, 10, 9, 8);
  8. void page1() {
  9.   u8g2.setFont(u8g2_font_timR08_tf);
  10.   u8g2.setFontPosTop();
  11.   u8g2.setCursor(0,20);
  12.   u8g2.print(String(String(Rtc.GetDateTime().Year()) + String("-")) + String(String(Rtc.GetDateTime().Month()) + String("-")) + String(Rtc.GetDateTime().Day()));
  13.   u8g2.setCursor(0,40);
  14.   u8g2.print(String(String(Rtc.GetDateTime().Hour()) + String(":")) + String(String(Rtc.GetDateTime().Minute()) + String(":")) + String(Rtc.GetDateTime().Second()));
  15. }
  16. void setup(){
  17.   Rtc.Begin();
  18.   u8g2.begin();
  19.   u8g2.enableUTF8Print();
  20. }
  21. void loop(){
  22.   u8g2.firstPage();
  23.   do
  24.   {
  25.     page1();
  26.   }while(u8g2.nextPage());
  27. }
复制代码
分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册