今天這篇來說說LED的進階應用–-7段顯示器,7段顯示器其實本質上來說就像是把8顆LED封在一個特殊的封裝,讓我們使用上看起來像是個數字,可以做為產品的低成本顯示功能,當然在實務應用來說,通常會使用2-4個數字的原件(1個數字比較少用),我們今天先來用GPIO的方式,也就是直接用8隻腳位控制來做個數字倒數機制,下篇再來了解如果想要用少一點的腳位控制,可以用甚麼方法。
1.7段顯示器原理
JIMI哥在網路上找個7段顯示器的內部電路圖讓各位朋友參考一下,規格上有分共陽與共陰極兩種,共陽極就是把發光二極體的陽極相連,共陰則反之,看你的應用決定要哪種比較適合。
圖上的數字是指7顯示器的針腳位編號,COM是common共用的意思,A-G和DP則是以順時針的方向,標示7段顯示器位置,其中DP是指右下角的點。
2.電路接法
因為我們這次要先以GPIO方式(一般IO)測試,所以我們就直接將7段顯示器的顯示腳位(A-G+DP)串聯限流電阻,再分別接入Arduino Uno的數位腳位即可開始控制,這次選用共陰極的7段顯示器,TinkerCAD電路相關接法如下:
此次一樣使用Uno編號2-9的腳位,分別接入A、B、C、D、E、F、G、DP的位置,後續程式就依照這樣的編排來進行數字的顯示。
3.程式功能
+程式碼
這次要實現的功能很簡單,當uno上電後,7段顯示器開始進行數字倒數,從9-0無限循環,所以一開始我們會先建立數字顯示的相關陣列與設定,待需要相關參數呼叫出來即可以使用。
完整程式碼如下:
//set number array for digital output,HIGH=0,LOW=0
byte seg_7[10][8]=
{
{1,1,1,1,1,1,0,0}, //0
{0,1,1,0,0,0,0,0}, //1
{1,1,0,1,1,0,1,0}, //2
{1,1,1,1,0,0,1,0}, //3
{0,1,1,0,0,1,1,0}, //4
{1,0,1,1,0,1,1,0}, //5
{1,0,1,1,1,1,1,0}, //6
{1,1,1,0,0,0,0,0}, //7
{1,1,1,1,1,1,1,0}, //8
{1,1,1,0,0,1,1,0} //9
};
void setup() {
// put your setup code here, to run once:
int i=0;
for(i=2;i<10;i++){ //set 2-9 as output
pinMode(i,OUTPUT);
}
}
void loop()
{
// put your main code here, to run repeatedly:
int j,k;
for (k=9;k>=0;k--)
{
for (j=2;j<10;j++)
{
digitalWrite(j,seg_7[k][j-2]);
}
delay(500); //delay 0.5s
}
}
+程式講解
-
第2行-第14行:我們先把數字的顯示建立一個陣列,因為7段顯示器的腳位對應到了編號2-9與A-DP,舉例來說如果我們想顯示0這個數字,從編號2到編號9腳位輸出就是 HIGH、HIGH、HIGH、HIGH、HIGH、HIGH、LOW、LOW,轉換成數字顯示就是11111100,其他顯示數字也就是根據這樣的方法建立。(如果不懂的朋友可以在一次review上一節的7段顯示器的A-DP位置,應該就可以了解)
-
第27-34行: 這就是一個for多重迴圈的概念,不複雜,最內圈(第29行-32行)就是顯示單個數字,從9開始,外圈則是顯示9-0數字無限循環。
4.小結&懶人包
這篇就來了解一下7段顯示器的使用,其實概念跟8顆LED一致,就看你想要怎麼應用。這邊提一個這個實驗的想法,有沒有覺得用GPIO的接線也太多了點(😄),沒錯! GPIO的接法好處就是直接簡單,但缺點就是占用腳位太多,一個數字不算共陽或共陰腳位起算就是要用8個,需要越多數字就是在加+1,如果當你腳位的數量是有限制的,比如其他腳位需要留給其他的感測器或應用,這時候就可以考慮增加一些成本,多顆BUFFER IC來做控制,最大的好處當然是只需要用較少腳位就可以控制,有興趣的朋友可再看看後續的文章介紹。
最後附上這次GPIO7段顯示器的懶人包連結(Arduino IDE ino檔)供大家下載: