2014年6月20日 星期五

[Arduino] 7 段顯示器的操作 Seven-Segment display -1

image
7 段顯示器,其實就是 7 段 LED 顯示器,然後很神奇的它其實是由 8 顆 LED 燈所組成的…老實說我根本不知道為什麼要叫 7 段顯示器

不過了解 7 段顯示器原理之後,用 Arduino 操作它就變得很簡單了。

7 段顯示器的原理其實很簡單,就是利用 8 個 LED 組成一個顯示器,如下圖所:
image

分成 A、B、C、D、E、F、G、P  8個 LED,分別控制不同 LED 亮燈暗燈,就可以顯示出最簡單的 0~9 等數字。
7-segments_Indicator

單顆的7 段顯示器背面會有 10 個接腳,且又分為共陰與共陽兩種,基本原理其實很簡單:就是差在 8 個 LED 是電源端共用,或是接地段共用而已。剛入手 7 段顯示器的時候可以用簡單的 3V 電源,測試各段 LED 是否可正常操作,千萬不要像我一樣愚蠢到用 9V 的電源測試,會整個燒壞掉~~~
image

知道以上原理之後,我們可以簡單地填出一張表,對應顯示 0~9 的數字各顯示器的明亮狀態,這邊用 1 表示開燈,0 表示暗燈。以共陰 7 段顯示器為填寫範例,共陽顯示器只要把 0 與 1 交換填寫就可以了。(這邊我讓小數點 P 常暗,所以就沒寫出 P 的明亮狀態)
image

接著我們就可以使用 Arduino 操作 7 段顯示器了,接線方法如下圖:
image
Arduino 的 digital output pin 輸出為 5V,為了避免 LED 受到過大的電壓,每個接腳都接上一個 220 歐姆電阻分壓避免 LED 燒掉就可以了,接著就可以來寫 sketch 了!

這邊會用到一個語法 bitRead(),結構式如下:

bitRead(x, n)
x 要讀取的數字,如果輸入的是十進位,arduino 會自動轉成二進位
n 讀取的字元,0 代表最右邊的字元

EX:x =10010
bitRead (x,0) = 0
bitRead (x,1) = 1
bitRead (x,3) = 0
bitRead (x,4) = 1

Sketch & 解說:

int i;
int j;

// 設定一個 matrix,B0111111 最前面的 B 代表資料型態為 byte
// 後面跟的 0111111 則是上面對照表的 gfedcba

const byte num[10]={
    B0111111,  //0
    B0000110,  //1
    B1011011,  //2
    B1001111,  //3
    B1100110,  //4
    B1101101,  //5
    B1111101,  //6
    B0000111,  //7   
    B1111111,  //8
    B1101111   //9   
};

// 設定顯示器各段對應的 pin
const int seg[]={2,3,4,5,6,7,8};  //ABCDEFG

// 設定各段 pin 為 output
void setup()
{
  for(i=0;i<7;i++)
    pinMode(seg[i],OUTPUT);
}

void loop()
{
  for(i=0;i<10;i++)
  {
    for(j=0;j<7;j++)
    {
  // 讀取 0~9 matrix 裡的數字,ex: B0111111 的第0~6個位元
  // 並由對應的 pin 腳輸出高電壓,使 7 段 LED 發出對應的明亮

      if(bitRead(num[i],j))
        digitalWrite(seg[j],HIGH);
      else
        digitalWrite(seg[j],LOW);       
    }
  delay(1000);   
  }
}

實際成品會是這樣! 

沒有留言:

張貼留言

Anything That's Worth Chatting

Related Posts Plugin for WordPress, Blogger...