許多時候,數(shù)碼管與單片機幾乎是形影不離的!
當需要驅(qū)動的數(shù)碼管超過 2 位(個) 時,大部分情況下都會使用掃描方式進行分時驅(qū)動.
我們這里示例一個需要驅(qū)動 8 位數(shù)碼管時的考慮,比較,以期可以舉一反三,更好取舍!(示例使用共陽極數(shù)碼管).
圖 1 就是最普通的驅(qū)動方案----使用 8 次分時顯示完成一輪顯示:
圖 2 也是是最普通的驅(qū)動方案----使用 4 次分時顯示完成一輪顯示:
圖 1 圖 2 對單片機而言,要求是有區(qū)別的:
區(qū)別又分別 2 種情況: 直接使用端口做筆段驅(qū)動還是通過串行到并行芯片來驅(qū)動筆段.(例如HC595,HC164等.)
端口直接驅(qū)動筆段:
圖 1 使用 8SEG + 8 COM =16 個端口.圖 2 使用 2*8SEG + 4 COM =20 個端口.
--------圖 2 用 4 個端口換來了省 4 個三極管和掃描一輪時間快一倍! -----推薦使用 圖 2 !
通過串行到并行芯片來驅(qū)動筆段:
這種方案又有不同區(qū)別:
圖 3 是讓 2 個 HC164 自身也連接為串聯(lián)狀態(tài),單片機僅僅提供 2 根連接線就可以了.-----但是,需要連續(xù)發(fā)送 16 位二進制數(shù)據(jù),才完成一次 2 位數(shù)碼管顯示.
圖 4 是讓 2 個 HC164 自身不連接為串聯(lián)狀態(tài),而是時鐘線公共使用,數(shù)據(jù)線分別使用,單片機需要提供 3 根連接線才行.-----但是,這種方式僅僅需要連續(xù)發(fā)送 8 位二進制數(shù)據(jù),就完成一次 2 位數(shù)碼管顯示.(每次分別 2 個 HC164 各同時發(fā)送 1 位!)
很明顯,圖 4 的速度比圖 3 的速度要快差不多一倍!-----因此,推薦使用圖 4 是有利的!
;=============================================
示例程序:
; 2 個 HC164 三線制驅(qū)動子程序----溫濕度顯示
B_TLED164:;寫數(shù)據(jù)到HC164
MOV_ JS164,#8;移位計數(shù)8次
@@:
B0BCLR PWDA_A ;溫度顯示數(shù)據(jù) P
BTS0 WDATA.7 ;溫度
B0BSET PWDA_A
B0BCLR PSDA_B ;濕度顯示數(shù)據(jù) P
BTS0 SDATA.7 ;濕度
B0BSET PSDA_B
B0BSET SCL164 ;時鐘 P
JMP $+1
B0BCLR SCL164;送時鐘
RLCM SDATA ;2只HC164并聯(lián)使用.
RLCM WDATA
DECMS JS164;輸出計數(shù)
JMP @B
RET
;======================================================
以上推薦是因為:當選擇單片機引腳數(shù)量時,多幾個引腳并不會明顯增加開支,但是多使用單片機引腳可以帶來節(jié)省外部硬件或提高運行速率!因此是符合節(jié)省又高效的原則的.
此外,還有利用鎖存器(或觸發(fā)器)的并行驅(qū)動方式,使用端口數(shù)量比串行/到并行驅(qū)動要多,但是其 8 線并行口可以分時無限制復用!卻不適合那些具有特定任務的端口---例如控制輸出等!
僅僅幾個數(shù)碼管,實際做起驅(qū)動來,還是很多考慮的.------限于篇幅不要過長,這里就打住吧!