本帖最后由 lxf 于 2021-5-18 14:32 编辑
产品介绍
DS1307 是一款低功耗,具有56字节非失性RAM的全BCD码时钟日历实时时钟芯片,地址和数据通过两线双向的串行总线的传输,芯片可以提供秒,分,小时等信息,每一个月的天数能自动调整。并且有闰年补偿功能。AM/PM 标志位决定时钟工作于24小时或12小时模式,芯片有一个内置的电源感应电路,具有掉电检测和电池切换功能。
产品参数
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
接线方式 (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高精度时钟模块读取上传程序时的系统时间,并在显示屏上显示。
第二次上传以下程序,删除了“RTC设置时日期/时间”模块,DS1307高精度时钟模块在重启后不读取程序上传时的系统时间,读取的是当前的系统时间。
Arduino IDE编程
需要使用到OLED显示屏及DS1307高精度时钟模块的第三方库文件
OLED显示屏第三方库文件链接: 提取码:syr7
DS1307高精度时钟模块第三方库文件链接: 提取码:2aqd
下载后解压,把解压后的三个文件夹“U8g2”、“SoftwareWire”和“RTC”,复制放到Arduino安装包的“libraries”文件夹里面。
实现这个案例需要上传两次程序,第一次上传以下程序,DS1307高精度时钟模块读取上传程序时的系统时间,并在显示屏上显示。
第一次程序实现代码
- #include <RtcDS1307.h>
- #include <SoftwareWire.h>
- #include <U8g2lib.h>
- #include <SPI.h>
- SoftwareWire myWire(A4,A5);
- RtcDS1307<SoftwareWire> Rtc(myWire);
- U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, 10, 9, 8);
- void page1() {
- u8g2.setFont(u8g2_font_timR08_tf);
- u8g2.setFontPosTop();
- u8g2.setCursor(0,20);
- u8g2.print(String(String(Rtc.GetDateTime().Year()) + String("-")) + String(String(Rtc.GetDateTime().Month()) + String("-")) + String(Rtc.GetDateTime().Day()));
- u8g2.setCursor(0,40);
- u8g2.print(String(String(Rtc.GetDateTime().Hour()) + String(":")) + String(String(Rtc.GetDateTime().Minute()) + String(":")) + String(Rtc.GetDateTime().Second()));
- }
- void setup(){
- Rtc.Begin();
- Rtc.SetDateTime(RtcDateTime(__DATE__, __TIME__));//读取上传程序的系统时间
- u8g2.begin();
- u8g2.enableUTF8Print();
- }
- void loop(){
- u8g2.firstPage();
- do
- {
- page1();
- }while(u8g2.nextPage());
- }
复制代码
第二次上传以下程序,删除了“ Rtc.SetDateTime(RtcDateTime(__DATE__, __TIME__))”代码,DS1307高精度时钟模块在重启后不读取程序上传时的系统时间,读取的是当前的系统时间。
第二次程序实现代码
- #include <RtcDS1307.h>
- #include <SoftwareWire.h>
- #include <U8g2lib.h>
- #include <SPI.h>
- SoftwareWire myWire(A4,A5);
- RtcDS1307<SoftwareWire> Rtc(myWire);
- U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, 10, 9, 8);
- void page1() {
- u8g2.setFont(u8g2_font_timR08_tf);
- u8g2.setFontPosTop();
- u8g2.setCursor(0,20);
- u8g2.print(String(String(Rtc.GetDateTime().Year()) + String("-")) + String(String(Rtc.GetDateTime().Month()) + String("-")) + String(Rtc.GetDateTime().Day()));
- u8g2.setCursor(0,40);
- u8g2.print(String(String(Rtc.GetDateTime().Hour()) + String(":")) + String(String(Rtc.GetDateTime().Minute()) + String(":")) + String(Rtc.GetDateTime().Second()));
- }
- void setup(){
- Rtc.Begin();
- u8g2.begin();
- u8g2.enableUTF8Print();
- }
- void loop(){
- u8g2.firstPage();
- do
- {
- page1();
- }while(u8g2.nextPage());
- }
复制代码 |