当前位置:网站首页>【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 屏幕上。
原理图和代码
完整原理图和代码已上传个人主页。
边栏推荐
猜你喜欢
随机推荐
哈工大2021机器学习期末考试题
聊一聊数据库的行存与列存
关于我的项目-实现一个数据库~
openmv学习 2022.5.9
SyntaxError: unexpected character after line continuation character
目标检测(一):R-CNN系列
功能强大的黑科技网站--10连
Spark特征工程-one-hot 和 multi-hot
【opencv】error: (-215:Assertion failed) ssize.empty() in function ‘cv::resize‘报错原因
Spark数据读取和创建
Binder机制详解(三)
ontop-vkg 学习1
2021-09-04 最简单的Golang定时器应用以及最简单的协程入门儿
SATA M2 SSD 无法安装系统的解决方法
Microsoft Office安装全过程记录
laravel-admin 线上访问项目,一直重定向到登录页面
2022年中高级 Android 大厂面试秘籍,为你保驾护航金九银十,直通大厂
Binder机制详解(一)
Larave 自定义公共函数以及引入使用
Glide中图片处理