0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用數(shù)字讀/寫(xiě)引腳

科技觀察員 ? 來(lái)源:circuitdigest ? 作者:阿斯文斯·拉吉 ? 2022-11-18 14:47 ? 次閱讀

在本教程中,我們將學(xué)習(xí)如何使用數(shù)字讀取和數(shù)字寫(xiě)入選項(xiàng)來(lái)讀取輸入設(shè)備(如開(kāi)關(guān))的狀態(tài),并控制多個(gè)輸出(如 LED)。在本教程結(jié)束時(shí),您將學(xué)習(xí)使用數(shù)字輸入和輸出,它可用于連接許多數(shù)字傳感器,如紅外傳感器、PIR 傳感器等,還可以打開(kāi)或關(guān)閉輸出,如 LED、蜂鳴器等。聽(tīng)起來(lái)很有趣吧!!?讓我們開(kāi)始吧。

所需材料:

MSP430G2 啟動(dòng)板

任何顏色的 LED – 8

開(kāi)關(guān) – 2

1k 電阻器 – 8

連接線

電路圖:

在之前的教程中,我們注意到發(fā)射臺(tái)本身在板上有兩個(gè) LED 和一個(gè)開(kāi)關(guān)。但是在本教程中,我們將需要更多,因?yàn)槲覀冇?jì)劃在按下按鈕時(shí)按順序點(diǎn)亮八個(gè) LED 燈。我們還將在按下另一個(gè)按鈕時(shí)更改順序,以使其有趣。所以我們必須建立一個(gè)帶有8個(gè)LED燈和兩個(gè)開(kāi)關(guān)的電路,完整的電路圖可以在下面找到。

pYYBAGN3KouAdhs1AAB1kvg_WyY891.png

這里的8個(gè)LED是輸出,兩個(gè)開(kāi)關(guān)是輸入。我們可以將它們連接到電路板上的任何 I/O 引腳,但我已將 LRD 從引腳 P1.0 連接到 P2.1,并將開(kāi)關(guān) 1 和 2 分別連接到引腳 P2.4 和 P2.3,如上所示。

LED的所有陰極引腳都接地,陽(yáng)極引腳通過(guò)電阻連接到I/O引腳。該電阻器稱為限流電阻器,此電阻器對(duì)于 MSP430 不是必需的,因?yàn)樗?I/O 引腳可以提供的最大電流僅為 6mA,引腳上的電壓僅為 3.6V。但是,使用它們是一個(gè)很好的做法。當(dāng)這些數(shù)字引腳中的任何一個(gè)變?yōu)楦唠娖綍r(shí),相應(yīng)的 LED 將亮起。如果你能回憶起上一個(gè)教程的LED程序,那么你就會(huì)記得數(shù)字寫(xiě)入(LED_pin_name,高)將使LED發(fā)光,數(shù)字寫(xiě)入(LED_pin_name,低)將使LED轉(zhuǎn)動(dòng)。

開(kāi)關(guān)是輸入設(shè)備,開(kāi)關(guān)的一端連接到接地端子,另一端連接到數(shù)字引腳P2.3和P2.4。這意味著每當(dāng)我們按下開(kāi)關(guān)時(shí),I/O 引腳(2.3 或 2.4)都將接地,如果不按下按鈕,I/O 引腳將保持空閑狀態(tài)。讓我們看看如何在編程時(shí)使用這種安排。

編程說(shuō)明:
當(dāng)按下開(kāi)關(guān) 1 時(shí),必須編寫(xiě)程序以順序方式控制 8 LED,然后當(dāng)按下開(kāi)關(guān) 2 時(shí),必須更改順序。完整的程序和演示視頻可以在此頁(yè)面底部找到。下面我將逐行解釋程序,以便您輕松理解。

與往常一樣,我們應(yīng)該從 void setup() 函數(shù)開(kāi)始,在該函數(shù)中,我們將聲明我們使用的引腳是輸入或輸出引腳。在我們的程序中,輸出 8 個(gè) LED 引腳,輸入 2 個(gè)開(kāi)關(guān)。這 8 個(gè) LED 從 P1.0 連接到 P2.1,即電路板上的引腳編號(hào) 2 到 9。然后將開(kāi)關(guān)連接到引腳P2.3和引腳2.4,分別是引腳編號(hào)11和12。所以我們?cè)?void setup() 中聲明了以下內(nèi)容

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() 函數(shù)將引腳聲明為輸出或輸入,而 digitalWrite() 函數(shù)使其高電平 (ON) 或低電平 (OFF)。我們使用 for 循環(huán)來(lái)做出此聲明以減少行數(shù)。變量 “i” 將在 for 循環(huán)中從 2 遞增到 9,并且對(duì)于每個(gè)增量,將執(zhí)行其中的函數(shù)。另一件可能讓您感到困惑的事情是術(shù)語(yǔ)“INPUT_PULLUP”。只需調(diào)用函數(shù)pinMode(Pin_name,INPUT)即可將引腳聲明為輸入,但在這里我們使用了INPUT_PULLUP而不是INPUT,它們都有明顯的變化。

當(dāng)我們使用任何微控制器引腳時(shí),該引腳應(yīng)連接到低電平或高電平。在這種情況下,引腳 11 和 12 連接到開(kāi)關(guān),按下時(shí)開(kāi)關(guān)將接地。但是,當(dāng)開(kāi)關(guān)未按下時(shí),引腳未連接到任何內(nèi)容,這種情況稱為浮動(dòng)引腳,對(duì)微控制器不利。因此,為了避免這種情況,我們要么使用上拉電阻器,要么使用下拉電阻器,在引腳浮動(dòng)時(shí)將引腳保持在某種狀態(tài)。在 MSP430G2553 微控制器中,I/O 引腳內(nèi)置了一個(gè)上拉電阻。要使用它,我們所要做的就是在聲明期間調(diào)用 INPUT_PULLUP 而不是 INPUT,就像上面所做的那樣。

現(xiàn)在讓我們進(jìn)入 void loop() 函數(shù)。在此函數(shù)中編寫(xiě)的任何內(nèi)容都將永遠(yuǎn)執(zhí)行。我們程序的第一步是檢查開(kāi)關(guān)是否被按下,如果按下,我們應(yīng)該開(kāi)始按順序閃爍 LED。要檢查按鈕是否按下,請(qǐng)使用以下行

if (digitalRead(12) == LOW)
這里的新功能是digitalRead()函數(shù),該函數(shù)將讀取數(shù)字引腳的狀態(tài),并在引腳獲得一定電壓時(shí)返回HIGH(1),當(dāng)引腳接地時(shí)返回低LOW(0)。在我們的硬件中,只有當(dāng)我們按下按鈕時(shí),引腳才會(huì)接地,否則它會(huì)很高,因?yàn)槲覀兪褂昧松侠娮?。所以我們使?if 語(yǔ)句來(lái)檢查按鈕是否被按下。

按下按鈕后,我們進(jìn)入無(wú)限 while (1) 循環(huán)。這是我們開(kāi)始按順序閃爍 LED 的地方。下面顯示了一個(gè)無(wú)限的while循環(huán),循環(huán)中寫(xiě)入的任何內(nèi)容都將永遠(yuǎn)運(yùn)行,直到中斷;使用語(yǔ)句。

whiel(1){
}
在無(wú)限內(nèi),我們檢查連接到引腳 11 的第二個(gè)開(kāi)關(guān)的狀態(tài)。

如果按下此開(kāi)關(guān),我們將按一個(gè)特定順序閃爍 LED,否則我們將以另一個(gè)順序閃爍。

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,我們?cè)俅问褂?for 循環(huán),但這次我們使用 delay(100) 函數(shù)使用 100 毫秒的小延遲,以便我們可以注意到 LED 變高。為了一次只使一個(gè)LED發(fā)光,我們還使用另一個(gè)for回路來(lái)關(guān)閉所有LED。因此,我們打開(kāi) LED 等待一段時(shí)間,然后關(guān)閉所有 LED,然后增加計(jì)數(shù)打開(kāi) LED 等待一段時(shí)間,循環(huán)繼續(xù)。但只要不按下第二個(gè)開(kāi)關(guān),這一切都會(huì)發(fā)生。

如果按下第二個(gè)開(kāi)關(guān),然后我們更改順序,程序?qū)⒒蚨嗷蛏倥c LED 打開(kāi)的順序相同。下面顯示的行嘗試查看并找出已更改的內(nèi)容。


else
{
for (int i = 9; i >= 2; i--)
{
digitalWrite(i, HIGH);
delay(100);
}
for (int i = 2; i <= 9; i++)
digitalWrite(i, LOW);
}
是的,for 循環(huán)已更改。以前,我們讓 LED 從數(shù)字 2 一直發(fā)光到 9。但是現(xiàn)在我們將從數(shù)字 9 開(kāi)始,一直減少到 2。這樣我們就可以注意到開(kāi)關(guān)是否被按下。

