跟我學(xué)51單片機(jī)(五):?jiǎn)纹瑱C(jī)動(dòng)態(tài)掃描驅(qū)動(dòng)數(shù)碼管
74HC595 最多需要5 根控制線, 即SDI(Pin14)、SCK(Pin11)、RCK(Pin12)、 (Pin10)和(Pin13)。圖2 中將 直接接到高電平, 用軟件來(lái)實(shí)現(xiàn)寄存器清零; 直接接到低電平, 一直輸出有效。把其余三根線和單片機(jī)的I/O 口相接, 即可實(shí)現(xiàn)對(duì)74HC595 的控制。數(shù)據(jù)從SDI 口送入74HC595 , 在每個(gè)SCK 的上升沿, SDI 口上的數(shù)據(jù)移入寄存器, 在SCK 的第9 個(gè)上升沿, 數(shù)據(jù)開(kāi)始從SDO 移出。如果把第一個(gè)74HC595的SDO 和第二個(gè)74HC595 的SDI 相接, 數(shù)據(jù)即移入第二個(gè)74HC595 中, 照此一個(gè)個(gè)接下去, 可接任意多個(gè)。數(shù)據(jù)全部送完后, 給RCK 一個(gè)上升沿, 寄存器中的數(shù)據(jù)即置入鎖存器。此時(shí)為低電平, 數(shù)據(jù)即從并口Q0 ~ Q7 輸出。
74HC245 為八總線收發(fā)器芯片,即可以將數(shù)據(jù)從A 總線端口傳送到B 總線端口,也可將數(shù)據(jù)從B 總線端口傳送到A 總線端口。傳送方向由方向控制管腳DIR(芯片1 腳)輸入的邏輯電平而定。其真值表如表3 所示:
表3 74HC245輸入輸出真值表
H 代表高電平,L 代表低電平,X 代表不定的狀態(tài)。
四、程序設(shè)計(jì)
本講設(shè)計(jì)實(shí)例核心程序如下:
……
#define SDI P2_7 ( 1)
#define SCLK P2_6 ( 2)
#define RCLK P2_5 ( 3)
……
void dat_in(unsigned char dat) ( 4)
{
unsigned char i; ( 5)
for(i=0;i8;i++) ( 6)
{
SCLK=0; ( 7)
SDI=dat0X80; ( 8)
dat《=1; ( 9)
SCLK=1; ( 10)
}
RCLK=0; ( 11)
RCLK=1; ( 12)
}
程序詳細(xì)說(shuō)明:
?。?)將數(shù)據(jù)輸出端定義為P2.7 管腳。
?。?)將數(shù)據(jù)時(shí)鐘輸出端定義為P2.6 管腳。
?。?)將寄存器時(shí)鐘輸出端定義為P2.5 管腳。
?。?)數(shù)據(jù)傳入函數(shù),傳入一字節(jié)。
?。?)定義一個(gè)無(wú)符號(hào)字符型變量。
(6)要因?yàn)橐獋魉鸵粋€(gè)字節(jié),故要8 次。
(7)數(shù)據(jù)時(shí)鐘先輸出低。
(8)讓數(shù)據(jù)管腳輸出傳入字節(jié)的最高位。
?。?)傳入字節(jié)左移一位。
?。?0)數(shù)據(jù)時(shí)鐘輸出高,上升沿將數(shù)據(jù)所存儲(chǔ)至74HC595 數(shù)據(jù)寄存器中。
?。?1)寄存器時(shí)鐘先輸出低。
?。?2)寄存器時(shí)鐘輸出高,上升沿將數(shù)據(jù)所存儲(chǔ)至74HC595 數(shù)據(jù)寄存器中。
以上字程序的作用, 當(dāng)發(fā)送一個(gè)字節(jié)的顯示數(shù)據(jù)的時(shí)候, 通過(guò)74HC595 進(jìn)行串行轉(zhuǎn)并行的控制,每次從單片機(jī)IO發(fā)送1Bit出去, 循環(huán)8次, 完成發(fā)送一個(gè)字節(jié),之后再的輸出端以一個(gè)字節(jié)的方式傳輸給數(shù)碼管, 實(shí)現(xiàn)顯示。
五、調(diào)試要點(diǎn)與實(shí)驗(yàn)現(xiàn)象
接好硬件電路,通過(guò)冷啟動(dòng)方式將程序所生成的。hex 文件下載到單片機(jī)運(yùn)行后,復(fù)位單片機(jī),就可以觀察到板上8 個(gè)數(shù)碼管都點(diǎn)亮(見(jiàn)圖3),并從數(shù)字0 到9 變化閃爍。調(diào)試的時(shí)候需要注意的是,數(shù)碼管的使能控制端(見(jiàn)圖2)必須用跳線帽跳上,從而讓74HC138 能工作輸出。不需要用到數(shù)碼管時(shí)可以, 反之,跳開(kāi)以節(jié)省系統(tǒng)電流損耗。
圖3 數(shù)碼管顯示效
另外動(dòng)態(tài)掃描過(guò)程中, 數(shù)碼管顯示的亮度與驅(qū)動(dòng)電流、點(diǎn)亮?xí)r間和關(guān)斷時(shí)間有關(guān), 所以應(yīng)當(dāng)適當(dāng)調(diào)整驅(qū)動(dòng)電流大小和掃描頻率, 從而控制顯示所需要的亮度。這在驅(qū)動(dòng)尺寸較大的數(shù)碼管組時(shí)更是如此,為了穩(wěn)定顯示,硬件方面必須達(dá)到該有的驅(qū)動(dòng)能力,如在驅(qū)動(dòng)端再接達(dá)林頓管等。軟件方面,應(yīng)在實(shí)際的調(diào)試過(guò)程中不斷的嘗試(見(jiàn)本講程序中所掃描次數(shù)的經(jīng)驗(yàn)值),找到一個(gè)最佳臨界點(diǎn),即要注意動(dòng)態(tài)掃描的延時(shí)間隔和掃描次數(shù)。
六、總結(jié)
本講介紹了單片機(jī)動(dòng)態(tài)驅(qū)動(dòng)數(shù)碼管的原理并給出了實(shí)例,通過(guò)該講,我們可以總結(jié)如下:
動(dòng)態(tài)掃描驅(qū)動(dòng)數(shù)碼管的優(yōu)點(diǎn):當(dāng)顯示位數(shù)較多時(shí),采用動(dòng)態(tài)顯示方式比較節(jié)省I/O 口,硬件電路也較靜態(tài)顯示簡(jiǎn)單;缺點(diǎn):其穩(wěn)定度不如靜態(tài)顯示方式。而且在顯示位數(shù)較多時(shí)CPU要輪番掃描,占用CPU較多的時(shí)間。
總的來(lái)說(shuō),無(wú)論是動(dòng)態(tài)還是靜態(tài)顯示,其顯示更新的速率不能太快,如數(shù)據(jù)不停變化,太快則無(wú)法看清楚顯示的內(nèi)容,在軟件設(shè)計(jì)是必須注意的。另外,在同等條件下動(dòng)態(tài)顯示的亮度比靜態(tài)顯示要差一些,所以在適當(dāng)提高驅(qū)動(dòng)電流,例如使用限流電阻,就應(yīng)略小于靜態(tài)顯示電路中的,或者使用緩沖驅(qū)動(dòng)芯片。下講將重點(diǎn)講述單片機(jī)外部中斷以及應(yīng)用,以對(duì)紅外遙控器進(jìn)行解碼作為實(shí)例,敬請(qǐng)期待。
紅外遙控器相關(guān)文章:紅外遙控器原理萬(wàn)能遙控器相關(guān)文章:萬(wàn)能遙控器代碼
51單片機(jī)相關(guān)文章:51單片機(jī)教程
評(píng)論