若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。
If you like this post, please click the ads on the blog or buy me a coffee. Thank you very much.
本文將說明如何在不使用 Arduino 內建函式庫()來製作 LED 閃爍功能(Blink)。使用的軟硬環境如下:
Arduino Uno 的微處理器是Atmel ATMega328p,規格手冊下載網址為 https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf
在不用Arduino函示庫下,使用C語言來做微處理器程式設計時,須對微處理器的三個暫存器(DDR, PORT, PIN)做設定,此部分可參考https://docs.arduino.cc/hacking/software/PortManipulation舉例來說,若要使用 Arduino Uno pin 13 來控制 LED 的開起與關閉,而 pin 13 是 PORTB 來做映射(mapping),首先要設定 pin 13 為輸出:
DDRB = B00100000; // sets Arduino pins 13 as outputs
設定 pin 13 為High電位或是低電位:
PORTB = B00100000; // sets digital pin 13 HIGH
PORTB = B00000000; // sets digital pin 13 LOW
<avr/io.h> 有這些暫存器位址以及輸入輸出腳位位址。
電路設計
程式碼
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB = B00100000; // Set pin 13 as output
DDRB |= _BV(DDB4); // Set pin 12 as output
DDRD |= _BV(DDD7); // Set pin 7 as output
while (1)
{
PORTB = B00100000; // sets digital pin 13 HIGH
PORTB |= _BV(PORTB4); // pin 12 High
PORTD |= _BV(PORTD7); // pin 13 High
_delay_ms(500);
PORTB = B00000000; // sets digital pin 13 LOW
PORTB &= ~_BV(PORTB4); // pin 12 Low
PORTD &= ~_BV(PORTD7); // pin 7 Low
_delay_ms(500);
}
return 0; // We will never get here!
}
TinkerCAD 範例連結:https://www.tinkercad.com/things/dGOkHOlGgc0
結果影片: