在本教程中,我們將學習如何使用數字讀取和數字寫入選項來讀取輸入設備(如開關)的狀態,并控制多個輸出(如 LED)。在本教程結束時,您將學習使用數字輸入和輸出,它可用于連接許多數字傳感器,如紅外傳感器、PIR 傳感器等,還可以打開或關閉輸出,如 LED、蜂鳴器等。聽起來很有趣吧!!?讓我們開始吧。
所需材料:
MSP430G2 啟動板
任何顏色的 LED – 8
開關 – 2
1k 電阻器 – 8
連接線
電路圖:
在之前的教程中,我們注意到發射臺本身在板上有兩個 LED 和一個開關。但是在本教程中,我們將需要更多,因為我們計劃在按下按鈕時按順序點亮八個 LED 燈。我們還將在按下另一個按鈕時更改順序,以使其有趣。所以我們必須建立一個帶有8個LED燈和兩個開關的電路,完整的電路圖可以在下面找到。
這里的8個LED是輸出,兩個開關是輸入。我們可以將它們連接到電路板上的任何 I/O 引腳,但我已將 LRD 從引腳 P1.0 連接到 P2.1,并將開關 1 和 2 分別連接到引腳 P2.4 和 P2.3,如上所示。
LED的所有陰極引腳都接地,陽極引腳通過電阻連接到I/O引腳。該電阻器稱為限流電阻器,此電阻器對于 MSP430 不是必需的,因為它的 I/O 引腳可以提供的最大電流僅為 6mA,引腳上的電壓僅為 3.6V。但是,使用它們是一個很好的做法。當這些數字引腳中的任何一個變為高電平時,相應的 LED 將亮起。如果你能回憶起上一個教程的LED程序,那么你就會記得數字寫入(LED_pin_name,高)將使LED發光,數字寫入(LED_pin_name,低)將使LED轉動。
開關是輸入設備,開關的一端連接到接地端子,另一端連接到數字引腳P2.3和P2.4。這意味著每當我們按下開關時,I/O 引腳(2.3 或 2.4)都將接地,如果不按下按鈕,I/O 引腳將保持空閑狀態。讓我們看看如何在編程時使用這種安排。
編程說明:
當按下開關 1 時,必須編寫程序以順序方式控制 8 LED,然后當按下開關 2 時,必須更改順序。完整的程序和演示視頻可以在此頁面底部找到。下面我將逐行解釋程序,以便您輕松理解。
與往常一樣,我們應該從 void setup() 函數開始,在該函數中,我們將聲明我們使用的引腳是輸入或輸出引腳。在我們的程序中,輸出 8 個 LED 引腳,輸入 2 個開關。這 8 個 LED 從 P1.0 連接到 P2.1,即電路板上的引腳編號 2 到 9。然后將開關連接到引腳P2.3和引腳2.4,分別是引腳編號11和12。所以我們在 void setup() 中聲明了以下內容
void setup() {
for (int i = 2; i <= 9; i++) {
pinMode(i, OUTPUT);
}
for (int i = 2; i <= 9; i++) {
digitalWrite(i, LOW);
}
pinMode (11, INPUT_PULLUP);
pinMode (12, INPUT_PULLUP);
}
眾所周知,pinMode() 函數將引腳聲明為輸出或輸入,而 digitalWrite() 函數使其高電平 (ON) 或低電平 (OFF)。我們使用 for 循環來做出此聲明以減少行數。變量 “i” 將在 for 循環中從 2 遞增到 9,并且對于每個增量,將執行其中的函數。另一件可能讓您感到困惑的事情是術語“INPUT_PULLUP”。只需調用函數pinMode(Pin_name,INPUT)即可將引腳聲明為輸入,但在這里我們使用了INPUT_PULLUP而不是INPUT,它們都有明顯的變化。
當我們使用任何微控制器引腳時,該引腳應連接到低電平或高電平。在這種情況下,引腳 11 和 12 連接到開關,按下時開關將接地。但是,當開關未按下時,引腳未連接到任何內容,這種情況稱為浮動引腳,對微控制器不利。因此,為了避免這種情況,我們要么使用上拉電阻器,要么使用下拉電阻器,在引腳浮動時將引腳保持在某種狀態。在 MSP430G2553 微控制器中,I/O 引腳內置了一個上拉電阻。要使用它,我們所要做的就是在聲明期間調用 INPUT_PULLUP 而不是 INPUT,就像上面所做的那樣。
現在讓我們進入 void loop() 函數。在此函數中編寫的任何內容都將永遠執行。我們程序的第一步是檢查開關是否被按下,如果按下,我們應該開始按順序閃爍 LED。要檢查按鈕是否按下,請使用以下行
if (digitalRead(12) == LOW)
這里的新功能是digitalRead()函數,該函數將讀取數字引腳的狀態,并在引腳獲得一定電壓時返回HIGH(1),當引腳接地時返回低LOW(0)。在我們的硬件中,只有當我們按下按鈕時,引腳才會接地,否則它會很高,因為我們使用了上拉電阻。所以我們使用 if 語句來檢查按鈕是否被按下。
按下按鈕后,我們進入無限 while (1) 循環。這是我們開始按順序閃爍 LED 的地方。下面顯示了一個無限的while循環,循環中寫入的任何內容都將永遠運行,直到中斷;使用語句。
whiel(1){
}
在無限內,我們檢查連接到引腳 11 的第二個開關的狀態。
如果按下此開關,我們將按一個特定順序閃爍 LED,否則我們將以另一個順序閃爍。
if (digitalRead(11) == LOW)
{
for (int i = 2; i <= 9; i++)
{
digitalWrite(i, HIGH);
delay(100);
}
for (int i = 2; i <= 9; i++)
digitalWrite(i, LOW);
}
為了按順序閃爍 LED,我們再次使用 for 循環,但這次我們使用 delay(100) 函數使用 100 毫秒的小延遲,以便我們可以注意到 LED 變高。為了一次只使一個LED發光,我們還使用另一個for回路來關閉所有LED。因此,我們打開 LED 等待一段時間,然后關閉所有 LED,然后增加計數打開 LED 等待一段時間,循環繼續。但只要不按下第二個開關,這一切都會發生。
如果按下第二個開關,然后我們更改順序,程序將或多或少與 LED 打開的順序相同。下面顯示的行嘗試查看并找出已更改的內容。
else
{
for (int i = 9; i >= 2; i--)
{
digitalWrite(i, HIGH);
delay(100);
}
for (int i = 2; i <= 9; i++)
digitalWrite(i, LOW);
}
是的,for 循環已更改。以前,我們讓 LED 從數字 2 一直發光到 9。但是現在我們將從數字 9 開始,一直減少到 2。這樣我們就可以注意到開關是否被按下。
閃爍 LED 序列的硬件設置:
好的,所有的理論和軟件部分都足夠了。讓我們獲取一些組件,看看該程序的實際效果。該電路非常簡單,因此可以很容易地構建在面包板上。但是我已經在性能板上焊接了LED和開關,只是為了讓它看起來整潔。我焊接的性能板如下所示。
如您所見,我們將LED和開關的輸出引腳作為連接器引腳取出。現在,我們已經使用母對母連接器線連接 LED 并切換至 MSP430 LaunchPad 板,如下圖所示。
上傳和工作:
完成硬件操作后,只需將MSP430板連接到計算機并打開Energia IDE并使用本頁末尾給出的程序即可。確保在Energia IDE中選擇了正確的電路板和COM端口,然后單擊“上傳”按鈕。該程序應該編譯成功,上傳后將顯示“完成上傳”。
現在按下板上的按鈕 1,LED 應按順序亮起,如下所示
您也可以按住第二個按鈕來檢查順序是否被更改。
/*
TUTORIAL 2 - Learning to use I/O
This program will control 8 LEDs based ont he input from two push button
LED should be connected form P1.0 to P2.1 (pin 2 to 7)
Switch is connected to P2.3 and P2.4 (pin 8 and 9)
*/
void setup() {
for (int i = 2; i <= 9; i++) {
pinMode(i, OUTPUT);
}
for (int i = 2; i <= 9; i++) {
digitalWrite(i, LOW);
}
pinMode (11, INPUT_PULLUP);
pinMode (12, INPUT_PULLUP);
}
// the loop routine runs over and over again forever:
void loop() {
if (digitalRead(12) == LOW)
{
while (1)
{
if (digitalRead(11) == LOW)
{
for (int i = 2; i <= 9; i++)?
{
digitalWrite(i, HIGH);
delay(100);
}
for (int i = 2; i <= 9; i++)
digitalWrite(i, LOW);
}
else
{
for (int i = 9; i >= 2; i--)
{
digitalWrite(i, HIGH);
delay(100);
}
for (int i = 2; i <= 9; i++)
digitalWrite(i, LOW);
}
}
}
}
-
led
+關注
關注
242文章
23329瀏覽量
662020 -
輸入設備
+關注
關注
0文章
25瀏覽量
8505 -
MSP430G2
+關注
關注
1文章
18瀏覽量
12892
發布評論請先 登錄
相關推薦
評論