2013年5月7日 星期二

Arduino範例09:利用7段顯示器進行倒數

之前做過另一篇「4026+七段顯示器」這個東西,現在我要改用Ardunio來做了!
(其實我很早就為自己規畫這一系列相關練習,前後呼應!)

操作目的
就是用Ardunio叫它依序對七段顯示器的那幾隻腳位進行輸出,然後就是要顯示出來倒數的樣子。

Video


接線圖
ㄜ... 這次我還是懶得畫了,因為接線也是很單純地將七段顯示器的A~G的腳位接到Ardunio板子上2~8的腳位。然後記得七段顯示器若為共陰,就把共陰極接Ardunio的地。

Code
對我來說,這真的比較難,我花了一個下午讀懂它…
來源:http://coopermaa2nd.blogspot.tw/2010/12/arduino-lab7.html 其中的版本二。

-----------------------------------------------------------------------------------------------------

byte sevenseg[10][7] = { //把以下資料用byte型式儲起來
        //其中[10]是指有10組,[7]指組裡面有7個位元
                  { 1,1,1,1,1,1,0 },  // = 0
                  { 0,1,1,0,0,0,0 },  // = 1
                  { 1,1,0,1,1,0,1 },  // = 2
                  { 1,1,1,1,0,0,1 },  // = 3
                  { 0,1,1,0,0,1,1 },  // = 4
                  { 1,0,1,1,0,1,1 },  // = 5
                  { 1,0,1,1,1,1,1 },  // = 6
                  { 1,1,1,0,0,0,0 },  // = 7
                  { 1,1,1,1,1,1,1 },  // = 8
                  { 1,1,1,0,0,1,1 }   // = 9
                };                      // = 以上是儲存數字0~9,要對應輸出pin腳的號碼。

void setup () {
  pinMode (2, OUTPUT);
  pinMode (3, OUTPUT);
  pinMode (4, OUTPUT);
  pinMode (5, OUTPUT);
  pinMode (6, OUTPUT);
  pinMode (7, OUTPUT);
  pinMode (8, OUTPUT);
} //定義那些pin腳是出輸

void sevensegWrite(byte digit) {
//在跑loop之前要先定義怎麼跑,用btye留下digit當變數          
  byte pin = 2;
  for (byte seg = 0; seg < 7; ++seg) {
    digitalWrite(pin, sevenseg [digit][seg]);
    ++pin;
//這一整串是說明從 Pin 2開始,做digitalWrite的輸出
//首先輸出的Pin 2搭配的[seg]為0,對應byte sevenseg裡的是1 (輸出)
//pin++之後,下一個Pin 3搭配for語法下的[seg]為1…
}
}

void loop() {
  for (byte digit = 10; digit > 0; digit--) {
    sevensegWrite(digit-1);
    delay(1000);
//這裡就單純處理digit的變數,要求從 9 跑到 0 。
}
}

3 則留言:

  1. 我如何讓七段部會因為感測物的引響所導致顯示 感測數值閃爍。

    回覆刪除
    回覆
    1. 這問題有點大,
      (1) 閃爍的部分就0.5秒亮一下,0.5秒顯示一下,就會閃爍了。
      (2) 感測器,你要用那一種的?是ON/OFF的,還是光敏電阻(類比式的)?就把「輸入」寫進程式裡。

      刪除
  2. 請問 大大 我想要把 電子 數位游標卡尺的 數據 轉移到 四位數字七段顯示器 是要怎麼用??
    請點解 謝謝

    回覆刪除