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