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