引言
在嵌入式系統(tǒng)開(kāi)發(fā)中,利用單片機(jī)驅(qū)動(dòng)數(shù)碼管顯示計(jì)時(shí)信息是常見(jiàn)的基礎(chǔ)應(yīng)用場(chǎng)景之一。60進(jìn)制計(jì)時(shí)系統(tǒng)(如秒表、時(shí)鐘的秒/分計(jì)數(shù))結(jié)合動(dòng)態(tài)掃描技術(shù),既能節(jié)省I/O端口資源,又能實(shí)現(xiàn)多位數(shù)碼管穩(wěn)定顯示。本文以經(jīng)典51單片機(jī)為核心,詳細(xì)闡述60進(jìn)制動(dòng)態(tài)數(shù)碼管顯示的匯編語(yǔ)言實(shí)現(xiàn)原理、電路設(shè)計(jì)及程序代碼分析。
系統(tǒng)硬件設(shè)計(jì)
1. 數(shù)碼管選擇與連接
系統(tǒng)通常采用共陰極或共陽(yáng)極數(shù)碼管。以共陰極為例,段選信號(hào)(a~dp)通過(guò)限流電阻連接至單片機(jī)的P0口(需加上拉電阻),位選信號(hào)(控制哪個(gè)數(shù)碼管亮)連接至P2口的低4位(假設(shè)使用4位數(shù)碼管,顯示“分十位”、“分個(gè)位”、“秒十位”、“秒個(gè)位”)。
2. 動(dòng)態(tài)掃描原理
動(dòng)態(tài)掃描的核心是分時(shí)復(fù)用:在極短的時(shí)間周期內(nèi),依次點(diǎn)亮每一位數(shù)碼管,并輸出對(duì)應(yīng)的段碼。利用人眼視覺(jué)暫留效應(yīng)(POV),當(dāng)掃描頻率高于50Hz時(shí),觀察者將看到所有數(shù)碼管同時(shí)穩(wěn)定顯示。此方法只需一組段選線,顯著節(jié)約硬件資源。
軟件設(shè)計(jì)與匯編實(shí)現(xiàn)
1. 數(shù)據(jù)存儲(chǔ)規(guī)劃
- 定義存儲(chǔ)單元:在片內(nèi)RAM中分配單元存儲(chǔ)當(dāng)前計(jì)數(shù)值,例如:
- 30H:存儲(chǔ)“秒個(gè)位”
- 31H:存儲(chǔ)“秒十位”
- 32H:存儲(chǔ)“分個(gè)位”
- 33H:存儲(chǔ)“分十位”
- 定義顯示緩沖區(qū):將上述BCD碼通過(guò)查表轉(zhuǎn)換為段碼,存入顯示緩沖區(qū)(如40H~43H)。
2. 核心程序流程
程序主要包括初始化、計(jì)時(shí)累加、60進(jìn)制調(diào)整、動(dòng)態(tài)顯示等模塊。
(1) 初始化模塊
設(shè)置計(jì)時(shí)初值為00:00,并初始化顯示緩沖區(qū)。
(2) 計(jì)時(shí)與60進(jìn)制處理
利用定時(shí)器中斷(如T0)產(chǎn)生精確的1秒基準(zhǔn)信號(hào)。每中斷一次,“秒個(gè)位”加1;當(dāng)“秒個(gè)位”達(dá)到10時(shí)清零,并使“秒十位”加1;當(dāng)秒計(jì)數(shù)達(dá)到60時(shí),秒部分清零,“分個(gè)位”加1;同樣處理分的60進(jìn)制進(jìn)位。關(guān)鍵匯編代碼邏輯如下:
SEC_INC: MOV A, 30H ; 取秒個(gè)位
ADD A, #01H ; 加1
DA A ; 十進(jìn)制調(diào)整
MOV 30H, A ; 存回
CJNE A, #10, DISP_UPDATE ; 未滿(mǎn)10,跳轉(zhuǎn)顯示
MOV 30H, #00H ; 秒個(gè)位清零
MOV A, 31H ; 取秒十位
ADD A, #01H
MOV 31H, A
CJNE A, #6, DISP_UPDATE ; 秒十位未滿(mǎn)6,跳轉(zhuǎn)
MOV 31H, #00H ; 秒部分清零,開(kāi)始處理分進(jìn)位...
(3) 動(dòng)態(tài)掃描顯示子程序
此子程序循環(huán)調(diào)用,依次選中每一位數(shù)碼管,并輸出對(duì)應(yīng)段碼。需注意消隱處理,防止切換時(shí)的“鬼影”。
DISP: MOV R0, #40H ; 顯示緩沖區(qū)首址
MOV R2, #0FEH ; 位選初值(P2.0低電平)
MOV R3, #4 ; 4位數(shù)碼管
DISP_LOOP: MOV A, @R0 ; 取段碼
MOV P0, A ; 段碼輸出
MOV A, R2
MOV P2, A ; 選中當(dāng)前位
LCALL DELAY_MS ; 延時(shí)1-2ms
INC R0
MOV A, R2
RL A ; 位選左移,選中下一位
MOV R2, A
DJNZ R3, DISP_LOOP ; 循環(huán)4次
RET
關(guān)鍵優(yōu)化與注意事項(xiàng)
- 定時(shí)器精度:定時(shí)器初值計(jì)算需考慮中斷處理時(shí)間,確保1秒基準(zhǔn)準(zhǔn)確。
- 消隱處理:在切換位選前,應(yīng)先關(guān)閉所有段選(送滅碼),或采用P0口先輸出段碼,再有效位選的方式。
- 延時(shí)調(diào)整:動(dòng)態(tài)掃描的延時(shí)時(shí)間影響亮度與閃爍,通常1-5ms為宜,總掃描周期應(yīng)小于20ms。
- 資源節(jié)省:代碼中可復(fù)用部分子程序(如BCD調(diào)整、查表),減少程序體積。
##
通過(guò)上述硬件設(shè)計(jì)與匯編編程,51單片機(jī)能夠穩(wěn)定驅(qū)動(dòng)多位數(shù)碼管實(shí)現(xiàn)60進(jìn)制計(jì)數(shù)顯示。動(dòng)態(tài)掃描技術(shù)是單片機(jī)顯示系統(tǒng)的核心方法之一,掌握其原理與實(shí)現(xiàn)對(duì)于深入學(xué)習(xí)嵌入式開(kāi)發(fā)具有重要意義。開(kāi)發(fā)者可根據(jù)具體需求,在此基礎(chǔ)上擴(kuò)展暫停、清零、設(shè)置初值等功能,形成完整的計(jì)時(shí)器應(yīng)用。