当前位置:网站首页>【Arduino连接时钟模块在LCD1602上显示时间】
【Arduino连接时钟模块在LCD1602上显示时间】
2022-08-02 03:29:00 【WENJIE科技】
Arduino连接时钟模块在LCD1602上显示时间
前言
时间在当今社会至关重要,对于某些电子产品,时间至关重要;就像我们一样,他们需要一种方法来记录时间和精确的时间。那么,电子产品是如何做到这一点的呢?实时时钟或 RTC 是嵌入在集成电路或 IC 中的计时设备。答案是 DS1307。许多时间关键的应用程序和设备都依赖它,包括服务器、GPS 和数据记录器。
关于 DS1307
DS1307 是具有 56 字节 SRAM 的电池供电时钟/日历。时钟/日历以秒、分钟、小时、天、日期、月和年显示数据。每个月的结束日期都会自动更改,特别是对于少于 31 天的月份。
它们以集成电路 (IC) 的形式出现,可以像时钟一样控制时间,像日历一样控制日期。RTC 的主要优势在于它有一个备用电池系统,即使断电也能保持时钟/日历正常工作。RTC 需要少量电力才能保持活跃。这些 RTC 可以在各种应用中找到,包括嵌入式设备和计算机主板。
DS1307 引脚排列
SQ==》该引脚可以编程为发射四种方波频率之一:1Hz、4kHz、8kHz 或 32kHz。
DS==》如果您的模块在电池座旁边安装了 DS18B20 温度传感器,则该引脚设计用于输出温度信息(标记为 U1)。
SCL==》是 I2C 接口的时钟输入,用于同步串行接口上的数据传输。
SDA==》是 I2C 串行接口的数据输入/输出。
VCC==》该引脚为模块供电。它的范围可以从 3.3 到 5.5 伏。
GND==》是接地引脚。
BAT==》是任何标准 3V 锂电池或其他能源的备用电源输入,允许小工具在主电源丢失时保持精确的时间。
DS1307 模块元件
DS1307 RTC 模块包括 DS3107 芯片正常运行所需的所有板载组件。此外,它还有一个 20mm 3V 锂纽扣电池的支架。该模块可以使用任何 CR2032 电池。让我们一一浏览模块的每个组件。DS1307 记录秒、分、小时、日和月。该芯片在每个月底重置其秒、分、小时和日期。时间可以用 AM 和 PM 的 12 小时格式或 24 小时格式显示。
32kHz 晶体振荡器:
DS1307 芯片需要一个 32KHz 外部晶体振荡器才能工作(计时)。因此,RTC 模块有一个 32KHz 的外部晶振。但是,这个 32KHz 晶振存在一个问题:环境温度的变化会改变晶振的振荡频率。32KHz的外部晶体振荡频率的差异是微不足道的。但是,从长远来看,这是一个错误。它会导致每月时钟漂移 2-3 分钟。
板载 24C32 EEPROM:
DS1307 RTC 模块还具有板载 24C32 EEPROM。该 EEPROM 具有 32 字节容量,仅允许区域性读写操作。为基于警报的项目使用 RTC 模块可以利用此内存来节省时间。例如,我们希望每天早上 8:00 起床,我们可以将这个时间值记录在 EEPROM 中,只要时间等于保存的值,就会响起警报。
这些 EEPROM 芯片使用 I2C 接口与 Arduino 等微控制器连接。因此,它使用与 DS1307 相同的 I2C 总线。为了与同一 I2C 总线上的 EEPROM (o 0x50 Hex) 和 DS1307 芯片进行通信,为它们设置了不同的从地址。
备用电池:

用于连接 CR2032 线圈单元的支架位于 RTC 模块的背面。即使连接到 DS1307 的主电源出现故障,这种备用电池也能保持精确的时间。该芯片有一个功率传感器电路,可检测主电源并在主电源丢失时切换到备用线圈单元。
DS18B20 传感器:
外部 DS18B20 数字温度传感器可以连接到该模块上的空插槽。右下角的三个空引脚用作 DS18B20 传感器的占位符,其输出可通过 RTC 模块的 DS 引脚接收。
DS1307 传感器模块原理图

