Arduino數碼管顯示實驗?

學習了關於發光二極體(LED)的控制,還有一個值得介紹的就是7段數碼管顯示器,它將7個LED排列成8字形,另外加一個小數點,由不同的燈號組合搭配出0 - 9的數字顯示。基本的7段數碼管只有一位數字,也可以多個組合在一起顯示多位數。

Arduino數碼管顯示實驗

工具/原料

Arduino實驗套件(Arduino UNO控制器,跳線,USB資料線,麵包板)

7段數碼管(共陽) * 1 個

470歐姆直插電阻 * 8個

實驗跳線 * 若干

方法/步驟

準備實驗所用的硬體,如圖所示:

Arduino數碼管顯示實驗

將下列程式複製到Arduino IDE中,如下圖所示:

byte DIGITAL_DISPLAY[10][8] = { //設定0-9數字所對應陣列

{ 1,0,0,0,0,1,0,0 }, // = 0

{ 1,0,0,1,1,1,1,1 }, // = 1

{ 1,1,0,0,1,0,0,0 }, // = 2

{ 1,0,0,0,1,0,1,0 }, // = 3

{ 1,0,0,1,0,0,1,1 }, // = 4

{ 1,0,1,0,0,0,1,0 }, // = 5

{ 1,0,1,0,0,0,0,0 }, // = 6

{ 1,0,0,0,1,1,1,1 }, // = 7

{ 1,0,0,0,0,0,0,0 }, // = 8

{ 1,0,0,0,0,0,1,0 } // = 9

};

void setup() { //設定4-11號數字埠為輸出

for(int i=4;i<=11;i++){

pinMode(i, OUTPUT);

}

}

void loop() {

//0-9數字顯示

for (int k = 0; k < 10; k++) {

int pin = 4;

for (int s = 0; s < 8; s++)

{

digitalWrite(pin, DIGITAL_DISPLAY[k][s]);

pin++;

}

delay(1000);

}

}

Arduino數碼管顯示實驗

如圖所示,僅將 Arduino UNO 控制器使用 USB 資料線連線到電腦,選擇正確的板型(Arduino UNO)、埠號。

Arduino數碼管顯示實驗

Arduino數碼管顯示實驗

Arduino數碼管顯示實驗

點選上傳按鈕,無誤情況下軟體會顯示如下結果,說明程式已經成功上傳到控制器,上傳成功後,斷開 UNO 控制器和電腦的連線,進行實驗電路的搭建。

Arduino數碼管顯示實驗

硬體講解:數碼管顯示器,如下圖所示為7段數碼管顯示器的引腳對應關係、共陰極數碼管和共陽極數碼管的內部連線方式。

其中 a, b, c, d, e, f, g, dp 均為發光二極體,所以我們在電路連線的時候,需要給每個引腳新增一個限流電阻,這就是為什麼本實驗要使用 8 個 470 歐姆電阻。

Arduino數碼管顯示實驗

Arduino數碼管顯示實驗

按照下圖中的電路,進行實驗硬體的連線,數碼管接線詳細說明:

數碼管引腳:a - 連線Arduino UNO D7;

數碼管引腳:b - 連線Arduino UNO D6;

數碼管引腳:c - 連線Arduino UNO D5;

數碼管引腳:d -連線Arduino UNO D11;

數碼管引腳:e -連線Arduino UNO D10;

數碼管引腳:f - 連線Arduino UNO D8;

數碼管引腳:g - 連線Arduino UNO D9;

數碼管引腳:dp - 連線Arduino UNO D4;

Arduino數碼管顯示實驗

使用USB線連線實驗電路和電腦,此處USB線相當於給整個實驗系統供電。硬體連線無誤情況下,實驗效果為數碼管會迴圈顯示數字“0”到數字“9”,除非去掉UNO控制器的供電。數字顯示效果如下圖所示:

Arduino數碼管顯示實驗

Arduino數碼管顯示實驗

程式碼回顧:

1、陣列程式碼:byte DIGITAL_DISPLAY[10][8]:陣列是一種可訪問的變數的集合。

以下為幾種建立陣列的方法:

myInts [6];

myPins [] = {2,4,8,3,6};

mySensVals [6] = {2,4,-8,3,2};

char message[6] = "hello";

宣告一個未初始化陣列,例如:myPins。

在myPins中,聲明瞭一個沒有明確大小的陣列。編譯器將會計算元素的大小,並建立一個適當大小的陣列。

當然也可以初始化陣列的大小,例如在mySensVals中,注意,當宣告一個char型別的陣列時,初始化的大小必須大於元素的個數,以容納所需的空字元。

訪問陣列:

陣列是從零開始索引的,也就說,上面所提到的陣列初始化,陣列第一個元素是為索引0,因此:

mySensVals [0] == 2,mySensVals [1] == 4,依此類推 。

這也意味著,在包含十個元素的陣列中,索引 9 是最後一個元素。因此,

int myArray[10] = {9,3,2,4,3,2,7,8,9,11}; // myArray[9]的數值為11

myArray[10] 索引是無效的,它將會是任意的隨機資訊(記憶體地址)

若訪問的資料超出陣列的末尾(即索引數大於你宣告的陣列的大小 - 1),則將從其他記憶體中讀取資料。從這些地方讀取的資料,除了產生無效的資料外,沒有任何作用。

指定一個數組的值:

mySensVals [0] = 10;

從陣列中訪問一個值:

X = mySensVals [4];

陣列和迴圈

陣列往往在for迴圈中進行操作,迴圈計數器可用於訪問每個陣列元素。

例如:將陣列中的元素通過串列埠列印

int i; for (i = 0; i < 5; i = i + 1) { Serial.println(myPins[i]); }

2、for (int k = 0; k < 10; k++):迴圈語句

for迴圈開頭有3個部分:

(初始化;條件;增量計數){ //語句 }

“初始化”只在迴圈開始執行一次。每次迴圈,都會檢測一次條件;如果條件為真,則執行語句和“增量計數”,之後再檢測條件。當條件為假時,迴圈終止。

程式碼位置如圖所示:

Arduino數碼管顯示實驗

為了方便大家實驗,防止在複製程式碼的時候出現錯誤,特將程式碼和電路圖

Fritzing原始檔上傳至網盤供大家下載學習。下載地址:

開啟連結後,如圖所示,點選下載即可

Arduino數碼管顯示實驗

注意事項

注意本文中使用的數碼管為共陽極數碼管,若使用共陰數碼管則顯示結果將不正確。

您在試驗過程中遇到的問題,或是對我寫的有什麼建議,都可以給我留言,我會及時的給大家回覆。

相關問題答案