單片機驅動數(shù)碼管顯示設計
看看修改后的程序將變得更加簡潔,直觀了,程序代碼從原來的15行減少到僅4行,一樣實現(xiàn)了相同的功能。這也就是我們要學習的編程技巧哦!在編程中盡量用最少的代碼實現(xiàn)相同的功能。程序第1行的功能是將要顯示的數(shù)字“6”的十六進制段碼"82H"送到P0口,程序第2行的功能就是將數(shù)碼管的選通代碼#0FEH(即二進制"11111110")送到P2口,從而控制第一位數(shù)碼管顯示,其它數(shù)碼管熄滅。把修改過的程序編譯后的目標文件寫到單片機上看到顯示效果是一樣的。程序中用一行代碼 MOVP0,#82H 就輸出了字形,因此我們要顯示其它字形時只要從上面的數(shù)碼管段碼表中查出對應的十六進制字形碼,用同樣的方法把段碼輸出到P0口就可以了。比如我們要顯示一個數(shù)字“8”, 只需將程序中的 MOVP0,#82H 語句改成 MOVP0,#80H 即可,至此,我們終于可以隨心所欲地控制數(shù)碼管要顯示的字形了,是不是很簡單呀 :) 。
另外,如果想讓第二位數(shù)碼管DG2顯示,其它熄滅怎么辦呢?其實很簡單,只要把對應數(shù)碼管的選通端口輸出低電平就可以使該位數(shù)碼管顯示了,如指令 CLRP2.1 就可以讓第二個數(shù)碼管顯示。。。程序中如果使P2.0~P2.4都輸出低電平,那么實驗板上的5個數(shù)碼管都會被選通,顯示出相同的字形,即顯示“66666”。下面就是5位數(shù)碼管顯示出“66666”的程序,初學者可以實驗一下,以加深對數(shù)碼管顯示位選通(使能)控制的理解。
MAIN:MOV P0,#82H ;將數(shù)字"6"的段碼輸出到P0口
MOV P2,#0E0H;從P2口輸出數(shù)碼管選通代碼,使5位數(shù)碼管均選通,即輸出二進制“11100000”
AJMPMAIN;跳轉到開始重新進行
END ;程序結束
單片機驅動數(shù)碼管的動態(tài)顯示編程
上面我們已經(jīng)學習了數(shù)碼管靜態(tài)顯示,接下來我們就學習數(shù)碼管動態(tài)顯示編程,編程讓實驗板上的數(shù)碼管顯示“89C51”。從原理圖中(圖5)我們可以看到,5個數(shù)碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端是2連在一起的,那么當程序從P0口輸出字形碼時,在同一個時間所有數(shù)碼管都會接收到相同的字形碼。你一定會問,這樣不是5個數(shù)碼管都顯示相同的數(shù)字了嗎?如何顯示出5個不同的字符“89C51”呢?因此,就要使用動態(tài)掃描了,在程序中,首先顯示一個數(shù),然后關掉;然后顯示第二個數(shù),又關掉,顯示第三個數(shù),又關掉。。。直到所有要顯示的5個數(shù)完成,再從頭開始掃描。輪流點亮掃描過程中,每位顯示器的點亮時間是極為短暫的(約1ms),由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應,盡管實際上各位顯示器并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感。
數(shù)碼管顯示“89C51”的具體編程思路如下:第一位數(shù)碼管顯示“8” → 延時1ms → 關閉所有數(shù)碼管顯示 → 第二位數(shù)碼管顯示“9” → 延時1ms → 關閉所有數(shù)碼管顯示 → 第三位數(shù)碼管顯示“C” → 延時1ms → 關閉所有數(shù)碼管顯示 → 第四位數(shù)碼管顯示“5” → 延時1ms → 關閉所有數(shù)碼管顯示 → 第五位數(shù)碼管顯示“1” → 延時1ms → 關閉所有數(shù)碼管顯示 → 返回到第一步重新進行新一輪掃描過程。下面就是根據(jù)該思路編出來的源程序,初學者可以把該程序粘貼到Keil工程中,編譯得到目標文件,然后燒寫到單片機驗證一下。
; *********** 在數(shù)碼管上動態(tài)顯示"89C51" *************
MAIN: MOV P0,#80H;第1位數(shù)碼管顯示“8”
CLR P2.0 ;允許第1位數(shù)碼管顯示
ACALL DELAY;顯示延時一段時間
MOV P0,#0FFH ;清除P0口字形碼
MOV P2,#0FFH ;停止所有數(shù)碼管顯示選通,關閉所有顯示
MOV P0,#90H;第2位數(shù)碼管顯示“9”
CLR P2.1 ;允許第2位數(shù)碼管顯示
ACALL DELAY;顯示延時一段時間
MOV P0,#0FFH ;清除P0口字形碼
MOV P2,#0FFH ;停止所有數(shù)碼管顯示選通,關閉所有顯示
MOV P0,#0C6H ;第3位數(shù)碼管顯示“C”
CLR P2.2 ;允許第3位數(shù)碼管顯示
ACALL DELAY;顯示延時一段時間
MOV P0,#0FFH ;清除P0口字形碼
MOV P2,#0FFH ;停止所有數(shù)碼管顯示選通,關閉所有顯示
MOV P0,#92H;第4位數(shù)碼管顯示“5”
CLR P2.3 ;允許第4位數(shù)碼管顯示
ACALL DELAY;顯示延時一段時間
MOV P0,#0FFH ;清除P0口字形碼
MOV P2,#0FFH ;停止所有數(shù)碼管顯示選通,關閉所有顯示
MOV P0,#0F9H ;第5位數(shù)碼管顯示“1”
CLR P2.4 ;允許第5位數(shù)碼管顯示
ACALL DELAY;顯示延時一段時間
MOV P0,#0FFH ;清除P0口字形碼
MOV P2,#0FFH ;停止所有數(shù)碼管顯示選通,關閉所有顯示
AJMPMAIN ;跳轉到開始重新進行
;******** 延時子程序 ********
DELAY:MOV R1,#10
Y1: MOV R2,#100
DJNZR2,$
DJNZR1,Y1
RET
END
【總結】 至此,我們已經(jīng)較全面地學習了數(shù)碼管的工作原理和使用方法,相信你對數(shù)碼管的靜態(tài)顯示、動態(tài)顯示有了新的認識,掌握了數(shù)碼管的這兩種使用方法,你就可以根據(jù)你自己的意愿及要求來編寫各種各樣的數(shù)字顯示程序了,如電子溫度計、時鐘、秒表、頻率計、計數(shù)器的制作等等,可以充分發(fā)揮你的想象達到你所需要的各種顯示效果。我們附帶的配套軟件資料光盤配有相關的實驗例程、實驗視頻錄像、單片機多媒體教程、實用電子圖書資料、單片機開發(fā)軟件及編程器、仿真器的全部驅動程序,供大家學習使用,以幫助初學者快速入門。
手機電池相關文章:手機電池修復
單片機相關文章:單片機教程
單片機相關文章:單片機視頻教程
單片機相關文章:單片機工作原理
評論