程式碼下載

使用硬體元件

  • 麵包板
  • Arduino Nano
  • 顯示器數碼管
  • 電阻(560 歐姆) X 8
  • 杜邦線

元件介紹

本次使用顯示器數碼管為共陰極一位元七段式數碼管數字顯示管(5611AS), 所謂共陰是指數碼管數字顯示管內的 LED 共用陰極(共同接地)
只要在七段式數碼或小數點的腳位, 加上正電壓(需增加電阻以保護ELD), 即可顯示該段數碼管或小數點, 其腳位對應如下圖所示( 3,8 腳位共同接地, 其他腳位則為A~G段式數碼及小數點等LED顯示管的正極)

完成後效果

於單一數字顯示器上輪流顯示 HELLO.0123456789. 等字元(一次顯示一個字元)

建置步驟

步驟 1 : 連接硬體線路

接線示意圖(數碼管 3, 8 接腳連接 Nano 的 GND, 其他腳位則連接電阻後, 再依序接到 Nano 的 5~12 腳位
將 Nano 插入麵包板, 並將 Nano 的 GND 連接到地線
將數碼管插入麵包板, 並將數碼管的 3, 8 腳位連接到地線
插入電阻( 注意電阻線不可相互接觸 )
插入杜邦線, 將數碼管對應串接的電阻端與 Nano 5~12 腳位相互連接

步驟 2 : 撰寫程式

定義 Arduino 5~12 分別對應到數碼管的 DP, A, B, C, D, E, F, G 等腳位
int pin_DP = 5;
int pin_A = 6;
int pin_B = 7;
int pin_C = 8;
int pin_D = 9;
int pin_E = 10;
int pin_F = 11;
int pin_G = 12;
定義要顯示數碼的陣列, 顯示數碼是以二進位的位元組儲存, 每個位元對應一個LED的顯示段, 0 表不亮, 1 表亮
byte words[ ] = {
  // .ABCDEFG 
    B00110111,  // H 
    B01001111,  // E 
    B00001110,  // L 
    B00001110,  // L 
    B01111110,  // O 
    B10000000,  // . 
    B01111110,  // 0 
    B00110000,  // 1
    B01101101,  // 2
    B01111001,  // 3
    B00110011,  // 4
    B01011011,  // 5
    B01011111,  // 6
    B01110000,  // 7
    B01111111,  // 8
    B01111011,  // 9
    B10000000   // . 
};
二進位碼顯示 H 字元示意圖
設定前列項數碼陣列的長度(HELLO.0123456789. 共17個字元)
int words_length = 17;
於 setup() 函數內設定 Nano 對應到數碼的PIN 均為 OUTPUT
void setup(){
  pinMode(pin_DP, OUTPUT);
  pinMode(pin_A, OUTPUT);
  pinMode(pin_B, OUTPUT);
  pinMode(pin_C, OUTPUT);
  pinMode(pin_D, OUTPUT);
  pinMode(pin_E, OUTPUT);
  pinMode(pin_F, OUTPUT);
  pinMode(pin_G, OUTPUT);
}
撰寫 loop()函數, 函數內執行迴圏依序顯示 0.9 秒的字元, 及關閉 0.1 秒的LED
void loop(){
  for(int i=0; i<words_length; i++){
    showIt(words[i]);
    delay(900);
    clearLED();
    delay(100);
  }
  delay(5000);
}
建立 showIt()函式, showIt()函式傳入要顯示字元的二進位碼, 在依據二進位碼各位元的 0, 1 值決定所對應數碼管的亮與滅
void showIt(byte data){
  int quotient = 0;
  int remainder = 0;
  remainder= data % 2;

  // 取得 G 值
  if(remainder == 1){
    digitalWrite(pin_G, HIGH);
  } else {
    digitalWrite(pin_G, LOW);
  }

  // 取得 F 值
  quotient = data / 2;
  remainder= quotient % 2;
  if(remainder == 1){
    digitalWrite(pin_F, HIGH);
  } else {
    digitalWrite(pin_F, LOW);
  }

  // 取得 E 值
  quotient = quotient / 2;
  remainder= quotient % 2;
  if(remainder == 1){
    digitalWrite(pin_E, HIGH);
  } else {
    digitalWrite(pin_E, LOW);
  } 
 
  // 取得 D 值
  quotient = quotient / 2;
  remainder= quotient % 2;
  if(remainder == 1){
    digitalWrite(pin_D, HIGH);
  } else {
    digitalWrite(pin_D, LOW);
  }
  
  // 取得 C 值
  quotient = quotient / 2;
  remainder= quotient % 2;
  if(remainder == 1){
    digitalWrite(pin_C, HIGH);
  } else {
    digitalWrite(pin_C, LOW);
  }
  
  // 取得 B 值
  quotient = quotient / 2;
  remainder= quotient % 2;
  if(remainder == 1){
    digitalWrite(pin_B, HIGH);
  } else {
    digitalWrite(pin_B, LOW);
  }
   
  // 取得 A 值
  quotient = quotient / 2;
  remainder= quotient % 2;
  if(remainder == 1){
    digitalWrite(pin_A, HIGH);
  } else {
    digitalWrite(pin_A, LOW);
  }

  // 取得 DP 值
  quotient = quotient / 2;
  remainder= quotient % 2;
  if(remainder == 1){
    digitalWrite(pin_DP, HIGH);
  } else {
    digitalWrite(pin_DP, LOW);
  }
}
showIt()函式之二進位解碼示意圖
建立 clearLED()函式, clearLED()函式非常簡單, 就是將對應到數碼管的 DP, A, B, C, D, E, F, G 等腳位信號設定為 LOW(低電位, 不亮)
void clearLED(){
  digitalWrite(pin_DP, LOW);
  digitalWrite(pin_A, LOW);
  digitalWrite(pin_B, LOW);
  digitalWrite(pin_C, LOW);
  digitalWrite(pin_D, LOW);
  digitalWrite(pin_E, LOW);
  digitalWrite(pin_F, LOW);
  digitalWrite(pin_G, LOW);
}

上傳與執行

完成程式撰寫後, 即可將電腦連接 Nano 並上傳程式及查看執行效果

範例實作 Youtube 影片