8段數(shù)碼管顯示.兩位數(shù)碼管顯示00--99依次循環(huán)(動態(tài)掃描方式).p1做LED顯示數(shù)據(jù)輸出口.p3.2;p3.3分別控制數(shù)碼管個位數(shù)和十位數(shù)顯示.
8段數(shù)碼管從內(nèi)部接線上分共陽和共陰兩種。在電路設(shè)計時應(yīng)根據(jù)情況決定采用共陽或共陰,其基本原則是:若單片機(jī)IO口直接驅(qū)動數(shù)碼管個段,最好采用共陽數(shù)碼管,因為51單片機(jī)IO口輸出高電平時輸出的電流很小,數(shù)碼管不會太亮;若數(shù)碼管是通過驅(qū)動芯片與單片機(jī)相連的,就要看驅(qū)動芯片對數(shù)碼管極性的要求啦。下面的實驗采用共陽數(shù)碼管。
;======================================= ;constant define ;常數(shù)定義 csp equ 60h ;堆棧開始使用的位置. ;======================================= ;variable define ;變量定義 vadigit equ 30h ;數(shù)碼管個位數(shù)存放內(nèi)存位置 vbdigit equ 31h ;數(shù)碼管十位數(shù)存放內(nèi)存位置 vcnt1 equ 32h ;計數(shù)器數(shù)值存放內(nèi)存位置
;======================================= ;Func: 程序開始. ;======================================= org 0000h ajmp main
org 0030h ;到0030h處避開00-30h的敏感地址 ;======================================= ;Func: 程序初始化. ;======================================= main: ;初始化特殊寄存器及變量 mov sp,#csp ;指定堆棧開始使用的位置. star: mov vcnt1,#0 ;初始化計數(shù)器,從0開始 lop1: acall display ;調(diào)用顯示子程序 inc vcnt1 ;對計數(shù)器加1 mov a,vcnt1 cjne a,#100,lop1 ;判斷計數(shù)器是否滿100? mov vcnt1,#0 ;滿100就清零重新開始 ljmp lop1 ;不滿就循環(huán)執(zhí)行
;======================================= ;Func: 8.字型LED顯示子程序 ;Input: vcnt1 ;======================================= display: mov a,vcnt1 ;將temp中的十六進(jìn)制數(shù)轉(zhuǎn)換成10進(jìn)制 mov b,#10 ;10進(jìn)制/10=10進(jìn)制 div ab ;a除以b,商在a,余數(shù)在b. mov vbdigit,a ;十位在a mov vadigit,b ;個位在b mov dptr,#digittab ;指定查表起始地址 mov r0,#4 dpl1: mov r1,#250 ; dplop: mov a,vadigit ;取個位數(shù) movc a,@a+dptr ;查個位數(shù)的7段代碼 mov p1,a ;送出個位的7段代碼 clr p3.2 ;開個位顯示 acall delayus ;顯示162微秒 setb p3.2 ;關(guān)閉個位顯示,防止鬼影 mov a,vbdigit ;取十位數(shù) movc a,@a+dptr ;查十位數(shù)的7段代碼 mov p1,a ;送出十位的7段代碼 clr p3.3 ;開十位顯示 acall delayus ;顯示162微秒 setb p3.3 ;關(guān)閉十位顯示,防止鬼影 djnz r1,dplop ;循環(huán)執(zhí)行250次 djnz r0,dpl1 ;循環(huán)執(zhí)行250X4=1000次 ret
;======================================= ;Func: 162us延時子程序 ;======================================= delayus: mov r7,#80 ;///2+2X80=162微秒,延時按11.0592MHZ計算 djnz r7,$ ret
org 0600h ;======================================= digittab: ;實驗板上的7段數(shù)碼管0~9數(shù)字的共陽顯示代碼 db 0c0h;0 db 0f9h;1 db 0a4h;2 db 0b0h;3 db 099h;4 db 092h;5 db 082h;6 db 0f8h;7 db 080h;8 db 090h;9 end |