2015年5月25日 星期一

課程19-四位數七段顯示器

目的:

使用Arduino 控制共陽極四位數七段顯示器,顯示0~9數值。

電子元件:
麵包板 x 1
Arduino 主板 x 1
共陽極四位數七段顯示器 x 1

電路圖:




程式碼:


  1. #define LedHigh 0
  2. #define LedLow 1
  3. const byte pos[4] = {2, 3, 4, 5};
  4. const byte led[7] = {6, 7, 8, 9, 10, 11, 12};
  5. const boolean seven_seg_digits[10][7] = {
  6. {LedHigh,LedHigh,LedHigh,LedHigh,LedHigh,LedHigh,LedLow},//0
  7. {LedLow,LedHigh,LedHigh,LedLow,LedLow,LedLow,LedLow},//1
  8. {LedHigh,LedHigh,LedLow,LedHigh,LedHigh,LedLow,LedHigh},//2
  9. {LedHigh,LedHigh,LedHigh,LedHigh,LedLow,LedLow,LedHigh},//3
  10. {LedLow,LedHigh,LedHigh,LedLow,LedLow,LedHigh,LedHigh},//4
  11. {LedHigh,LedLow,LedHigh,LedHigh,LedLow,LedHigh,LedHigh},//5
  12. {LedHigh,LedLow,LedHigh,LedHigh,LedHigh,LedHigh,LedHigh},//6
  13. {LedHigh,LedHigh,LedHigh,LedLow,LedLow,LedLow,LedLow},//7
  14. {LedHigh,LedHigh,LedHigh,LedHigh,LedHigh,LedHigh,LedHigh},//8
  15. {LedHigh,LedHigh,LedHigh,LedHigh,LedLow,LedHigh,LedHigh}//9
  16. };
  17. void setup(){
  18. for(int i=0;i<7;i++){
  19.   pinMode(led[i],OUTPUT);
  20. }
  21.  for(int i=0;i<4;i++){
  22.   pinMode(pos[i],OUTPUT);
  23. }
  24. digitalWrite(pos[0],HIGH);
  25. digitalWrite(pos[1],HIGH);
  26. digitalWrite(pos[2],HIGH);
  27. digitalWrite(pos[3],HIGH);
  28. }
  29. void loop(){
  30. for(byte digit=0;digit<=9;digit++){
  31.    delay(500);
  32.    sevenSegWrite(digit);
  33.  }
  34.  delay(1000);
  35. }
  36. void sevenSegWrite(byte digit){
  37.  for(byte seg=0;seg<=6;seg++){
  38.   digitalWrite(led[seg],seven_seg_digits[digit][seg]);
  39.  }
  40. }


程式說明:

第一行~第二行 定義LedHigh 為0、LedLow 為1。
第三行 使用陣列pos[4]對應四位數第1個號碼到第4個號碼(Pin2、Pin3、Pin4、Pin5)
第四行 使用陣列led[7]對應七段的a、b、c、d、e、f、g 和 Pin6、7、8、9、10、11、12
第五行~第十六行 使用二維陣列,宣告數字0~9分別對應的LED區段,參考下列圖表。
第十七行~第二十八行 使用一個For 迴圈宣告led腳位、pos腳位為輸出腳位。
第二十四行~第二十七行 宣告pos都輸出高電位
第二十九行~第三十五行 為主程式
第三十行~地三十三行 使用For 迴圈,讓七段顯示器,顯示0~9的數值。
第三十一行 延遲0.5秒。
第二十二行 把要顯示的數字傳到sevenSegWrite 函式作處理。
第三十四行 延遲1秒。
第三十六行~第四十行 使用一個Function(sevenSegWrite),來處理七段顯示的數字,會傳入要顯示的數字。
第三十七行~第三十九行 使用一個For 迴圈,分別對七個led(a、b、c、d、e、f、g)做設定。
第三十八行 依據傳入的數字,設定每一個LED腳位的狀態,亮或暗。

圖表:
共陽極四位數七段顯示器腳位圖
共陽極七段顯示器,0 到 9 這十個阿拉伯數字與各節段的對應表如下:
顯示數字
dp
a
b
c
d
e
f
g
0
0
1
1
1
1
1
1
0
1
0
0
1
1
0
0
0
0
2
0
1
1
0
1
1
0
1
3
0
1
1
1
1
0
0
1
4
0
0
1
1
0
0
1
1
5
0
1
0
1
1
0
1
1
6
0
1
0
1
1
1
1
1
7
0
1
1
1
0
0
0
0
8
0
1
1
1
1
1
1
1
9
0
1
1
1
1
0
1
1

實驗影片:






沒有留言:

張貼留言

Arduino、Raspberry Pi、System Integration,如有問題或建議,可以互相討論喔~