您的位置:首頁>正文

AVR開發 Arduino方法(一)埠子系統

Arduino UNO R3使用的主處理器ATMega328P上有3個8位的輸入/輸出埠, 它們分別是PB, PC和PD。 Arduino IDE提供的Blink示例可以説明我們瞭解埠的數位輸出功能:

1 int led = 13; 2 3 void setup { 4 pinMode(led, OUTPUT); 5 } 6 7 void loop { 8 digitalWrite(led, HIGH); 9 delay(1000);10 digitalWrite(led, LOW);11 delay(1000);12 }

這個示例使Arduino 13(PB5)引腳上的LED閃爍。 與數位輸出相關的Arduino庫函數有:

pinMode(pin, mode):配置指定引腳為輸入或輸出

pin:指定引腳

mode:OUTPUT(輸出), INPUT(輸入)或INPUT_PULLUP(帶上拉電阻的輸入)

digitalWrite(pin, value):從指定引腳輸出電平

pin:指定引腳

value:LOW(低電平, 0V), HIGH(高電平, 5V)

ATMega328P的每個埠都由3個相關寄存器控制, 方向寄存器DDRx(x = B, C, D)用於指定埠引腳方向, 若向其中某位寫入1, 則該位控制的引腳被設置為輸出, 寫入0則為輸入。 輸出寄存器PORTx(x = B, C, D)在該埠引腳被設置為輸出時, 寫入1則輸出高電平, 寫入0則輸出低電平;在該埠引腳被設置為輸入時,

寫入1則對其啟用上拉電阻, 即在該埠引腳被懸空時默認輸入高電平。 輸入寄存器PINx(x = B, C, D)在埠引腳被設置為輸入時存儲該埠引腳的輸入, 若埠引腳輸入高電平, 則寄存器相應位被置為1, 輸入低電平則置為0。

通過直接訪問寄存器改寫以上程式:

1 void setup {2 DDRB |= (1 << PB5);3 }4 5 void loop {6 PORTB ^= (1 << PB5);7 delay(1000);8 }

向電路中添加一個按鍵, 讓它的兩端分別連接在Arduino 2(PD2)引腳和GND(地)引腳上(如下所示)。

這樣使得按鍵在沒有按下時2(PD2)引腳處於懸空狀態, 因此需要將2(PD2)引腳設置為帶上拉電阻的輸入模式:

1 const int buttonPin = 2; 2 const int ledPin = 13; 3 4 int buttonState = 0; 5 6 void setup { 7 pinMode(ledPin, OUTPUT); 8 pinMode(buttonPin, INPUT_PULLUP); 9 }10 11 void loop{12 buttonState = digitalRead(buttonPin);13 14 if (buttonState == HIGH) { 15 digitalWrite(ledPin, HIGH); 16 } 17 else {18 digitalWrite(ledPin, LOW); 19 }20 }

除了pinMode函數外, 與數位輸入相關的Arduino庫函數有:

digitalRead(pin):從指定引腳上讀取電平

pin:指定引腳

函數返回LOW(低電平, 0V)或HIGH(高電平, 5V)

通過直接訪問寄存器改寫以上程式:

1 void setup { 2 DDRB |= (1 << PB5); 3 DDRD &= ~(1 << PD2); 4 PORTD |= (1 << PD2); 5 } 6 7 void loop { 8 if (PIND & (1 << PD2)) { 9 PORTB |= (1 << PB5);10 } else {11 PORTB &= ~(1 << PB5);12 }13 }
同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示