不使用 Arduino 內建函式庫來點亮LED燈

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

If you like this post, please click the ads on the blog or buy me a coffee. Thank you very much.

本文將說明如何在不使用 Arduino 內建函式庫()來製作 LED 閃爍功能(Blink)。使用的軟硬環境如下:

軟體

硬體

Windows 10

Arduino UNO * 1

Arduino IDE

LED * 2

Google Chrome

220 OHM 電阻 * 2

Tinkercad

麵包版 * 1

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


結果影片:






沒有留言: