第1步:組件
-Arduino UNO (x1)
-74HC595移位寄存器( x2)
-LEDs (x16)
-220omh電阻器(x16)
-多根導線
-兩個面包(一個帶有400針,另一個帶有830)
-電位器,用于控制亮度(可選)
第2步:電路
進行電路(見上文)并按如下方式連接第一個移位寄存器:
-GND(引腳8)接地
-Vcc(引腳16)到5V
-OE(引腳13)接地
- MR(引腳10)至5V
-DS(引腳14)至Arduino引腳11
-SH_CP(引腳11)至Arduino引腳12
-ST_CP (引腳12)到Arduino引腳8
連接第二個移位寄存器完全相同,但是將DS(引腳14)連接到第一個寄存器引腳9。之后,將引腳:從兩個寄存器連接到LED的1、2、3、4、5、6、7和15。這種連接使所有引腳始終處于活動狀態且可尋址,但是當Arduino通電時,某些LED可能會打開。解決方案是將MR(引腳10)和OE(引腳13)直接連接到Arduino,但是這樣一來,您必須犧牲2個Aurduino引腳。
要添加更多的移位寄存器,就像第二個一樣寄存器。始終將MR和OE引腳直接連接到Arduino,將DS引腳直接連接到先前的寄存器。
如果要調節LED的亮度,請按照上圖所示連接電位計以控制所有LED的電阻。
第3步:代碼
現有代碼旨在用于有限數量的移位寄存器和沒有通用的功能/方法可以做到這一點。作為軟件開發人員,這對我來說是不可接受的,并且我習慣于使所有內容盡可能地動態,沒有限制。我重新設計了現有代碼示例,以允許您使用無限數量的移位寄存器。參見下面的代碼:
int numOfRegisters = 2;
byte * registerState;
void setup(){
//初始化數組
registerState =新字節[numOfRegisters];
for(size_t i = 0; i
registerState [i] = 0;
}
//。.. setup
}
void regWrite(int pin,bool state){
//確定寄存器int reg = pin/8;
//確定實際寄存器的
int actualPin = pin-(8 * reg);
//開始會話
digitalWrite(latchPin,LOW);
for(int i = 0; i
//獲取寄存器的實際狀態
字節*狀態=?isterState[i];
//更新狀態
if(i == reg){
bitWrite(* states,ActualPin,state);
}
//寫入
shiftem(dataPin,clockPin,MSBFIRST,* sta TES);
}
//結束會話
digitalWrite(latchPin ,HIGH);
}
第4步:最終代碼
我將完整的源代碼發布在github上,因為這里不可讀:
https://github.com/jr2002008/Arduino-74HC595-shift-registers/blob/master/ArduinoLEDsWithShiftRegisters/ArduinoLEDsWithShiftRegisters.ino
在最終代碼中,我為這16個LED添加了幾種效果。上面的視頻演示了這些效果。如果要添加更多的LED,請按照前面所述連接更多的寄存器,并在代碼中更改 numOfRegisters 的值(還可以調整效果的邏輯)。
您也可以使用此代碼不僅僅用于LED,如果您只是想為Arduino使用更多引腳,請使用 regWrite(int引腳,布爾狀態)函數為任何引腳寫入狀態,并且沒有限制多少移位寄存器您正在使用,只需更改 numOfRegisters 的值,其他所有操作都會自動執行。
責任編輯:wv
-
led
+關注
關注
242文章
23264瀏覽量
660655 -
移位寄存器
+關注
關注
3文章
258瀏覽量
22273 -
74HC595
+關注
關注
7文章
191瀏覽量
30849 -
Arduino
+關注
關注
188文章
6469瀏覽量
186984
發布評論請先 登錄
相關推薦
評論