在本教程中,我們將通過RTC模塊DS3231與MSP430連接來制作數(shù)字時鐘,并在16x2 LCD上顯示時間和日期。MSP-EXP430G2 是德州儀器提供的開發(fā)工具,又名 LaunchPad,用于學(xué)習(xí)和練習(xí)如何使用其微控制器。該板屬于 MSP430 超值系列類別,我們可以在其中對所有 MSP430 系列微控制器進(jìn)行編程。
所需材料:
MSP430
DS3231 RTC 模塊
鍋 -10k
液晶模塊 16*2
連接線
面包板
什么是 RTC??
DS3231是RTC(實時時鐘)模塊。它用于維護(hù)大多數(shù)電子項目的日期和時間。該模塊有自己的紐扣電池電源,即使主電源被移除或MCU經(jīng)過硬復(fù)位,它也能保持日期和時間。因此,一旦我們在此模塊中設(shè)置了日期和時間,它將始終跟蹤它。RTC IC有幾種類型可供選擇,如DS1307、DS3231等。
將DS3231 RTC與MSP430連接:
下面給出了基于MSP430微控制器的數(shù)字時鐘的電路圖。如前所述,DS3231在I2C通信的幫助下工作,因此它將有一個串行時鐘(SCL)和一個串行數(shù)據(jù)(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進(jìn)行編程。它與Arduino IDE相同,易于使用。如果您不熟悉MSP和energia,請使用Energia IDE開始使用MSP。為了連接RTC模塊,我們需要該板的庫。從此鏈接下載 RTC 庫并安裝它。
我們還需要預(yù)裝在Energia IDE中的Wire(用于I2C通信)和液晶庫。
本文末尾給出了此 MSP430 數(shù)字時鐘的完整代碼。代碼簡單易懂。在這里,我們將解釋其中的幾個部分。
首先,我們必須包含必要的庫。
以下庫用于 RTC 模塊和 MSP430 之間的 I2C 通信。SDA 和 SCK 引腳已在此庫中定義,因此我們不必單獨聲明這些引腳。
#include
然后,我們包括用于RTC時鐘的RTClib.h庫和用于LCD功能的LiquidCrystal.h。
#include "RTClib.h"
#include
在此之后,我們必須創(chuàng)建一個實例來初始化我們的 RTC 模塊。
RTC_DS3231 rtc;
然后制作一個大小為 7 的數(shù)組,并存儲所有七天的名稱。
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()中,我們已經(jīng)初始化了LCD屏幕和RTC的接口,并指定了顯示器的尺寸(寬度和高度),begin()需要在任何其他庫命令之前調(diào)用。
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__)));
}
注意:在上述函數(shù)中,注釋行很重要。如果未設(shè)置時間和日期,請取消注釋該行并上傳程序。此函數(shù)存儲編譯時計算機的時間,因此請確保計算機的時間正確。
現(xiàn)在,顯示的時間是正確的,但存在一個問題,每次重新啟動/重置微控制器時,LCD都會顯示您上傳代碼的時間。這是因為 rtc.adjust() 函數(shù)已經(jīng)存儲了您計算機的時間,因此當(dāng)您重置時,它會從該時間開始。
要解決此問題,請先上傳帶有 rtc.adjust() 函數(shù)未注釋的程序。然后,立即評論同一行并再次上傳程序。現(xiàn)在,您的日期和時間已設(shè)置,不會受到重置微控制器的影響。
在循環(huán)函數(shù)中,我們從RTC模塊中獲取日期和時間,并存儲在現(xiàn)在調(diào)用的預(yù)定義變量中,并使用lcd.print()函數(shù)將其顯示在LCD上。
void loop () {
DateTime now = rtc.now();
lcd.clear();
lcd.setCursor(3,0);
lcd.print(now.day(), DEC);
lcd.print("/");….
-
msp430
+關(guān)注
關(guān)注
180文章
2330瀏覽量
229006 -
DS3231
+關(guān)注
關(guān)注
2文章
51瀏覽量
23794 -
數(shù)字時鐘
+關(guān)注
關(guān)注
2文章
149瀏覽量
20249
發(fā)布評論請先 登錄
相關(guān)推薦
評論