<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 用AT89C51控制活動(dòng)字符顯示屏

用AT89C51控制活動(dòng)字符顯示屏

作者: 時(shí)間:2011-02-21 來(lái)源:網(wǎng)絡(luò ) 收藏
字符和圖形的顯示,在各種智能設備或系統中是常常用到的,如實(shí)現人機對話(huà)的功能菜單提示液晶屏,或是以輸出文字信息為主要功能的大型LED廣告屏等。本文通過(guò)利用LED點(diǎn)陣模塊實(shí)現活動(dòng)字符顯示的控制電路,向大家介紹片內RAM的使用、累加器循環(huán)移位等字符的字模設計原理指令。
  一、電路功能及顯示內容
  本電路由AT89C51通過(guò)P0口和P2口與由VD1-1至VD8-8等64只發(fā)光二極管組成的顯示點(diǎn)陣模塊相連接而組成,通過(guò)相應的行列電位控制,上電后,使點(diǎn)陣模塊依次顯示出“OK”、“ST”、“JC”和“之二”字樣,并周而復始地循環(huán)。
  二、電路原理
  整個(gè)電路由AT89C51、顯示模塊及驅動(dòng)三極管VT1至VT8等構成,電路原理見(jiàn)圖1。
  圖1虛線(xiàn)內VD1-1至VD8-8共64只發(fā)光二極管構成了顯示字符的點(diǎn)陣模塊,這種模塊是專(zhuān)門(mén)用于LED顯示屏的。型號是TOM-2088BE-B,這種點(diǎn)陣模塊有16條引腳。點(diǎn)陣模塊正面點(diǎn)陣布局如圖2所示,背面引腳排列如圖3所示。在圖1中,虛線(xiàn)外邊與IC1相連接的行列線(xiàn)所標序號為模塊引腳號。整個(gè)顯示點(diǎn)陣連接成行列控制的形式,8條行線(xiàn)分別與P0口的8條I/O線(xiàn)相連接,8條列線(xiàn)分別與受P2口8條口線(xiàn)控制的8只驅動(dòng)三極管相連接。這樣,當我們向P2口送入一個(gè)控制字#80H,P2.7呈高電位,而P2.6至P2.0皆呈低電位,因此,P2.7的高電位通過(guò)R17使VT1導通,VD1-1至VD1-8的8只發(fā)光二極管的負極皆與地相接,這就為VD1-1至VD1-8組成的第1列發(fā)光二極管的導通提供了使能條件。此時(shí)我們再向P0口送入字模數據,相應的二極管就被點(diǎn)亮,點(diǎn)陣像素就會(huì )被顯示出來(lái)。比如我們向P0口送入數據#7EH,VD1-2至VD1-7就被點(diǎn)亮。模塊最左邊一列呈現的圖形如圖2中左邊第1列所示。如果我們將P2口的高電位依次向右循環(huán)移動(dòng),VT1至VT8就會(huì )依次導通,使能條件就會(huì )從第1列依次轉換至第8列。在VT1至VT8導通時(shí)我們依次向P0口送入數據#7EH、#42H、#7EH、#00H、#FFH、#28H、#44H、#82H,點(diǎn)陣模塊顯示的圖形則如圖2所示,即呈現出字符“OK”,這就實(shí)現了字符的顯示。VT1至VT8依次導通,使第1列至第8列的二極管依次得到發(fā)光使能條件的過(guò)程,就是通常所說(shuō)的掃描。由于點(diǎn)陣模塊中的發(fā)光二極管發(fā)光不存在余輝,斷電就會(huì )熄滅,如果不進(jìn)行這種掃描,要么只能顯示1列像素,要么就使幾列或所有列都顯示相同的像素。所以,只有不斷地通過(guò)P0口送出字符或圖形的點(diǎn)陣數據,再在P2口的控制下使各列依次顯示一定的時(shí)間,才能使模塊將整幅圖形的像素完整地顯示出來(lái)。因此,只有系統周而復始地掃描,才會(huì )使點(diǎn)陣模塊顯示出穩定的字符與圖形。
  三、片內RAM的使用及字符活動(dòng)原理
  由于本系統要顯示的字符是活動(dòng)的,所有字符的數據在存儲空間的位置順序是要不斷變化的。因此,僅將要顯示的點(diǎn)陣數據存在程序存儲區是無(wú)法進(jìn)行變化處理的,因為程序存儲器是只讀存儲器,在應用系統中是無(wú)法改寫(xiě)的,而內的RAM,是可讀可寫(xiě)的靜態(tài)存儲器,存取時(shí)間極短,專(zhuān)門(mén)存放需頻繁改寫(xiě)處理的數據,所以,只有將本系統要顯示的活動(dòng)字符的所有點(diǎn)陣代碼存放在片內RAM中,在程序的控制下,根據當前顯示的需要,進(jìn)行相應的變化處理,再通過(guò)P0口送出,才能使點(diǎn)陣模塊中顯示的字符活動(dòng)起來(lái)。
  我們講過(guò),AT89C51片內有128字節RAM,地址空間為00H至7FH。其中00H至2FH具有特殊功能,所以我們可以將要顯示字符的字模數據從30H開(kāi)始存放。如圖4所示,“OK”、“ST”、“JC”和“之二”字模數據共56個(gè)字節,我們把它存儲在30H至67H單元之內。在圖4中,數據為“1”的位被涂色,為“0”的位為空白,要顯示的字符圖形與字模數據的對應關(guān)系就被清楚地表示出來(lái)。在前述的掃描過(guò)程中,當掃描第一列,也就是向P2口送出控制字#80H,P2.7呈高電位時(shí),CPU將RAM中67H單元內的內容送至P0口,于是,67H中字模數據的含義就在LED點(diǎn)陣模塊的最左一列被以亮暗不同的點(diǎn)表達出來(lái),完成字模數據與圖像的對應轉換。之后,P2.7的高電位向P2.0逐步移動(dòng),依次掃描,CPU便將RAM區66H至60H中的內容依次通過(guò)P0口送至點(diǎn)陣模塊的第2列至第8列顯示出來(lái)。至此,一幀完整的圖形顯示即告完成。然后可重返67H取字模數據進(jìn)行下一幀掃描。由于67H至60H中數據的每一位與點(diǎn)陣模塊中的VD1-1至VD8-8是一一對應的,因此,67H至60H的這8個(gè)存儲單元即為字符顯示緩存區。在RAM內30H至67H的整個(gè)數據塊中,只有處在60H至67H之間的數據才會(huì )被送到點(diǎn)陣模塊中顯示出來(lái)。如果顯示點(diǎn)陣好比電影的屏幕,整個(gè)數據塊就是膠片。30H至67H這個(gè)區間就是電影放映機的鏡頭,所有的數據只有到達這個(gè)區間,也就是顯示緩存區以后,其代表的圖形信息才會(huì )在點(diǎn)陣模塊中“放映”出來(lái)。因此,若想將“OK”以后的“ST”、“JC”、“之二”等字符顯示出來(lái),只要將自5FH至30H內的數據逐字節向上移動(dòng)即可實(shí)現。具體過(guò)程是,首先將67H的內容送至68H之中,空出67H單元,以后將下面的字節逐個(gè)上移,直至移動(dòng)56個(gè)字節,30H中的內容就被移到了31H之中,至此整個(gè)數據塊上移了一個(gè)地址空間,點(diǎn)陣模塊中的字形“OK”也便左移了一列,字符開(kāi)始“活動(dòng)”起來(lái)。當整個(gè)數據塊上移一個(gè)地址空間之后,必須將移至68H中的數據再移至30H,因為,只有這樣才能保證整個(gè)字模數據不至于在以后的移動(dòng)中因被覆蓋而丟失,才能保證數據塊的完整和連續性。如此,不斷地重復上述數據上移過(guò)程,整個(gè)數據塊就會(huì )連續地通過(guò)60H至67H組成的顯示緩存區,所有的字符就會(huì )在點(diǎn)陣模塊中滾動(dòng)經(jīng)過(guò),這就實(shí)現了字符的移動(dòng)顯示。
  四、程序設計及主要指令
  本例程序的設計思路是:上電后,首先向P0口和P2口送#00H,關(guān)閉顯示完成初始化。然后調入所有字符的字模數據,進(jìn)行掃描顯示。連續掃描0.5s以后,將數據塊上移一字節,再返回掃描程序和數據塊移動(dòng)程序,周而復始。連續掃描時(shí)間在主程序中設定。
  1.字模數據的調入及查表指令
  利用查表指令構成查表子程序,可以使字模數據從程序存儲器調入片內RAM的程序更簡(jiǎn)短,并可以使字模數據在程序存儲空間中集中存放。
  由前述可知,全部字模數據為56個(gè)字節,如果用普通的數據傳送指令MOV direct,#data,每送1字節數據需3個(gè)字節的程序代碼才能完成。比如將“OK”字形的第1列字模數據#7EH送入片內RAM的67H空間,指令是MOV 67H,#7EH;機器碼是75677EH,這樣,傳送完56個(gè)字節的字模數據的程序需168個(gè)字節的程序代碼,占用空間較大。而用查表指令來(lái)完成上述56個(gè)字節的字模數據的調入,所有程序代碼只用76個(gè)字節就完成了,比利用一般數據傳輸指令少用了92個(gè)字節,既節約了程序存儲空間,又使程序設計變得簡(jiǎn)單。
  查表指令MOVC A,@A+PC,機器代碼是83H。執行結果是將累加器A中的內容與程序地址寄存器PC中的值相加得到一個(gè)被查找的程序存儲空間的單元地址(數據表格的地址),然后將該單元的內容送入累加器A中,其中PC是用來(lái)存放下一條指令的地址。例如,如果我們先將立即數#01H存入RAM的69H單元中,當執行完程序存儲器中地址為0078H處的MOV A,69H指令后,累加器A中的值就是#01H,若數據表格的起始地址是007CH,則執行完下一條MOVC A,@A+PC指令后,就將007CH中的字模數據#7EH送到了累加器A中。因為當執行完0078H處的MOV A,69H指令后,CPU的程序地址寄存器PC中的值為#007AH,CPU便直接到007AH中去取程序代碼來(lái)識別執行。由于安放在007AH中的指令是一條專(zhuān)用的變址查表指令,執行后,PC中的值不但會(huì )自動(dòng)加1,變成#007BH,而且還會(huì )將A中的值與PC中的值相加得到一個(gè)地址,指向所取數據的存儲單元。由于A(yíng)中的值是#01H,所以,CPU就會(huì )到007C中將立即數#7EH取出存于A(yíng)中,然后再執行007BH處的指令。上述也是查表子程序的執行過(guò)程。從查表子程序返回主程序后,在主程序的控制下,將A中的字模數據再存于片內RAM的67H之中。由上述不難理解,我們每取一次數之后將69H中的內容加1,這樣,不斷地調用查表子程序,CPU就會(huì )將字模數據表中的所有字模數據逐字節調到片內RAM之中。
  2.掃描程序及累加器循環(huán)移位指令
  掃描程序能使在向P0口送出數據之后,不斷改變P2口各口線(xiàn)的高低電位,使VT1至VT8依次導通,完成整幅字符或圖形的顯示。而利用累加器循環(huán)移位指令來(lái)實(shí)現P2口各口線(xiàn)的電位改變是最為簡(jiǎn)捷的辦法。
  根據如前所述的掃描顯示過(guò)程,我們采用累加器循環(huán)移位指令來(lái)完成P2口中的高電位移動(dòng)是極其方便的。累加器A是單片機中使用最頻繁的具有特殊功能的寄存器。RR A指令能使A中的內容向右循環(huán)移位,該指令代碼是03H。執行該指令的結果是(An+1)→(An),(A0)→(A7)。如圖5所示。假如在A(yíng)中裝入的數據為#80H,也就是1000 0000B,執行RR A后,A中的數據則是#40H,也就是0100 0000B,所有數據皆向右移動(dòng)了一位,而原來(lái)的最低位則轉移到最高位,其中唯一的一位高電位也便右移了一位。因此,要使P2口僅有一條口線(xiàn)呈高電位,并向右循環(huán)移動(dòng),首先執行MOV A #80H,再執行MOV P2,A,將#80H送入P2口,然后執行RR A完成一次循環(huán),再執行MOV P2,A,將循環(huán)后的控制字送至P2口即可。向A中裝入立即數#80H,經(jīng)過(guò)8次上述操作過(guò)程,P2口自P2.7至P2.0就會(huì )依次呈現高電位,完成前述的掃描任務(wù)。
  3.數據塊移動(dòng)程序及寄存器間接尋址數據傳送指令
  數據塊移動(dòng)程序能使片內RAM中的字模數據塊整體向上移動(dòng),當主程序持續運行,就會(huì )使所有的字模數據從RAM的60H至67H之間通過(guò),使系統顯示的字符以“拉幕”的形式在點(diǎn)陣模塊中依次顯示出來(lái)。
  我們先分別向R0和R1中送入立即數#68H和#67H,再執行MOV A,@R1和MOV @R0,A,這是兩條寄存器間接尋址數據傳送指令。其結果是先將以R1中的內容為地址的存儲單元內的數據送入累加器A,再將A中的內容送入以R0中的內容為地址的存儲單元內,這就將片內RAM 67H中的字模數據送到了68H之中。然后將R0和R1中的內容減1,使R0中的內容變?yōu)椋?7H,使R1中的內容變?yōu)椋?6H,重復前面的過(guò)程,又將66H中的字模數據送到了67H之中了。依次類(lèi)推,將上述過(guò)程重復56次,片內RAM 30H中的字模數據就被送到了31H之中,至此,整個(gè)字模數據塊便整體向上移動(dòng)了一個(gè)地址空間。之后,還必須執行MOV 30H,68H,將68H中的字模數據送入30H之中,實(shí)現字模數據塊的首尾相接。
  4.短轉移指令
  為了實(shí)現連續滾動(dòng)顯示,當完成調入字模數據、掃描顯示和數據上移之后,需要CPU再返回掃描顯示處循環(huán)執行掃描和數據塊上移的程序,所以在數據塊移動(dòng)程序的最后還要安放一條短轉移指令SJMP(指令的機器碼是80H)。執行此指令后,程序就轉移至掃描程序的入口處,開(kāi)始又一次的掃描和數據塊上移操作。例如:SJMP 0051H,即程序轉移至程序存儲器中地址為0051H處,執行該處程序。指令SJMP rel的轉移范圍為-128至+127。
  五、本文涉及的其他指令
  算術(shù)操作類(lèi)指令:
  INC Rn:執行結果是將寄存器Rn中的內容加1。
  DEC Rn:執行結果是將寄存器Rn中的內容減1。
  六、程序清單

 

