
7 段顯示器,其實就是 7 段 LED 顯示器,然後很神奇的它其實是由 8 顆 LED 燈所組成的…老實說我根本不知道為什麼要叫 7 段顯示器?
不過了解 7 段顯示器原理之後,用 Arduino 操作它就變得很簡單了。
7 段顯示器的原理其實很簡單,就是利用 8 個 LED 組成一個顯示器,如下圖所:

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

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

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

接著我們就可以使用 Arduino 操作 7 段顯示器了,接線方法如下圖:

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