用Tinkercad學arduino之 74HC595寄存器控制8個led跑馬燈

項目地址:https://www.tinkercad.com/things/5nsSWyQOAkI-chenillard

// Arduino Pattern Creator by PhilCam
//    http://my.free.time.free.fr/
// Use with Uno R3 + 74HC595 + 8 leds

int dataPin = 2;
int latchPin = 3;
int clockPin = 4;
int seq[] = {128, 192, 224, 240, 248, 252, 254, 255, 127, 63, 31, 15, 7, 3, 1, 0, 1, 3, 7, 15, 31, 63, 127, 255, 254, 252, 248, 240, 224, 192, 128, 0};

void setup()
{
  pinMode(dataPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
}

void loop()
{
  for (int n = 0; n < 32; n++)
  {
    digitalWrite(latchPin, LOW);  //Pull latch LOW to start sending data
    shiftOut(dataPin, clockPin, MSBFIRST, seq[n]);  //Send the data
    digitalWrite(latchPin, HIGH);  //Pull latch HIGH to stop sending data
    delay(100);
  }
}

如果需要做8個LED燈或者16個LED燈的跑馬燈效果時,數字引腳(Digital Pin)明顯會不夠用;這時我們可以使用寄存器來實現數字引腳的擴充,這裏使用了74HC595這個型號的位移緩存器進行實驗。

先看下74HC595的引腳說明,共16個引腳,8個輸出引腳對應可以控制8個LED,詳情參考下圖:

 

  • Q0 - Q7(第15腳,第1-7腳):8位並行數據輸出
  • GND(第8引腳):地
  • Q7’(第9引腳):串行數據輸出
  • MR(第10引腳):主復位(低電平)
  • SHCP(第11引腳):數據輸入時鐘線
  • STCP(第12引腳):輸出存儲器鎖存時鐘線
  • OE(第13引腳):輸出有效(低電平)
  • DS(第14引腳):串行數據輸入
  • VCC(第16引腳):電源

74HC595寄存器可以簡單的理解爲是一組8個的開關組,如上圖(8個開關控制LED),這組開關的開關用0和1來控制,0爲關,1爲開。要讓這組燈從左到右像跑馬燈那樣逐個亮,可以簡單列出來這組開關:

  • 1 0 0 0 0 0 0 0 第一個亮,其他關
  • 0 1 0 0 0 0 0 0 第二個亮,其他關
  • 0 0 1 0 0 0 0 0 第三個亮,其他關
  • 0 0 0 1 0 0 0 0 第四個亮,其他關
  • 0 0 0 0 1 0 0 0 第五個亮,其他關
  • 0 0 0 0 0 1 0 0 第六個亮,其他關
  • 0 0 0 0 0 0 1 0 第七個亮,其他關
  • 0 0 0 0 0 0 0 1 第八個亮,其他關

按順序循環上面這組開關就是一個跑馬燈。要讓寄存器出現這樣的開關組,只需要把這組開關轉換成十進制(這八組開關對應的十進制數字爲: 128, 64, 32, 16, 8, 4, 2, 1 ),然後往寄存器寫即可;

TIPS:

  • 一個74HC595寄存器最大隻能處理256(2^8)以內的數字,需要處理更大的數字(更多燈)則加多一個/多個寄存器即可
  • 數字引腳可以輸入輸出,擴展輸入引腳需要的寄存器跟擴張輸出引腳的寄存器是不同的
  • 加多一個74HC595寄存器接線:
    • 新加寄存器的DS接上一個寄存器的Q7’
    • 新加寄存器的SHCP接上一個寄存器的SHCP
    • 新加寄存器的STCP接上一個寄存器的STCP

引用一個圖,可以直觀對寄存器的理解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章