在本教程中,我们将通过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 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。
电路图:
用于 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("/");….
全部0条评论
快来发表一下你的评论吧 !