地址

機器碼

指令

 

注釋

0000

02003B

AJMP

003BH

;轉至主程序

003B

758000

MOV

P0,#00H

;初始化

003E

75A000

MOV

P2,#00H

;關(guān)閉顯示

0041

7938

MOV

R1,#38H

;調入字模數據

0043

7867

MOV

R0,#67H

;設字模存放起始地址

0045

756901

MOV

69H,#01H

;送字模數據表起始地址

0048

120078

LCALL

0078H

;調查表子程序

004B

F6

MOV

@R0,A

;字模送入RAM

004C

18

DEC

R0

;

004D

0569

INC

69H

;

004F

D9F7

DJNZ

R1

;未完,返回

0051

7D18

MOV

R5,#18H

;置掃描時(shí)間常數

0053

7EFF

MOV

R6, #FFH

;

0055

7F08

MOV

R7,#08H

;置掃描列數

0057

7860

MOV

R0,#60H

;設顯示緩沖區低地址

0059

7480

MOV

A, #80H

;送列掃描起始控制字

005B

8680

MOV

P0,@R0

;字模數據輸出至顯示屏

005D

F5A0

MOV

P2,A

;輸出列控制字至顯示屏

005F

08

INC

R0

;準備字模的下一字節

0060

03

RR

A

;準備掃描下一列

