【花雕学编程】Arduino动手做(245)---DS3231高精度时钟模块之在 LCD 上显示 RTC 模块的时间和日期

在这里插入图片描述

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

** 【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十五:DS3231 高精度时钟模块 IIC/I2C接口 实时计时传感器**

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
实验模块接线示意图

在这里插入图片描述

【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十五:DS3231 高精度时钟模块 IIC/I2C接口 实时计时传感器
项目之十二:在 LCD 上显示 RTC 模块的时间和日期

实验模块接线示意图

在这里插入图片描述
在这里插入图片描述

【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十五:DS3231 高精度时钟模块 IIC/I2C接口 实时计时传感器
项目之十二:在 LCD 上显示 RTC 模块的时间和日期

实验开源代码

/*
  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百四十五:DS3231 高精度时钟模块  IIC/I2C接口 实时计时传感器
  项目之十二:在 LCD 上显示 RTC 模块的时间和日期
*/

#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>

#define LCD_ADDRESS 0x27    // LCD I2C 地址
#define LCD_COLUMNS 16      // LCD 显示屏的列数
#define LCD_ROWS 2          // LCD 显示屏的行数

LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLUMNS, LCD_ROWS);  // 创建 LCD 显示对象
RTC_DS3231 rtc;  // 使用 Adafruit RTClib 创建 DS3231 RTC 实例

void setup() {
    Serial.begin(9600);    // 初始化串口通信
    Wire.begin();          // 启动 I2C 通信
    lcd.init();            // 初始化 LCD 显示屏
    lcd.backlight();       // 开启 LCD 背光
    lcd.clear();           // 清屏

    // 初始化 RTC
    if (!rtc.begin()) {
        Serial.println("RTC 初始化失败!");
        while (1);  // 停止执行
    }

    // 如果 RTC 断电,则恢复默认时间
    if (rtc.lostPower()) {
        Serial.println("RTC 断电!正在设置时间...");
        rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    }
}

void loop() {
    DateTime dt = rtc.now();  // 获取当前时间

    // 显示时间
    lcd.setCursor(4, 0);
    lcd.print(dt.hour());
    lcd.print(":");
    lcd.print(dt.minute());
    lcd.print(":");
    lcd.print(dt.second());

    // 显示日期
    lcd.setCursor(3, 1);
    lcd.print(dt.year());
    lcd.print("-");
    lcd.print(dt.month());
    lcd.print("-");
    lcd.print(dt.day());

    // 串口输出时间
    Serial.print("当前时间: ");
    Serial.print(dt.year()); Serial.print("-");
    Serial.print(dt.month()); Serial.print("-");
    Serial.print(dt.day()); Serial.print(" ");
    Serial.print(dt.hour()); Serial.print(":");
    Serial.print(dt.minute()); Serial.print(":");
    Serial.println(dt.second());

    delay(500);  // 每 500 毫秒更新一次
}

代码简单解读

这段代码使用 DS3231 实时时钟(RTC) 和 LCD 显示屏 通过 I2C 通信 显示当前时间和日期,核心逻辑如下:

  1. 初始化硬件
    ✅ Wire.begin(); → 启动 I2C 通信
    ✅ rtc.begin(); → 初始化 DS3231 RTC
    ✅ lcd.init(); → 初始化 LCD 显示屏
    ✅ lcd.backlight(); → 开启 LCD 背光

  2. 设置 RTC 时间
    ✅ rtc.lostPower(); → 如果 RTC 断电,则恢复默认时间
    ✅ rtc.adjust(DateTime(F(DATE), F(TIME))); → 自动设置 RTC 时间为编译时的系统时间

  3. 获取当前时间
    ✅ rtc.now(); → 从 RTC 获取当前时间
    ✅ 格式化时间为 “HH:MM:SS” 形式
    ✅ 格式化日期为 “YYYY-MM-DD” 形式

  4. 显示内容在 LCD 屏幕上
    ✅ 时间 → lcd.print(dt.hour()); 等格式化
    ✅ 日期 → lcd.print(dt.year()); 等格式化

  5. 采集间隔
    ✅ delay(500); → 每 500 毫秒更新一次时间

这段代码让 LCD 显示当前时间,并持续更新。

实验串口返回情况

在这里插入图片描述

实验场景图

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值