| Arduino教學 | 7段顯示器- GPIO| 203 |

今天這篇來說說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電路相關接法如下:

7段顯示器

此次一樣使用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
    }
}

+程式講解

  1. 第2行-第14行:我們先把數字的顯示建立一個陣列,因為7段顯示器的腳位對應到了編號2-9與A-DP,舉例來說如果我們想顯示0這個數字,從編號2到編號9腳位輸出就是 HIGH、HIGH、HIGH、HIGH、HIGH、HIGH、LOW、LOW,轉換成數字顯示就是11111100,其他顯示數字也就是根據這樣的方法建立。(如果不懂的朋友可以在一次review上一節的7段顯示器的A-DP位置,應該就可以了解)

  1. 第27-34行: 這就是一個for多重迴圈的概念,不複雜,最內圈(第29行-32行)就是顯示單個數字,從9開始,外圈則是顯示9-0數字無限循環。

4.小結&懶人包

這篇就來了解一下7段顯示器的使用,其實概念跟8顆LED一致,就看你想要怎麼應用。這邊提一個這個實驗的想法,有沒有覺得用GPIO的接線也太多了點(😄),沒錯! GPIO的接法好處就是直接簡單,但缺點就是占用腳位太多,一個數字不算共陽或共陰腳位起算就是要用8個,需要越多數字就是在加+1,如果當你腳位的數量是有限制的,比如其他腳位需要留給其他的感測器或應用,這時候就可以考慮增加一些成本,多顆BUFFER IC來做控制,最大的好處當然是只需要用較少腳位就可以控制,有興趣的朋友可再看看後續的文章介紹。

最後附上這次GPIO7段顯示器的懶人包連結(Arduino IDE ino檔)供大家下載:

203-7SEG-GPIO.ino

發佈留言

Close Menu