利用74HC595在串行口擴(kuò)充8位的并行輸出接口
74HC595和74LS164一樣,也是串入并出的移位寄存器。
它們經(jīng)常出現(xiàn)在單片機(jī)系統(tǒng)中,用來(lái)擴(kuò)充并行輸出接口。
看過(guò)一些資料,送往74HC595的串行信號(hào),基本上都是用單片機(jī)并行接口的某個(gè)位,模擬SPI的時(shí)序,輸出出來(lái)的。
這種方法,靈活性是它的優(yōu)點(diǎn),速度低是它的缺點(diǎn)。
如果使用51單片機(jī)的串口方式0,就可以得到更高的速度和更簡(jiǎn)練的編程方法。
在一般的單片機(jī)教材上,講到串口方式0的時(shí)候,都給出了用164擴(kuò)充并口的方法。但是對(duì)595這個(gè)后起之秀,介紹甚少。
其實(shí),595和164的功能是一樣的,只是多了一個(gè)“更新輸出”的控制引腳。
下面,做而論道介紹使用四片74HC595擴(kuò)充四個(gè)8位接口、驅(qū)動(dòng)數(shù)碼顯示器的方法。
電路如下所示:
注意:電路圖中省略了限流電阻。實(shí)際制作時(shí),在每個(gè)段,串聯(lián)1K左右的電阻即可。
這個(gè)顯示電路,是屬于靜態(tài)顯示的方法,不需要經(jīng)常的調(diào)用顯示子程序,使用起來(lái)非常方便。
這個(gè)顯示電路,僅僅畫(huà)出了四片595,實(shí)際上,可以仿照現(xiàn)在電路的結(jié)構(gòu),繼續(xù)級(jí)連下去。當(dāng)然,級(jí)連過(guò)多,會(huì)導(dǎo)致信號(hào)不穩(wěn)定,那就要加上驅(qū)動(dòng)電路了。
這個(gè)顯示電路,實(shí)際上也就是LED點(diǎn)陣屏幕上,“顯示一行”的驅(qū)動(dòng)電路。如果配上16行的譯碼電路,就可以驅(qū)動(dòng)16×32的點(diǎn)陣屏幕了。
用74HC595驅(qū)動(dòng)數(shù)碼管的程序如下。
;用595并行輸出帶動(dòng)4個(gè)數(shù)碼顯示器.
;=============================================
ORG 0000H
SJMP START
;-----------------------------------------------------------------
START:
MOV SCON, #0 ;設(shè)置串口方式0
MOV 30H, #1 ;在顯示緩沖區(qū)寫(xiě)入數(shù)字:8031
MOV 31H, #3
MOV 32H, #0
MOV 33H, #8
CALL TXD_595 ;顯示
LJMP $ ;此處可以執(zhí)行其它程序,不必經(jīng)常調(diào)用顯示程序
;-----------------------------------------------------------------
;串口發(fā)送到595的子程序.
;-----------------------------------------------------------------
TXD_595:
MOV R0, #30H ;顯示緩沖區(qū)首址
TXD_B:
MOV A, @R0 ;取來(lái)待顯示的數(shù)據(jù)
ADD A, #(TAB - $ - 3)
MOVC A, @A+PC ;查出七段碼
MOV SBUF, A ;串口輸出8位數(shù)
INC R0
JNB TI, $ ;等待輸出完畢
CLR TI ;很快,8us(@12MHz)即可輸出完8位數(shù)
CJNE R0, #34H, TXD_B ;共輸出4字節(jié)
CLR P3.2 ;令595更新顯示
SETB P3.2 ;用164,這兩行就免了
RET
TAB:
DB 0C0H,0F9H,0A4H,0B0H, 99H, 92H, 82H,0F8H ;共陽(yáng)極0-7顯示代碼
DB 80H, 90H, 88H, 83H,0C6H,0A1H, 86H, 8EH ;共陽(yáng)極8-F顯示代碼
;=============================================