隋杰峰
上一期,我們介紹了通過74HC595移位寄存器只用UNO的3個管腳就可以控制8個LED的亮滅。本期,我們將進一步介紹74HC595的一些應(yīng)用,將分別做一個8位二進制計數(shù)器和一個流水燈項目。
在元件的使用和電路的連接上,依然沿用上一期的元件和電路。
需要的元件(如表1)
電路連接(如圖1)
程序設(shè)計
1.8位二進制計數(shù)器
上一期的文章介紹了在shiftOut模塊中輸入數(shù)值,控制8個LED亮滅的過程,實際上,就是將十進制的數(shù)值轉(zhuǎn)換為8位二進制,依次送入移位寄存器,明白了這個過程,就可以設(shè)計一個程序,來展現(xiàn)二進制進位了,程序如圖2所示。
我們來解釋一下這個程序:
首先聲明一個變量i為整數(shù),并賦值為0;
然后是一個for循環(huán)模塊,讓i依次(步長為1)取從0到255的值,即第一次取值0,第二次取值1,第三次取值2……第256次取值255;
接著就是我們熟悉的模塊,在上一期,我們用它來控制了8個LED的亮滅;
最后延時200毫秒,作用是讓每一次輸入數(shù)值后,LED亮滅的狀態(tài)保持200毫秒。
上傳程序后,我們就可以看到LED從全滅到全亮的過程,LED從右往左開始被點亮,它們每200毫秒變化一下,相當(dāng)于從二進制00000000每次加1,一直加到11111111,再重新開始,如此重復(fù)執(zhí)行。
2.流水燈
如果要設(shè)計一個流水燈,只需要將下面的二進制數(shù)一個個輸入即可,為了方便,我們可以將它們轉(zhuǎn)換成十進制或者十六進制放到數(shù)組里(如表2)。
以十進制為例,流水燈程序如圖3所示。
上面的程序采用了數(shù)組,依次取出數(shù)組mylist中的8個數(shù)值,轉(zhuǎn)換為二進制輸入移位寄存器,就實現(xiàn)了流水燈的效果。以十六進制為例,流水燈程序如圖4所示。
需要注意的是,以上兩個程序,在用數(shù)組時,數(shù)值(或字符)之間是英文狀態(tài)下的“,”,十六進制字符前面要加“0x”。
實際上,我們仔細(xì)觀察上面的8個二進制數(shù),會發(fā)現(xiàn)二進制數(shù)中1的位置是依次從最低位到最高位的,因此,我們也可以用移位的思路設(shè)計程序,程序如圖5所示。
當(dāng)然,我們也可以設(shè)計其他效果的流水燈程序,這里不再一一舉例。
結(jié)束語
74HC595是我非常喜歡的一個芯片,它能幫助我們增加數(shù)字輸出引腳的數(shù)量,因此,可以讓Arduino送出更多的數(shù)字信號,也可以當(dāng)作數(shù)字開關(guān)使用,控制更多的低電壓元件,如LED,甚至可以通過三極管或繼電器模塊控制一些高電壓元件。