通过RTC模块DS3231与MSP430连接来制作数字时钟

描述

在本教程中,我们将通过RTC模块DS3231与MSP430连接来制作数字时钟,并在16x2 LCD上显示时间和日期。MSP-EXP430G2 是德州仪器提供的开发工具,又名 LaunchPad,用于学习和练习如何使用其微控制器。该板属于 MSP430 超值系列类别,我们可以在其中对所有 MSP430 系列微控制器进行编程。

所需材料:

MSP430

DS3231 RTC 模块

锅 -10k

液晶模块 16*2

连接线

面包板

什么是 RTC??

DS3231是RTC(实时时钟)模块。它用于维护大多数电子项目的日期和时间。该模块有自己的纽扣电池电源,即使主电源被移除或MCU经过硬复位,它也能保持日期和时间。因此,一旦我们在此模块中设置了日期和时间,它将始终跟踪它。RTC IC有几种类型可供选择,如DS1307、DS3231等。

DS3231

将DS3231 RTC与MSP430连接:

下面给出了基于MSP430微控制器的数字时钟的电路图。如前所述,DS3231在I2C通信的帮助下工作,因此它将有一个串行时钟(SCL)和一个串行数据(SDA)引脚,必须连接到MSP430上的I2C引脚,即引脚9(引脚2.1,SCL)和引脚10(引脚2.2,SDA)。

MSP430 提供 3.3V Vcc,但我们需要 5V 才能将其与 LCD 和 RTC 模块连接。因此,我们将使用一个技巧,在USB电缆连接器附近有一个名为TP1的跳线可用。您可以从那里获取 5V。

电路图:

DS3231

用于 RTC 模块的 MSP430 编程:

在这里,我们使用Energia IDE进行编程。它与Arduino IDE相同,易于使用。如果您不熟悉MSP和energia,请使用Energia IDE开始使用MSP。为了连接RTC模块,我们需要该板的库。从此链接下载 RTC 库并安装它。

我们还需要预装在Energia IDE中的Wire(用于I2C通信)和液晶库。

本文末尾给出了此 MSP430 数字时钟的完整代码。代码简单易懂。在这里,我们将解释其中的几个部分。

首先,我们必须包含必要的库。

以下库用于 RTC 模块和 MSP430 之间的 I2C 通信。SDA 和 SCK 引脚已在此库中定义,因此我们不必单独声明这些引脚。

#include

然后,我们包括用于RTC时钟的RTClib.h库和用于LCD功能的LiquidCrystal.h。

#include "RTClib.h"

#include   

在此之后,我们必须创建一个实例来初始化我们的 RTC 模块。

RTC_DS3231 rtc;

然后制作一个大小为 7 的数组,并存储所有七天的名称。

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

以下是液晶显示器使用的MSP430的引脚声明:(RS(P2.0),EN(P1.4),D4(P1.5),D5(P2.3),D6(P2.4),D7(P2.5))

LiquidCrystal lcd(8 ,6, 7,11,12,13);   

 

在void setup()中,我们已经初始化了LCD屏幕和RTC的接口,并指定了显示器的尺寸(宽度和高度),begin()需要在任何其他库命令之前调用。

void setup () {

lcd.begin(16, 2);

lcd.setCursor(3,0);

lcd.print("RTC Clock");

delay(3000);

lcd.clear();

rtc.begin();

//  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

}

注意:在上述函数中,注释行很重要。如果未设置时间和日期,请取消注释该行并上传程序。此函数存储编译时计算机的时间,因此请确保计算机的时间正确。

现在,显示的时间是正确的,但存在一个问题,每次重新启动/重置微控制器时,LCD都会显示您上传代码的时间。这是因为 rtc.adjust() 函数已经存储了您计算机的时间,因此当您重置时,它会从该时间开始。

要解决此问题,请先上传带有 rtc.adjust() 函数未注释的程序。然后,立即评论同一行并再次上传程序。现在,您的日期和时间已设置,不会受到重置微控制器的影响。

在循环函数中,我们从RTC模块中获取日期和时间,并存储在现在调用的预定义变量中,并使用lcd.print()函数将其显示在LCD上。

void loop () {

DateTime now = rtc.now();

lcd.clear();

lcd.setCursor(3,0);

lcd.print(now.day(), DEC);

lcd.print("/");….

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分