资讯详情

【Arduino连接时钟模块在LCD1602上显示时间】

Arduino连接时钟模块LCD1602上显示时间

    • 前言
    • 关于 DS1307
    • DS1307 引脚排列
    • DS1307 模块元件
    • DS1307 传感器模块原理图
    • 对 DS1307 编程和设置时间
    • 在 LCD 显示时间的代码
    • 原理图和代码

前言

时间在当今社会非常重要,时间对一些电子产品非常重要;就像我们一样,他们需要一种记录时间和准确时间的方法。那么,电子产品是如何做到这一点的呢?实时钟或 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 屏幕上。

原理图和代码

完整原理图和代码已上传个人主页。

标签: 3231传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台