当前位置: 首页 > news >正文

学习笔记|arduino uno r3|DS1307时钟芯片|Atmega328P| 设置时间|读取时间|无源晶振:DS1307时钟芯片实验

目录

芯片pinout:

实验器件:

实验连线

解决AVR 架构不支持 printf() 方法

使用GetTimeAndDate.ino设置时间:

使用SetTimeAndDate.ino设置时间:


芯片pinout:

DS1307 是美国 DALLAS 公司推出的 I 总线接口实时时钟芯片,它可独立于 CPU 工作,不受 CPU主品振及其电容的影响,且计时准确,月累积误差一般小于 10秒。芯片还具有主电源掉电情况下的时钟保护电路,DS1307的时钟靠后备电池维持工作,拒绝 CPU 对其读出和写入访问。同时还具有备用电源自动切换控制电路,因而可在主电源掉电和其它些恶劣环境场合中保证系统时钟的定时准确性DS1307 具有产生秒、分、时、曰、月、年等功能,且具有闰年自动调整功能。

  • 实验器件:

■ DS1307:1 个

■ 无源晶振:32.768K 1个

■ 多彩面包板实验跳绳:若干

  • 实验连线

SCL-A5

SDA-A4

SQW/OUT-悬空

  • 解决AVR 架构不支持 printf() 方法

  • AVR 架构限制:传统的 Arduino 板(如 Uno、Nano)默认的 Serial 对象(属于 HardwareSerial 类)不支持 printf() 方法。
  • ESP32/ESP8266 支持:部分开发板(如 ESP32、ESP8266)的 Serial 类已扩展了 printf(),可直接使用。

增加库:

#include <Bonezegei_Printf.h>

增加代码:

//param Stream

Bonezegei_Printf debug(&Serial);

使用示例:

debug.printf("Time %02d:%02d:%02d ", rtc.getHour(), rtc.getMinute(), rtc.getSeconds());

没有DS1307的库需先安装库文件:Bonezegei_DS1307Bonezegei_Printf

  • 设置时间和读取时间代码

使用GetTimeAndDate.ino设置时间:

/*

  Get Time And Date

  Author: Bonezegei (Jofel Batutay)

  Date: Feb 2024

*/



#include <Bonezegei_DS1307.h>

#include <Bonezegei_Printf.h>



//param Stream

Bonezegei_Printf debug(&Serial);



Bonezegei_DS1307 rtc(0x68);



void setup() {

  Serial.begin(115200);

  rtc.begin();

}



void loop() {



  if (rtc.getTime()) {

    debug.printf("Time %02d:%02d:%02d ", rtc.getHour(), rtc.getMinute(), rtc.getSeconds());



    if (rtc.getFormat() == 12) {  // returns 12 or 24 hour format



      if (rtc.getAMPM()) {  //return 0 = AM  1 =PM

        Serial.print("AM  ");

      } else {

        Serial.print("PM  ");

      }

    }



    debug.printf("Date %02d-%02d-%d \n", rtc.getMonth(), rtc.getDate(), rtc.getYear());

  }

 

  delay(1000);

}

使用SetTimeAndDate.ino设置时间:

/*

  Set Time And Date

  Author: Bonezegei (Jofel Batutay)

  Date: Feb 2024

*/



#include <Bonezegei_DS1307.h>

#include <Bonezegei_Printf.h>



//param Stream

Bonezegei_Printf debug(&Serial);



Bonezegei_DS1307 rtc(0x68);



void setup() {

  Serial.begin(115200);

  rtc.begin();

  rtc.setFormat(24);        //Set 12 Hours Format

  rtc.setAMPM(1);           //Set AM or PM    0 = AM  1 =PM

  rtc.setTime("21:18:00");  //Set Time    Hour:Minute:Seconds

  rtc.setDate("3/20/25");   //Set Date    Month/Date/Year

}



void loop() {



  if (rtc.getTime()) {

    debug.printf("Time %02d:%02d:%02d ", rtc.getHour(), rtc.getMinute(), rtc.getSeconds());



    if (rtc.getFormat() == 12) {  // returns 12 or 24 hour format



      if (rtc.getAMPM()) {  //return 0 = AM  1 = PM

        Serial.print("PM  ");

      } else {

        Serial.print("AM  ");

      }

    }



    debug.printf("Date %02d-%02d-%d \n", rtc.getMonth(), rtc.getDate(), rtc.getYear());

  }



  delay(1000);

}

注意:使用中电源不能断开,否则重新上电后从初始开始显示:

Time 00:00:10 Date 01-01-0,单独芯片不具备时间存储功能。

相关文章:

  • 2025 使用docker部署centos7容器并且需要centos7容器能通过ssh登录SSH 登录的CentOS7容器
  • Linux CentOS7 安装 ffmpeg教程
  • 【总结】常用API架构类型
  • C++异常处理时的异常类型抛出选择
  • 2021-06-15 C逆序存入数组的元素
  • 韩顺平 一周学会Linux | Linux 实操篇-定时任务调度
  • 使用C#创建安装Windows服务程序
  • 第一个Spring程序基于Spring6
  • ROS从小白到入门:知识点速通与面试指南
  • CatFlag 原理
  • 密码学(Public-Key Cryptography and Discrete Logarithms)
  • Docker 部署 XXL-JOB
  • 粘包半包以及Netty的解决办法
  • HCITool 的详细介绍、安装指南及使用说明
  • 合批Batching
  • MySQL 中利用 mysql.help_topic 实现行转列的深入剖析
  • 物理标签与逻辑标签的区别
  • 第七节 MATLAB数据类型
  • Pytorch使用手册—自定义 C++ 和 CUDA 扩展(专题五十二)
  • Altium Design元件管理笔记
  • 微软将在全球裁员6000人,目标之一为减少管理层
  • 上海市重大工程一季度开局良好,崇明线等按既定计划加快建设
  • 泽连斯基:将带领乌代表团前往土耳其,已准备好与普京会谈
  • 上海团队在医学顶刊连发两文,率先提出“证据污染”循证概念
  • 中国科考船在钓鱼岛附近活动,外交部:完全是中国主权权利范围内的事
  • 我国7名优秀护理工作者荣获第50届南丁格尔奖