(玩電子) 電子技術學習與研(yan)究(jiu)
當前位置︰單(dan)片機教程網 >> 基(ji)礎教程 >> 瀏覽文章

山西体彩网官网

作者(zhe):佚(die)名   來源(yuan):本(ben)站原創   點擊(ji)數:x  更新時間︰2020年02月23日(ri)   【字體︰大(da)

    在單(dan)片機系統中動態掃描顯示接口是單(dan)片機中應用最為廣泛的一種顯示方式(shi)之一。其接口電路是把(ba)所有顯示器的8個(ge)筆劃段(duan)a-h同名端連在一起,而每一個(ge)顯示器的公共極COM是各(ge)自獨立地(di)受I/O線控制。CPU向(xiang)字段(duan)輸出口送出字形(xing)碼時,所有顯示器接收到相同的字形(xing)碼,但究(jiu)竟是那個(ge)顯示器亮,則取決于(yu)COM端,而這(zhe)一端是由I/O控制的,所以我們就(jiu)能自行決定何時顯示哪一位了(liao)。而所謂動態掃描就(jiu)是指我們采(cai)用分時的辦法(fa),輪流控制各(ge)個(ge)顯示器的COM端,使(shi)各(ge)個(ge)顯示器輪流點亮。在万人炸金花官网http://www.51hei.com還有很多(duo)關于(yu)單(dan)片機顯示接口的文章,大(da)家可以參(can)考一下

   在輪流點亮掃描過程中,每位顯示器的點亮時間是極為短暫的(約1ms),但由于(yu)人的視覺暫留現(xian)象及(ji)發光二極管的余(yu)輝效應,盡(jin)管實際上各(ge)位顯示器並非同時點亮,但只要掃描的速(su)度足夠快(kuai),給人的印(yin)象就(jiu)是一組穩定的顯示數據(ju),不會有閃liao)父小/p>

   下圖所示就(jiu)是我們的單(dan)片機實驗(yan)板上的動態掃描接口。由89c51的P0口能灌(guan)入較大(da)的電流,所以我們采(cai)用共陽的數碼管,並且不用限流電阻,而只是用兩只1N4004進行降(jiang)壓後給數碼管供電,這(zhe)里僅(jin)用了(liao)兩只,實際上還能擴(kuo)充。它們的公共端則由PNP型(xing)三極管8550控制,顯然,如果8550導通(tong),則對za)Φ氖牘芫jiu)能亮,而如果8550截止,則對za)Φ氖牘芫jiu)不可能亮,8550是由P2.7,P2.6控制的。這(zhe)樣我們就(jiu)能通(tong)過控制P27、P26達到控制某個(ge)數碼管亮或(huo)滅的目的。

下面(mian)的這(zhe)個(ge)單(dan)片機程序,就(jiu)是用實驗(yan)板上的數碼管顯示0和1。

FIRST EQU P2.7 ;第(di)一位數碼管的位控制

SECOND EQU P2.6 ;第(di)二位數碼管的位控制

DISPBUFF EQU 5AH ;顯示緩(huan)沖區為5AH和5BH

ORG 0000H

AJMP START

ORG 30H

START:

MOV SP,#5FH ;設(she)置堆(dui)棧

MOV P1,#0FFH

MOV P0,#0FFH

MOV P2,#0FFH ;初始(shi)化(hua),所顯示器,LED滅

MOV DISPBUFF,#0 ;第(di)一位顯示0

MOV DISPBUFF+1,#1 ;第(di)二握顯示1

LOOP:

LCALL DISP ;調用顯示程序

AJMP LOOP

;主程序到此結束

DISP:

PUSH ACC ;ACC入棧

PUSH PSW ;PSW入棧

MOV A,DISPBUFF ;取第(di)一個(ge)待顯示數

MOV DPTR,#DISPTAB ;字形(xing)表首地(di)址

MOVC A,@A+DPTR ;取字形(xing)碼

MOV P0,A ;將字形(xing)碼送P0位(段(duan)口)

CLR FIRST ;開第(di)一位顯示器位口

LCALL DELAY ;延(yan)時1毫秒

SETB FIRST ;關閉第(di)一位顯示器(開始(shi)準(zhun)備(bei)第(di)二位的數據(ju))

MOV A,DISPBUFF+1 ;取顯示緩(huan)沖區的第(di)二位

MOV DPTR,#DISPTAB

MOVC A,@A+DPTR

MOV P0,A ;將第(di)二個(ge)字形(xing)碼送P0口

CLR SECOND ;開第(di)二位顯示器

LCALL DELAY ;延(yan)時

SETB SECOND ;關第(di)二位顯示

POP PSW

POP ACC

RET

DELAY: ;延(yan)時1毫秒

PUSH PSW

SETB RS0

MOV R7,#50

D1: MOV R6,#10

D2: DJNZ R6,$

DJNZ R7,D1

POP PSW

RET

DISPTAB:DB 28H,7EH,0a4H,64H,72H,61H,21H,7CH,20H,60H

END

