在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

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

             

            地址

            機(jī)器碼

            指令

             

            注釋

            0000

            02003B

            AJMP

            003BH

            ;轉(zhuǎn)至主程序

            003B

            758000

            MOV

            P0,#00H

            ;初始化

            003E

            75A000

            MOV

            P2,#00H

            ;關(guān)閉顯示

            0041

            7938

            MOV

            R1,#38H

            ;調(diào)入字模數(shù)據(jù)

            0043

            7867

            MOV

            R0,#67H

            ;設(shè)字模存放起始地址

            0045

            756901

            MOV

            69H,#01H

            ;送字模數(shù)據(jù)表起始地址

            0048

            120078

            LCALL

            0078H

            ;調(diào)查表子程序

            004B

            F6

            MOV

            @R0,A

            ;字模送入RAM

            004C

            18

            DEC

            R0

            ;

            004D

            0569

            INC

            69H

            004F

            D9F7

            DJNZ

            R1

            ;未完,返回

            0051

            7D18

            MOV

            R5,#18H

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

            0053

            7EFF

            MOV

            R6, #FFH

            ;

            0055

            7F08

            MOV

            R7,#08H

            ;置掃描列數(shù)

            0057

            7860

            MOV

            R0,#60H

            ;設(shè)顯示緩沖區(qū)低地址

            0059

            7480

            MOV

            A, #80H

            ;送列掃描起始控制字

            005B

            8680

            MOV

            P0,@R0

            ;字模數(shù)據(jù)輸出至顯示屏

            005D

            F5A0

            MOV

            P2,A

            ;輸出列控制字至顯示屏

            005F

            08

            INC

            R0

            ;準(zhǔn)備字模的下一字節(jié)

            0060

            03

            RR

            A

            ;準(zhǔn)備掃描下一列

            0061

            DFF8

            DJNZ

            JNZ
             

            ;未完返回

            0063

            DEF0

            DJNZ

            R6

            ;

            0065

            DDEC

            DJNZ

            R5

            ;

            0067

            7F38

            MOV

            R7,#38H

            ;置字模數(shù)據(jù)移動(dòng)總字節(jié)數(shù)

            0069

            7868

            MOV

            R0,#68H

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

            006B

            7967

            MOV

            R1,#67H

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

            006D

            E7

            MOV

            A,@R1

            006E

            F6

            MOV

            @R0,A

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

            006F

            18

            DEC

            R0

            ;轉(zhuǎn)向下一個(gè)字節(jié)

            0070

            19

            DEC

            R1

            ;

            0071

            DFFA

            DJNZ

            R7

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

            0073

            856830

            MOV

            30H,68H

            ;首尾相接

            0076

            80D9

            SJMP

            0051H

            ;跳轉(zhuǎn)至0051H

            0078

            E569

            MOV

            A,69H

            ;取查表增址值

            007A

            83

            MOVC

            A,@A+PC

            ;取字模數(shù)據(jù)

            007B

            22

            RET

            ;子程序返回

             

            007C

            7E 42

            7E 00

            FF 28 44

            82 字模數(shù)據(jù)表

             

            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顯示器原理




            評(píng)論


            相關(guān)推薦

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

            關(guān)閉