0061

DFF8

DJNZ

JNZ
 

;未完返回

0063

DEF0

DJNZ

R6

;

0065

DDEC

DJNZ

R5

;

0067

7F38

MOV

R7,#38H

;置字模數據移動(dòng)總字節數

0069

7868

MOV

R0,#68H

;設塊移動(dòng)暫存單元地址

006B

7967

MOV

R1,#67H

;設移動(dòng)塊超始地址

006D

E7

MOV

A,@R1

;

006E

F6

MOV

@R0,A

;向上移動(dòng)一個(gè)地址

006F

18

DEC

R0

;轉向下一個(gè)字節

0070

19

DEC

R1

;

0071

DFFA

DJNZ

R7

;不足56個(gè)字節繼續移動(dòng)

0073

856830

MOV

30H,68H

;首尾相接

0076

80D9

SJMP

0051H

;跳轉至0051H

0078

E569

MOV

A,69H

;取查表增址值

007A

83

MOVC

A,@A+PC

;取字模數據

007B

22

RET

;子程序返回

 

007C

7E 42

7E 00

FF 28 44

82 字模數據表

 

00 00

4C 92

92 92 64

00

 

00 06

02 FE

FE 02 06

00

 

00 00

04 85

FD 04 00

00

 

7C FE

82 82

82 46 00

00

 

40 44

A4 A5

96 8C 84

80

 

00 20

24 24

24 24 24

20

led顯示器相關(guān)文章:led顯示器原理




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>