閃爍 LED 序列的硬件設(shè)置:

好的,所有的理論和軟件部分都足夠了。讓我們獲取一些組件,看看該程序的實(shí)際效果。該電路非常簡(jiǎn)單,因此可以很容易地構(gòu)建在面包板上。但是我已經(jīng)在性能板上焊接了LED和開(kāi)關(guān),只是為了讓它看起來(lái)整潔。我焊接的性能板如下所示。

poYBAGN3Ko2AcVBFAADEGutBH7Y102.jpg

如您所見(jiàn),我們將LED和開(kāi)關(guān)的輸出引腳作為連接器引腳取出?,F(xiàn)在,我們已經(jīng)使用母對(duì)母連接器線連接 LED 并切換至 MSP430 LaunchPad 板,如下圖所示。

pYYBAGN3Ko-AaZrGAADxwel-DSk191.jpg

上傳和工作:

完成硬件操作后,只需將MSP430板連接到計(jì)算機(jī)并打開(kāi)Energia IDE并使用本頁(yè)末尾給出的程序即可。確保在Energia IDE中選擇了正確的電路板和COM端口,然后單擊“上傳”按鈕。該程序應(yīng)該編譯成功,上傳后將顯示“完成上傳”。

現(xiàn)在按下板上的按鈕 1,LED 應(yīng)按順序亮起,如下所示

poYBAGN3KpSATY2mAADkKLoy-IY508.jpg

您也可以按住第二個(gè)按鈕來(lái)檢查順序是否被更改。

