隋杰峰


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