從(cong)上面(mian)的單(dan)片機例程中能看出,動態掃描顯示必須由CPU持續地(di)調用顯示程序,才(cai)能保證持續持續的顯示jin)/p>

   上面(mian)的這(zhe)個(ge)程序能實現(xian)數字的顯示,但不太(tai)實用,為什麼呢?這(zhe)里僅(jin)是顯示兩個(ge)數字,並沒有做(zuo)其他的工作,因此,兩個(ge)數碼管輪流顯示1毫秒,沒有xing)侍猓 導實墓?髦校 比徊豢贍苤幌允玖礁ge)數字,還是要做(zuo)其他的事情的,這(zhe)樣在二次調用顯示程序之間的時間間隔就(jiu)不一不定了(liao),如果時間間隔比較長,就(jiu)會使(shi)顯示不連續。而實際shi)?髦惺嗆苣nan)保證所有工作都ji)茉諍芏淌奔淠諭瓿傻摹?鑾藝zhe)個(ge)顯示程序也有點“浪(lang)費”,每個(ge)數碼管顯示都要佔用1個(ge)毫秒的時間,這(zhe)在很多(duo)合是不允許(xu)的,怎麼辦呢?我們能借助(zhu)于(yu)定時器,定時時間一到,產生中斷,點亮一個(ge)數碼管,然huan)舐砩戲禱兀 zhe)個(ge)數碼管就(jiu)會一直亮到下一次定時時間到,而不用調用延(yan)時程序了(liao),這(zhe)段(duan)時間能留給主程序干其他的事。到下一次定時時間到則顯示下一個(ge)數碼管,這(zhe)樣就(jiu)很少浪(lang)費了(liao)。

Counter EQU 59H ;計數器,顯示程序通(tong)過它得知(zhi)現(xian)正顯示哪個(ge)數碼管

FIRST EQU P2.7 ;第(di)一位數碼管的位控制

SECOND EQU P2.6 ;第(di)二位數碼管的位控制

DISPBUFF EQU 5AH ;顯示緩(huan)沖區為5AH和5BH

ORG 0000H

AJMP START

ORG 000BH ;定時器T0的入口

AJMP DISP ;顯示程序

ORG 30H

START:

MOV SP,#5FH ;設(she)置堆(dui)棧

MOV P1,#0FFH

MOV P0,#0FFH

MOV P2,#0FFH ;初始(shi)化(hua),所顯示器,LED滅

MOV TMOD,#00000001B ;定時器T0工作于(yu)模式(shi)1(16位定時/計數模式(shi))

MOV TH0,#HIGH(65536-2000)

MOV TL0,#LOW(65536-2000)

SETB TR0

SETB EA

SETB ET0

MOV Counter,#0 ;計數器初始(shi)化(hua)

MOV DISPBUFF,#0 ;第(di)一位始(shi)終顯示0

MOV A,#0

LOOP:

MOV DISPBUFF+1,A ;第(di)二位輪流顯示0-9

INC A

LCALL DELAY

CJNE A,#10,LOOP

MOV A,#0

AJMP LOOP ;在此中間能按(an)排任意程序,這(zhe)里僅(jin)作示範。

;主程序到此結束

DISP: ;定時器T0的中斷響應程序

PUSH ACC ;ACC入棧

PUSH PSW ;PSW入棧

MOV TH0,#HIGH(65536-2000) ;定時時間為2000個(ge)周期(qi),約2170微秒(11.0592M)

MOV TL0,#LOW(65536-2000)

SETB FIRST

SETB SECOND ;關顯示

MOV A,#DISPBUFF ;顯示緩(huan)沖區首地(di)址

ADD A,Counter

MOV R0,A

MOV A,@R0 ;根據(ju)計數器的值取對za)Φ南允淨huan)沖區的值

MOV DPTR,#DISPTAB ;字形(xing)表首地(di)址

MOVC A,@A+DPTR ;取字形(xing)碼

MOV P0,A ;將字形(xing)碼送P0位(段(duan)口)

MOV A,Counter ;取計數器的值

JZ DISPFIRST ;如果是0則顯示第(di)一位

CLR SECOND ;不然顯示第(di)二位

AJMP DISPNEXT

DISPFIRST:

CLR FIRST ;顯示第(di)一位

DISPNEXT:

INC Counter ;計數器加1

MOV A,Counter

DEC A ;如果計數器計到2,則讓它回0

DEC A

JZ RSTCOUNT

AJMP DISPEXIT

RSTCOUNT:

MOV Counter,#0 ;計數器的值只能是0或(huo)1

DISPEXIT:

POP PSW

POP ACC

RETI

DELAY: ;延(yan)時130毫秒

PUSH PSW

SETB RS0

MOV R7,#255

D1: MOV R6,#255

D2: NOP

NOP

NOP

NOP

DJNZ R6,D2

DJNZ R7,D1

POP PSW

RET

DISPTAB:DB 28H,7EH,0a4H,64H,72H,61H,21H,7CH,20H,60H

END

    從(cong)上面(mian)的單(dan)片機程序能看出,動態顯示和靜態顯示相比,程序稍(shao)za)械愀叢za),不過,這(zhe)是值得的。這(zhe)個(ge)程序有一定的通(tong)用性(xing),只要改變端口的值及(ji)計數器的值就(jiu)能顯示更多(duo)位數了(liao)。下面(mian)給出顯示程序的流程圖。<動態掃描程序框(kuang)圖>

 

 

 

 

 

 

 

發表評論】【告訴好友】【收藏此文】【關閉窗口

山西体彩网官网

山西体彩网官网 | 下一页