項目地址: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
引用一個圖,可以直觀對寄存器的理解。