目錄
1.材料清單
2.實驗原理
3.代碼分析
4.總結
材料清單 | 型號&數量 |
---|---|
arduino開發板 | UNO*1 |
數碼管 | 5161BS(共陽極)*1 |
電阻 | 330Ω*1 |
導線 | 若干 |
引腳分佈圖:
有了上面兩張圖,就可以動手連線了,A-G分別接在了板子上2-8引腳,搭建完成的板子是這樣的:
廢話不說,直接寫代碼。
(完整代碼)
unsigned char num[10][8]={{2,3,4,5,6,7},{3,4},{2,3,5,6,8},{2,3,4,5,8},{3,4,7,8},{2,4,5,7,8},{2,4,5,6,7,8},{2,3,4},{2,3,4,5,6,7,8},{2,3,4,7,8}};
void setup()
{
for(int i=2;i<9;i++)
{
pinMode(i,OUTPUT);
digitalWrite(i,HIGH);
}
}
void Display(char a)
{
unsigned char index=0;
while(num[a][index])
{
digitalWrite(num[a][index],LOW);
index++;
}
}
void loop()
{
Display(random(0,10));
delay(1000);
setup();
}
分析:
我的思路是這樣的,瞭解數碼管的都知道無非是讓它對應的腳輸出低電平即可(共陽極),那麼我就把要變化的腳寫入數組中。
至此這個程序已經完成一半了,setup()函數定義數碼管連接的幾個引腳爲OUTPUT(輸出),並把電平拉高,然後進入到主函數(loop()函數)中,產生一個0-9的隨機數作爲實參傳給Display()函數,在顯示隨機數之後,延時1s並重置各個引腳爲高電平(調用setup()函數)。
下面分析Display()函數:
通過while循環來判斷是否顯示這個數所對應的引腳已全部被拉低,如果未完全,則繼續,完全則退出。
沒想到arduino的數碼管這麼繁瑣,本來是想Display()函數中用switch來判斷傳進來的參數併產生對應動作,但是每個數字對應的段選引腳確實太多,會導致代碼很多,囉嗦,因此決定用二維數組+while判斷來實現。目前數組裏只加了數字0-9的段選數據,有興趣的讀者可以自行豐富。
期待更多精彩…