对 DS1307 进行编程和设置时间
在下面的设置中将 DS1307 模块连接到 Arduino 是在模块中设置时间所需的全部内容。
完成上述连接后,您需要将 Arduino Uno 连接到您的 PC,打开 Arduino IDE,并安装 Arduino DS1307 Time Set Library。打开 Arduino IDE 并从菜单栏中选择 Library Manager。现在查找 RTCLib 并获取最新版本,如下图所示。
代码很容易理解。时间将设置并显示在串行监视器上。
rtc.adjust(DateTime(F(__DATE__),F(__TIME__)));
在这一行中,rtc 对象根据您机器上的时间调整时间。它将修改您计算机上的时间。
rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
您可以通过为函数提供以下日期时间值来手动设置此行的时间:年、月、日、小时、分钟和秒。在下面的代码中,我们将设置系统的时间。结果,这一行被注释掉了。
#include <RTClib.h>
#include <Wire.h>
RTC_DS3231 rtc;
char t[32];
void setup()
{
Serial.begin(9600);
Wire.begin();
rtc.begin();
rtc.adjust(DateTime(F(__DATE__),F(__TIME__)));
//rtc.adjust(DateTime(2019, 1, 21, 5, 0, 0));
}
void loop()
{
DateTime now = rtc.now();
sprintf(t, "%02d:%02d:%02d %02d/%02d/%02d", now.hour(), now.minute(), now.second(), now.day(), now.month(), now.year());
Serial.print(F("Date/Time: "));
Serial.println(t);
delay(1000);
}
现在我们知道如何在模块中设置时间了,让我们用它和 LCD 来制作一个简单的时钟
在 LCD 上显示时间的代码
Wire.h用于通过 I2C 与模块连接,LiquidCrystal_I2C.h用于在 LCD 显示屏上显示时间,RTClib.h 用于设置和格式化显示屏上的时间。
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
此行设置 16x2 LCD 显示器的地址,以通过 I2C 协议进行通信。
LiquidCrystal_I2C lcd(0x27,16,2);
如果项目以断开的连接启动,代码将报告 DS1307 RTC Module is not Present on the serial monitor。
if (! rtc.begin())
{
Serial.println("DS1307 RTC Module is not Present");
while (1);
}
如果 RTC 断电并且模块中的时间不正确,代码将使用计算机时钟自动调整模块中的时间。因此,在设置时间时,请确保将计算机上的时钟设置为正确的时间。
if (! rtc.begin())
{
Serial.println("DS1307 RTC Module is not Present");
while (1);
}
此代码块将 LCD 光标重置为 0,并以日期/月/年格式输出日期。
void displayTime()
{
lcd.setCursor(0,0);
lcd.print("Time:");
lcd.print(now.hour());
lcd.print(':');
lcd.print(now.minute());
lcd.print(':');
lcd.print(now.second());
lcd.print(" ");
}
在这部分代码中光标设置为 1,时间以 Hour: Minute: Second 格式打印。
void displayDate()
{
lcd.setCursor(0,1);
lcd.print("Date:");
lcd.print(now.day());
lcd.print('/');
lcd.print(now.month());
lcd.print('/');
lcd.print(now.year());
}
输入代码后,日期和时间将出现在 LCD 屏幕上。
原理图和代码
完整原理图和代码已上传个人主页。
边栏推荐
猜你喜欢
随机推荐
n皇后问题(回溯法)
完整安装 Laravel-Admin 框架
财产清查概述、 全面清查的情况、局部清查的情况、财产清查的方法、财产清查结果的处理
树莓派入门(1)系统镜像烧录
Jetpack中各个组件简介
深度学习理论:测试集与验证集的区别及各自用途
【MQ-2 可燃气体和烟雾传感器与 Arduino 配合使用】
Binder机制详解(二)
阿里技术官手码12W字面试小册
Binder机制详解(一)
SGDP(2)——声纳寻宝游戏
Larave 自定义公共函数以及引入使用
OpenCore 黑苹果安装教程
Flutter入门之网络请求篇
中国大陆开源镜像站汇总
php laravel框架生成二维码
Out of memory error on GPU 0. Cannot allocate xxxGB memory on GPU 0, available memory is only xxx
浅谈性能优化:APP的启动流程分析与优化
野火ISO-V2学习
BSN:Boundary-Sensitive Network for Temporal Action Proposal Generation论文阅读笔记