/*

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);

}

}

}

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    242

    文章

    23770

    瀏覽量

    671783
  • 輸入設(shè)備
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    8599
  • MSP430G2
    +關(guān)注

    關(guān)注

    1

    文章

    19

    瀏覽量

    12938
收藏 0人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    DDR 1&2&3的“”和“寫(xiě)”眼圖分析

    DDR 1&2&3的“”和“寫(xiě)”眼圖分析:現(xiàn)在不論做主板設(shè)計(jì)或測(cè)試的工程師,還是做內(nèi)存或DDR芯片設(shè)計(jì)或測(cè)試的工程師都會(huì)面臨這樣一個(gè)問(wèn)題:如何能夠分離出“”和“寫(xiě)
    發(fā)表于 09-14 08:05 ?35次下載

    電池管理器件的/寫(xiě)操作

    電池管理器件的/寫(xiě)操作 Dallas Semiconductor 的電池管理IC 采用相同的通信協(xié)議和相同的存儲(chǔ)器地址不同類型的存儲(chǔ)器可以分別進(jìn)行/寫(xiě)操作本應(yīng)用筆記闡述了唯
    發(fā)表于 04-12 08:50 ?21次下載

    C語(yǔ)言教程之/寫(xiě)BIOS計(jì)時(shí)器

    C語(yǔ)言教程之/寫(xiě)BIOS計(jì)時(shí)器,很好的C語(yǔ)言資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-25 16:49 ?0次下載

    使用寄存器級(jí)&寫(xiě)控制基于PXI平臺(tái)的FPGA

    SVF)和軟件控制例程。概述了如何使用GX3500設(shè)計(jì)128通道的靜態(tài)I/O。此設(shè)計(jì)實(shí)例配置為4組32通道雙向引腳,雙緩沖結(jié)構(gòu)支持同步更新128通道邏輯狀態(tài)的寫(xiě)。使用Altera Quartus II軟件。
    發(fā)表于 09-27 17:46 ?10次下載

    如何使用寄存器級(jí)&寫(xiě)控制基于PXI平臺(tái)的FPGA

    如何使用寄存器級(jí)&寫(xiě)控制基于PXI平臺(tái)的FPGA
    發(fā)表于 10-16 15:20 ?14次下載
    如何使用寄存器級(jí)<b class='flag-5'>讀</b>&<b class='flag-5'>寫(xiě)</b>控制基于PXI平臺(tái)的FPGA

    如何使用寄存器級(jí)&寫(xiě)控制基于PXI平臺(tái)的FPGA

    如何使用寄存器級(jí)&寫(xiě)控制基于PXI平臺(tái)的FPGA
    發(fā)表于 10-19 08:48 ?12次下載

    MCS-51單片機(jī)指令系統(tǒng)“-改-寫(xiě)”指令

    單片機(jī)首先將欲修改的寄存器的內(nèi)容回ALU,對(duì)相應(yīng)位進(jìn)行修改,然后再整個(gè)寫(xiě)回原來(lái)的寄存器地址,完成該功能的指令就叫做“-改-寫(xiě)”指令。 鎖存器和
    發(fā)表于 11-23 13:38 ?1813次閱讀

    NXP MFRC523高集成/寫(xiě)器的主要特性及應(yīng)用

    MFRC523是NXP公司的一個(gè)的高集成/寫(xiě)器,用于13.56MHz頻率的非接觸式通信。MFRC523閱讀器支持ISO/IEC 14443 A/MIFARE模式。MFRC523的內(nèi)部發(fā)射器無(wú)需額外
    的頭像 發(fā)表于 01-21 17:48 ?4413次閱讀
    NXP MFRC523高集成<b class='flag-5'>讀</b>/<b class='flag-5'>寫(xiě)</b>器的主要特性及應(yīng)用

    具有/寫(xiě)遙測(cè)功能的μ模塊調(diào)節(jié)器

    具有/寫(xiě)遙測(cè)功能的μ模塊調(diào)節(jié)器
    發(fā)表于 04-30 11:18 ?3次下載
    具有<b class='flag-5'>讀</b>/<b class='flag-5'>寫(xiě)</b>遙測(cè)功能的μ模塊調(diào)節(jié)器

    PIC何謂-修改-寫(xiě),導(dǎo)致的問(wèn)題及其解決之道

    何謂-修改-寫(xiě),導(dǎo)致的問(wèn)題及其解決之道: 只要PICmicro的命令,所處理的FILE (暫存器,內(nèi)存,和I/O的統(tǒng)稱),其最終的值,和命令處理前的值有關(guān),那么,這種命令便是所謂的-修改-
    發(fā)表于 11-16 15:51 ?2次下載
    PIC何謂<b class='flag-5'>讀</b>-修改-<b class='flag-5'>寫(xiě)</b>,導(dǎo)致的問(wèn)題及其解決之道

    51單片機(jī)引腳端口測(cè)試總結(jié)

    51的P0 - P3都是準(zhǔn)雙向I/O端口,作為輸入端口時(shí)需要先將其置1,然后再讀取引腳狀態(tài)。這里拋開(kāi)匯編,單純講下C51編程時(shí)的哪種情況是引腳、哪種情況是端口,以及
    發(fā)表于 11-23 16:23 ?7次下載
    51單片機(jī)<b class='flag-5'>讀</b><b class='flag-5'>引腳</b>和<b class='flag-5'>讀</b>端口測(cè)試總結(jié)

    車(chē)載ECU嵌入式設(shè)備的診斷測(cè)試–寫(xiě)

    本篇講述UDS中的寫(xiě)服務(wù),讀寫(xiě)服務(wù)幾乎是工程師日常使用最為頻繁的服務(wù),特別是服務(wù)。
    的頭像 發(fā)表于 10-28 15:43 ?1227次閱讀
    車(chē)載ECU嵌入式設(shè)備的診斷測(cè)試–<b class='flag-5'>讀</b>和<b class='flag-5'>寫(xiě)</b>

    使用System IO Ports SerialPort進(jìn)行串行/寫(xiě)

    電子發(fā)燒友網(wǎng)站提供《使用System IO Ports SerialPort進(jìn)行串行/寫(xiě).zip》資料免費(fèi)下載
    發(fā)表于 11-21 09:56 ?0次下載
    使用System IO Ports SerialPort進(jìn)行串行<b class='flag-5'>讀</b>/<b class='flag-5'>寫(xiě)</b>

    MegaRAID CacheCade Pro 2.0/寫(xiě)緩存軟件

    電子發(fā)燒友網(wǎng)站提供《MegaRAID CacheCade Pro 2.0/寫(xiě)緩存軟件.pdf》資料免費(fèi)下載
    發(fā)表于 08-22 10:59 ?1次下載
    MegaRAID CacheCade Pro 2.0<b class='flag-5'>讀</b>/<b class='flag-5'>寫(xiě)</b>緩存軟件

    為什么異步fifo中地址同步在寫(xiě)時(shí)鐘域時(shí)序分析不通過(guò)?

    為什么異步fifo中地址同步在寫(xiě)時(shí)鐘域時(shí)序分析不通過(guò)? 異步FIFO中地址同步在寫(xiě)時(shí)鐘域時(shí)序分析不通過(guò)的原因可能有以下幾個(gè)方面: 1.
    的頭像 發(fā)表于 10-18 15:23 ?1021次閱讀

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品