找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 20159|回復(fù): 6
收起左側(cè)

基于51單片機的LED點陣屏的設(shè)計與實現(xiàn)

[復(fù)制鏈接]
ID:332193 發(fā)表于 2018-5-17 15:43 | 顯示全部樓層 |閱讀模式
基于51單片機的LED點陣屏的設(shè)計與實現(xiàn)
摘 要
本文主要闡述了用51單片機控制單色32*64的LED點陣屏顯示的方法,對LED點陣屏如何進行行列信號控制及信號傳輸中的驅(qū)動問題進行了研究,并討論了單片機控制系統(tǒng)中關(guān)鍵的數(shù)據(jù)處理以及發(fā)送問題。結(jié)果表明采用并行數(shù)據(jù)輸入、串行數(shù)據(jù)及同步時鐘傳輸?shù)膶S秒娐房纱蟠鬁p少CPU的輔助時間,提高了數(shù)據(jù)的發(fā)送速度。并給出了通過軟件控制點陣屏顯示的幾種方式,如靜態(tài)顯示,分屏顯示以及左移顯示,對其軟件的算法給出了具體分析;诟鞣N算法我們就可以靈活的運用軟件實現(xiàn)各種顯示,并將其用于商業(yè)用途。

前言
    隨著社會文化的不斷發(fā)展,人們的消費標準不斷提高,戶外燈箱廣告更是扮演著越來越重要的宣傳角色,不論是汽車站,火車站,股票交易市場,還是學(xué)校都離不開它,然而傳統(tǒng)的霓虹燈廣告牌不論是在顯示效果、耗電量還是可修改性上都無法滿足當前社會的需求,傳統(tǒng)的霓虹燈廣告亟待改進。
由于單片機技術(shù)的不斷發(fā)展和高亮度LED發(fā)光管的出現(xiàn)使得大屏幕高亮度LED電子廣告屏成為可能,與傳統(tǒng)的霓虹燈廣告在顯示效果以及可修改性上都有著無法比擬的優(yōu)勢,而且單片機的日益平民化以及LED技術(shù)的不斷創(chuàng)新,使得高亮度高清晰的LED點陣廣告牌與傳統(tǒng)霓虹燈廣告牌的成本日益接近。另外,SMT技術(shù)的飛速發(fā)展,開關(guān)電源的大規(guī)模使用,使其無論在體積上還是在可靠性上都比傳統(tǒng)的霓虹燈廣告有明顯的改進,為其在特殊領(lǐng)域的應(yīng)用奠定了基礎(chǔ)。
這種新興的大屏幕顯示技術(shù)成為眾人目光的焦點。與傳統(tǒng)的顯示設(shè)備相比,首先,LED 顯示屏色彩豐富,3基色的發(fā)光管可以顯示全彩色,顯示方式變化多樣(文字、圖形、動畫、視頻、電視畫面等),是集光電子技術(shù)、微電子技術(shù)、計算機技術(shù)、信息處理技術(shù)于一體的高技術(shù)產(chǎn)品,可用來顯示文字、計算機屏幕同步的圖形。其次,LED顯示屏的像素采用LED發(fā)光二極管,將多個發(fā)光二極管以序列的形式構(gòu)成LED顯示陣列,這種顯示屏具有耗電低、成本低、亮度和清晰度高、壽命長等優(yōu)點,而且 LED 顯示屏其受空間限制較小,并可以根據(jù)用戶要求設(shè)計屏的大小,具有全彩色效果,視角大,是信息傳播設(shè)施劃時代的產(chǎn)品。再次,LED 顯示屏應(yīng)用廣泛,金融證券、銀行利率、商業(yè)廣告、文化娛樂等方面,顯示效果清晰穩(wěn)定,越來越多的地方開始使用LED電子顯示屏,有巨大的社會效益和經(jīng)濟效益。它以其超大畫面、超寬視覺、靈活多變的顯示方式等獨居一格的優(yōu)勢,成為目前國際上使用廣泛的顯示系統(tǒng)。
1 概述
1.1 設(shè)計任務(wù)
本設(shè)計主要任務(wù)是設(shè)計一個實用的32*64 LED點陣屏的圖文顯示,要求在目測條件下LED顯示屏各點亮度均勻、充足,可顯示圖形和文字,顯示圖形或文字穩(wěn)定、清晰無串擾。圖形或文字顯示有靜止和移入移出等顯示方式。本文還重點介紹了單片機對LED點陣屏的控制電路,驅(qū)動電路的設(shè)計方法,并根據(jù)LED點陣屏的硬件特點, 對其軟件實現(xiàn)的算法給出了具體的分析。從而實現(xiàn)了顯示的字體能夠進行向左移動。
1.2 點陣屏的內(nèi)部結(jié)構(gòu)及掃描原理
    LED點陣屏的內(nèi)部結(jié)構(gòu)可以分為共陰型和共陽型[5]兩種類型,本系統(tǒng)設(shè)計采用的是共陽型的LED點陣屏。 其硬件電路如(圖1.1)所示,我們只選取了一個8*8的LED矩陣做模型,當行上有一正選通信號時,列選端四位數(shù)據(jù)為0的發(fā)光二極管便導(dǎo)通點亮。根據(jù)這個原理,當我們需要某圖形或文字時,只需要將要顯示的文字或圖形的編碼作為列信號跟對應(yīng)的行信號進行逐次掃描[1],就可以逐行點亮點陣。當掃描速度大于24Hz,由于掃描時間很快,人眼的視覺有暫留效應(yīng)[3],就可以看到顯示的是完整的圖形或文字,這樣就達到了顯示的效果。
           
                  圖1.1  8*8共陽極LED點陣
    例如,若要圖中所示64個LED顯示一個“0”字的方框,則首先在列1~8上寫入列編碼的信號,接著應(yīng)將對應(yīng)的行上加選通信號,即在行、列的信號端分別加上如(圖1.2)所示數(shù)據(jù),這樣,假設(shè)顯示數(shù)字為“0”時:
1   2  3    4   5   6    7   8
















































00  00  3E   41   41   41   3E  00
圖1.2  在點陣上所加的行信號以及列選擇信號
    因此,形成的列代碼為00H,00H,3EH,41H,41H,41H,3EH,00H;只要把這些代碼分別送到相應(yīng)的列線上面,即可實現(xiàn)“0”的數(shù)字顯示。
    送顯示代碼過程如下所示:
    送第一列線代碼到P3端口,同時置第一行線為“0”,其它行線為“1”,延時2ms左右;
    送第二列線代碼到P3端口,同時置第二行線為“0”,其它行線為“1”,延時2ms左右;
    如此下去,直到送完最后一列代碼,又從頭開始送。如此循環(huán)下去,當刷新頻率足夠高時(大于24Hz),由于人眼的視覺暫留特性,便可得到一個穩(wěn)定的“0”字。這就簡單的描敘了一下的點亮LED的掃描原理。            
1.3 方案論證1.3.1 顯示方法的論證
    方案一:從理論上說,不論顯示圖形還是文字,只要控制與組成這些圖形或文字的各個點所在位置相對應(yīng)的LED器件發(fā)光,就可以得到我們想要的顯示結(jié)果,這種控制各個發(fā)光點同時亮滅的方法稱為靜態(tài)驅(qū)動顯示方法[2]。但從實際考慮可以知道,32*64的點陣共有2048個發(fā)光二極管,如果采用這種方法,顯然單片機沒有這么多端口。但如果我們采用鎖存器來擴展端口,按8位的鎖存器來計算,32*64的點陣需要256個鎖存器。這個數(shù)字仍然很龐大,而且成本很昂貴,而我們僅僅是32*64的8個漢字點陣,但在實際應(yīng)用中的顯示屏往往要大得多,這樣在鎖存器上花的成本將是一個很龐大的數(shù)字。顯然這樣做不能達到我們的要求,因此在實際應(yīng)用中的顯示屏幾乎都不采用這種設(shè)計方法。
    方案二:而這里我們采用的是另外的一種叫做動態(tài)掃描[10]的方法。 動態(tài)掃描的意思簡單地說就是逐行輪流點亮,這樣掃描驅(qū)動電路就可以實現(xiàn)多行(比如8行)的同名列共用一套列驅(qū)動器。具體就32*64的點陣來說,把所有同一列的發(fā)光管的陰極連在一起,再去驅(qū)動這一列LED (共陽接法),每一列先送出對應(yīng)第1行發(fā)光管對應(yīng)的數(shù)據(jù)并鎖存,再選通第1行使其點亮一定的時間,然后熄滅;再送出第2行的數(shù)據(jù)并鎖存,再選通第2行使其點亮相同的時間,然后熄滅……第8行之后,又重新點亮第1行,反復(fù)輪回。當這樣輪回的速度足夠快(每秒24次以上),由于人眼的視覺暫留現(xiàn)象,就能看到顯示屏上穩(wěn)定的圖形了。
1.3.2 數(shù)據(jù)傳送的方法論證
    方案一:采用掃描方式進行顯示時,每行有一個行驅(qū)動器,各行的同名列共用一個列驅(qū)動器。顯示數(shù)據(jù)通常存儲在單片機的程序存儲器中,按8位一個字節(jié)的形式順序排放。顯示時只要把一行中各列的數(shù)據(jù)都傳送到相應(yīng)的列驅(qū)動器上去,這就存在一個顯示數(shù)據(jù)傳輸?shù)膯栴}。從控制電路到列驅(qū)動器的數(shù)據(jù)傳輸可以采用并行方式或串行方式。采用并行方式時,32*64的LED點陣有8列8*8的點陣,需要8*8=64個列數(shù)據(jù)輸入口,而一個89S51只有32個I/O接口,還要同時驅(qū)動行數(shù)據(jù),根本不夠用,并且從控制電路到列驅(qū)動器的線路數(shù)量大,相應(yīng)的硬件數(shù)目多,由此可以得出,當列數(shù)很多時,并行傳輸?shù)姆桨甘遣豢扇〉摹?/font>
    方案二:采用串行傳輸[10]的方法,控制電路可以只用2根線:數(shù)據(jù)線、時鐘線。將行數(shù)據(jù)一位一位傳往行驅(qū)動器,在硬件方面無疑是十分經(jīng)濟的。但是,串行傳輸過程較長,數(shù)據(jù)按順序一位一位地輸出給行驅(qū)動器,只有當一行的各列數(shù)據(jù)都已傳輸?shù)轿恢螅@一行的各列才能并行地進行顯示。這樣,對于一行的顯示過程就可以分解成列數(shù)據(jù)準備傳輸和列數(shù)據(jù)顯示兩個部分。對于串行傳輸方式來說,列數(shù)據(jù)準備時間可能相當長,在行掃描周期確定的情況下,留給顯示的時間就太少了,以致影響到LED的亮度。解決串行傳輸中列數(shù)據(jù)準備和列數(shù)據(jù)顯示的時間矛盾問題,可以采用準備數(shù)據(jù)鎖存的方法。即在顯示本行數(shù)據(jù)的同時,傳送下一行的數(shù)據(jù)。所以列數(shù)據(jù)的顯示驅(qū)動電路就需要具有鎖存功能。經(jīng)過上述分析,可以歸納出列驅(qū)動器電路應(yīng)具備的主要功能:對數(shù)據(jù)準備來說,它應(yīng)能實現(xiàn)串入并出[7]的移位功能;對數(shù)據(jù)顯示來說,應(yīng)具有并行鎖存的功能。這樣,本行已準備好的數(shù)據(jù)輸人并行鎖存器進行顯示時,串并移位寄存器就可以準備下一行的列數(shù)據(jù),而不會影響本行的顯示。同時為了LED顯示的亮度,采用8行掃描,每個漢字上面有2個8列驅(qū)動器驅(qū)動,列驅(qū)動器的位置應(yīng)該是在第1行跟第9行,即每個16*16的漢字點陣是有4個8*8的點陣組成的陣列,掃描的時候同時掃描顯示第1行跟第9行,第二次掃描的時候顯示第2行跟第10行,以此類推,最后顯示第8行跟第16行。
2 系統(tǒng)硬件設(shè)計
  硬件電路[4]大致上可以分成單片機系統(tǒng)及外圍電路、列驅(qū)動電路和行驅(qū)動電路以及LED點陣陣列三大部分?驁D(圖2.1)如下:
             圖2.1  硬件的總體框圖
    在實際應(yīng)用中的大屏幕LED點陣顯示屏,都是采用很多的顯示模塊組成,每個模塊一般是有32*64個點陣組成,每個模塊負責自己那部分LED的顯示;有電腦通過統(tǒng)一的協(xié)議發(fā)送數(shù)據(jù)到每個控制單片機,行選是統(tǒng)一的;而且控制模塊也是分開的,一個控制模塊上面有很多的RAM芯片,控制芯片接收從主控電腦發(fā)送過來的數(shù)據(jù),并將其保存在RAM中,之后不需要電腦控制即可自己循環(huán)控制顯示。而且一個模塊控制幾個至幾十個32*64的點陣模塊。
2.1 單片機系統(tǒng)及外圍電路
    由于LED點陣顯示屏由單片機控制部分和顯示驅(qū)動部分組成,單片機我選擇最常見的ATMEL公司的AT89C51單片機。此單片機與MCS-51產(chǎn)品指令系統(tǒng)[9]完全兼容,由4K字節(jié)可重擦寫Flash閃速存儲器,128*8字節(jié)內(nèi)部RAM,32個可編程I/O口線,2個16位定時/計數(shù)器和6個中斷源。同時支持在線下載,并且該單片機經(jīng)濟實用,使用廣泛。
我們使用的是AT89C51的最小系統(tǒng)電路,包括:電源、時鐘脈沖、復(fù)位電路和程序存儲器設(shè)定電路,暫時只是顯示很少的幾十個漢字,不用外擴存儲器。
2.1.1 時鐘脈沖電路
    AT89C51單片機芯片內(nèi)部設(shè)有一個反向放大器所構(gòu)成的振蕩器,其最高時鐘脈沖頻率已經(jīng)達到了24MHz ,AT89C51的兩個引腳XTAL1和XTAL2(即19、18腳)分別為振蕩電路的輸入端和輸出端,只要連接到簡單的石英振蕩晶體的2個管腳即可,同時晶體的2個管腳也要用30pF的電容耦合到地。

2.1.2 復(fù)位電路
    89C51的復(fù)位引腳(RESET)是第9腳,當此引腳連接高電平超過2個機器周期,即可產(chǎn)生復(fù)位的動作。以24MHz的時鐘脈沖為例,每個時鐘脈沖為0.5μS,兩個機器周期為1µS,因此,在第9腳上連接一個2μS的高電平脈沖,即可產(chǎn)生復(fù)位動作。最簡單的硬件電路接法就是用一個電阻,一個電容和一個開關(guān)就構(gòu)成可靠的復(fù)位電路[8],電阻一般選擇10K,電容一般選擇10µF,具體電路如(圖2.2)所示:
圖2.2  通電瞬間復(fù)位電路
2.1.3 程序及數(shù)據(jù)存儲器設(shè)定
    因為單片機內(nèi)部數(shù)據(jù)存儲器[6]只有128 Byte,非常有限,運行大一點的程序就顯得捉襟見肘,而且程序存儲器空間也只有4K,大一點的程序就存儲不下,尤其是在存儲漢字點陣信息的時候,每個漢字32Byte,100個漢字就到了3.2KB,程序也只有不到1KB的容量了。 在這時候必須外接存儲器來擴展,那單片機怎么知道我們當前使用的是內(nèi)部程序存儲器還是外部程序存儲器呢?所以就需要設(shè)定單片機是使用外部程序存儲器還是內(nèi)部程序存儲器,89C51把31腳設(shè)定為此功能,如果把31腳接地,則采用外部程序存儲器,如果把31腳接VCC,則默認采用內(nèi)部程序存儲器。我們暫時只是顯示幾十個漢字研究原理,所以僅僅用內(nèi)部存儲器就足夠了,所以把31腳接高電位,就僅僅使用內(nèi)部的4K程序存儲空間。如(圖2.3)所示。但是在現(xiàn)實大屏幕顯示應(yīng)用中,一般要擴展ROM,比如24C08(8K的E2PROM),因為大量的數(shù)據(jù)是有電腦傳送過來的,每個單片機只是負責自己控制的一行字符,這些數(shù)據(jù)是要隨時更新的,采用ROM可以隨時更新內(nèi)容,而且一般的顯示程序優(yōu)化以后的代碼4K也夠用了。
圖2.3  89C51的基本外部電路
2.2 列驅(qū)動電路
    每個漢字需要4個8*8的LED點陣,要想實現(xiàn)8行掃描驅(qū)動,上下2行只使用了1個74HC595接到LED點陣模塊上,而每個漢字是按照16*16取模,所以需要2個74HC595來驅(qū)動一個漢字,我的電路設(shè)計的是8個漢字,所以需要8*2=16個74HC595來實現(xiàn)8行掃描顯示。設(shè)計好的列驅(qū)動電路的部分如下(圖2.4)所示:
圖2.4 列驅(qū)動部分電路圖
2.2.1 串入并出移位寄存器74HC595
    列驅(qū)動電路由集成電路74HC595構(gòu)成。它具有一個8位串入并出的移位寄存器和一個8位輸出鎖存器,而且移位寄存器和輸出鎖存器的控制是各自獨立的,可以實現(xiàn)在顯示本行各列數(shù)據(jù)的同時,傳送下一行的列數(shù)據(jù),即達到數(shù)據(jù)準備的目的。
圖2.5  74HC595外形及內(nèi)部邏輯結(jié)構(gòu)
74HC595的外形及內(nèi)部結(jié)構(gòu)如(圖2.5)所示。它的輸入端有8個串行移位寄存器,每個移位寄存器的輸出都連接一個輸出鎖存器。引腳SI是串行數(shù)據(jù)的輸入端。引腳SCK是移位寄存器的移位時鐘脈沖,在其上升沿發(fā)生移位,并將SI的下一個數(shù)據(jù)輸入最低位。移位后的各位信號出現(xiàn)在各移位寄存器的輸出端,也就是輸出鎖存器的輸入端。RCK是輸出鎖存器的輸入信號,其上升沿將移位寄存器的輸出輸入到輸出鎖存器。引腳G是輸出三態(tài)門的開放信號,只有當其為低時鎖存器的輸出才開放,否則輸出端為高阻狀態(tài)。SCLR信號是移位寄存器的清0輸入端,當其為低時移位寄存器的輸出全部為0。由于SCK和RCK兩個信號是互相獨立的,所以能夠做到輸入串行移位與輸出鎖存互不干擾。芯片的輸出端為QA~QH,最高位QH可作為多片74HC595級聯(lián)應(yīng)用時向上一級的級聯(lián)輸出。但因QH受輸出鎖存器輸入控制,所以還從輸出鎖存器前引出了QH’,作為與移位寄存器完全同步的級聯(lián)輸出。
由74HC595在4.5V供電的情況下(25℃),可以達到21MHz以上的時鐘頻率,而我們采用的89S51的時鐘頻率只有24MHz,串口方式0的時鐘頻率只有fosc/12=2MHz,所以74HC595完全勝任;由于74HC595輸出高電平時每個管腳的驅(qū)動電流只有20mA,而每個LED發(fā)光管的驅(qū)動電流也是20mA,要是8個發(fā)光管同時輪流點亮的時候瞬間電流必定大于20mA,所以我們采用是采用吸收電流的方式直驅(qū)LED發(fā)光管。
2.3 行驅(qū)動電路
     本設(shè)計采用的是行驅(qū)動電路,主要是將輸入的信號通過3/8譯碼器譯碼后,再通過TIP127擴流以驅(qū)動LED點亮,然后再進行行掃描來達到動態(tài)顯示的目的。
2.3.1 電路的設(shè)計
89S51單片機P2口低4位輸出的3條行選信號和2條使能信號,通過74LS244八位數(shù)據(jù)緩沖器,經(jīng)緩沖調(diào)整后,再將數(shù)據(jù)送往3/8譯碼器74LS138譯碼的輸入端,生成8條行選通信號線,接入一10K的電阻,再接入TIP127的基極,當TIP127導(dǎo)通后再去驅(qū)動對應(yīng)的行LED顯示。其硬件電路如(圖2.6)所示:
圖2.6  74LS138譯碼擴流電路
2.3.2 3—8線譯碼器74LS138
    我們前面的列驅(qū)動電路里面只是用了單片機的串口跟P3口,還剩下P0口以及P1口可以直接接到8個LED的行選端,但是為了整個大屏幕方便以后擴展控制,以及防止直接驅(qū)動損壞單片機以及隔離外界干擾信號,所以使用了74LS138這個3—8譯碼器作為行選通的芯片。
    74LS138譯碼器的引腳圖,邏輯圖及真值表如下(圖2.7)、(表2.1)所示:
    圖2.7  74LS138的外部引腳圖以及內(nèi)部原理圖
表2.1  3線-8線譯碼器74LS138的真值表
由上看以看出,只要在信號輸入端A,B,C輸入特定組合的1、0的組合序列,就可以在輸出端輪只有一個流輸出低電壓0,這樣我們就可以有選擇的控制行電路。
2.3.3 大電流達林頓管TIP127
  TIP127是一種大功率的PNP型達林頓管,其主要目的在于LED的列驅(qū)動電路做擴流作用。我們知道按每一LED器件20mA電流計算,64(8*8)個LED同時點亮?xí)r,需要1280mA即1.28A電流,所以選用TIP127作為驅(qū)動管,它的最大工作電流可達10A,所以不需要加散熱既可穩(wěn)定工作。它的原理圖如下(圖2.8)所示:
           
圖2.8  TIP127的內(nèi)部原理圖
2.3.4 位數(shù)據(jù)緩沖器74LS244
    我們?yōu)榱烁綦x外界的干擾信號,使用了74LS244八位數(shù)據(jù)緩沖器。因為任何時候74HC595里面的數(shù)據(jù)是不確定的,只要顯示屏只要稍微有一點外界干擾,導(dǎo)致74LS138使能端E變低, 74LS138就是會有輸出信號的(通過它的真值表可以看到全0全1都有一行是被選中輸出低電位的),TIP127被電阻拉到高電平這樣顯示屏就顯示一些不確定的圖案,就不符合我們的設(shè)計要求了。74LS244是一個常用的八緩沖器,它的管腳圖以及控制表如(圖2.9)所示:
   
            圖 2.9 74LS244的外部管腳圖及門控制端的真值表
2.4 LED點陣屏的輸入輸出端口
    對于整個LED點陣屏,從單片機的I/O口輸入時,是先接入到74HC244的,為的是讓數(shù)據(jù)起到緩沖的作用。因為考慮到當需要多個這樣的顯示8位漢字的LED點陣屏顯示時,必須將幾個這樣的LED點陣屏級連。所以每個LED點陣屏都留有輸出端。其電路如(圖2.10):
  
                          圖2.10  級聯(lián)端口
   U1:5代表高低位138的G2B,U2:4-5代表低位138的G2A和G2B,
    U1:4代表高低位138的G2A,高位138的G1已接高電平,而低位138的G1用U2:6來表示。
圖2.11  LED屏的輸出端口
                    圖 2.12  LED屏的輸入端口
2.5 小結(jié)
    本章介紹了硬件的連接方法以及原理,并且包含了部分電路圖,此電路已經(jīng)試驗證明可以顯示漢字信息,并且可動態(tài)顯示,其中運用了74HC595以及74LS244芯片,74HC595的功能是串入并出,并且?guī)в墟i存和移位的功能;而74LS244的作用就是完全屏蔽掉外界的干擾,只有單片機發(fā)出的正確的信號才被它選擇通過,一般的電路干擾,電磁干擾不會對顯示屏造成亂碼。而行驅(qū)動則是使用了3-8線譯碼器74LS138驅(qū)動TIP127大功率達林頓管。如果用單片機直接連接LED點陣,引腳不夠,同時驅(qū)動能力也不行,而用了這個譯碼器,可以節(jié)省引腳,并且方便以后擴展。
3 系統(tǒng)軟件設(shè)計
  顯示屏軟件的主要功能是向顯示屏提供顯示數(shù)據(jù),并產(chǎn)生各種控制信號,使屏幕按設(shè)計的要求顯示。根據(jù)軟件分層次設(shè)計的原理,可把顯示屏的軟件系統(tǒng)分成兩大層:第一層是底層的顯示驅(qū)動程序,第二層是上層的系統(tǒng)應(yīng)用程序。顯示驅(qū)動程序負責向點陣屏傳送特定組合的顯示數(shù)據(jù),并負責產(chǎn)生行掃描信號和其它控制信號,配合完成LED顯示屏的掃描顯示工作。顯示驅(qū)動程序由顯示子程序?qū)崿F(xiàn),系統(tǒng)環(huán)境設(shè)置(初始化)由系統(tǒng)初始化程序完成,顯示效果處理等工作,則由主程序通過調(diào)用子程序來實現(xiàn)。
3.1 顯示驅(qū)動程序
    然后顯示驅(qū)動程序查詢當前燃亮的行號,從顯示緩存區(qū)內(nèi)讀取下一行的顯示數(shù)據(jù),并通過串口發(fā)送給移位寄存器。為消除在切換行顯示數(shù)據(jù)的時候產(chǎn)生拖尾現(xiàn)象,驅(qū)動程序先要關(guān)閉顯示屏,即消隱,等數(shù)據(jù)發(fā)送完畢后輸出74HC595的鎖存信號,將顯示數(shù)據(jù)打入輸出鎖存器并鎖存,然后再輸出新的行號,并打開顯示。圖3.1為顯示驅(qū)動程序(顯示屏掃描函數(shù))流程圖。
圖3.1 顯示驅(qū)動程序流程圖
3.2 系統(tǒng)主程序
  系統(tǒng)主程序開始以后,首先是對系統(tǒng)環(huán)境初始化,包括設(shè)置串口,端口以及一些參數(shù);然后分屏顯示“懷化學(xué)院物電系!,劉小敏的畢業(yè)設(shè)計”;關(guān)閉屏3秒鐘,再靜止顯示“懷化學(xué)院物電系!”停留約3秒,接著開始左跑馬滾動顯示“懷化學(xué)院物電系!,劉小敏的畢業(yè)設(shè)計”。設(shè)置系統(tǒng)程序不斷地循環(huán)執(zhí)行上述顯示效果。圖3.2是系統(tǒng)主程序的流程圖。
圖3.2 系統(tǒng)主程序流程圖
3.3 部分源程序3.3.1 主程序
    以下是32x64點陣LED電子顯示屏的源程序,采用C語言編寫,在Keil μVisionV3[11]的編譯環(huán)境下測試通過,并通過了硬件的測試。
    main()
{
              uchar i,*k1,*k2,m=0;
              uint j=0;
              end=0;
              enh=0;
              a=0;
              b=0;
              c=0;
              k1=shu;
              k2=shu;
              while(1)
              {
                            sring(k1,k2);
                            mDelay(1);
                            enh=0;
              }
}
3.3.2 分屏顯示
    該分屏方法是,將我做的字體庫分成兩個部分,然后在主程序中先調(diào)用第一個字體庫,通過一段時間的延時后,再調(diào)用第二個字體庫,然后循環(huán)調(diào)用即可實現(xiàn)分屏顯示。
3.3.2 移送數(shù)據(jù)子程序
     void fachar(uchar i,uchar m)  // 送上下兩行的8位數(shù)據(jù)
{
              uchar j;
              for(j=0;j<8;j++)            //移8次
              {
                            sclk=0;
                  datal=(bit)(0x80&i);     //8位數(shù)據(jù)依次與0X80相與
                            datah=(bit)(0x80&m);
                  sclk=1;
                            i=i<<1;   //一位一位的移送數(shù)據(jù)
                            m=m<<1;
              }
}
3.3.3 發(fā)字模數(shù)據(jù)子程序
void fachars(uchar *zima,uchar *zima1)
{
              uchar i;
              lclk=0;
              for(i=0;i<4;i++)       //每行送4個漢字
              {
                            fachar(*(zima+i*32),*(zima1+(i+4)*32));         //送上下兩行的前16個數(shù)據(jù)
                            fachar(*(zima+1+i*32),*(zima1+1+(i+4)*32));     //送上下兩行的后16個數(shù)據(jù)
              }                           
/*              for(i=0;i<8;i++)
              {
   fachar(*(zima++));
              }*/            
}
3.3.4 輸出行號及138使能子程序
     void sring(uchar *zima,uchar *zima1)
{
              uchar i;
              end=0;             //打開138進行譯碼
              enh=0;
              for(i=0;i<8;i++)
              {                           
                            fachars(zima,zima1);        //發(fā)送列數(shù)據(jù)
                            end=1;
                            P3=((P3&0xf8)|i);          //進行行掃描
                            lclk=1;                 
                            end=0;
                            mDelay(1);
                            zima+=2;
                            zima1+=2;
              }
              enh=1;
              end=1;
              for(i=0;i<8;i++)
              {                           
                            fachars(zima,zima1);
                            end=1;
                            P3=((P3&0xf8)|i);
                            lclk=1;
                            end=0;
                            mDelay(1);
                            zima+=2;
                            zima1+=2;
              } }
3.3.5 漢字左移子程序
                   圖3.3  漢字左移流程圖
3.4 字模提取
    該軟件中顯示的字體都是通過專門的漢字提取軟件來實現(xiàn)的。該軟件名為字模提取V2.1CopyLeft By Horse 2000.其提取方法為在漢字輸入?yún)^(qū)輸入你所需要的漢字后(可輸入多個字體),同時按下CTRL+ENTER,然后在“取模方式”菜單中選取“C51格式”,再在“修改圖象”菜單下選取“黑白反顯圖象”。這時點陣生成區(qū)則會出現(xiàn)相應(yīng)字體的漢字代碼。起操作界面如下:
                       圖3.4  字模提取軟件界面
4 系統(tǒng)調(diào)試
系統(tǒng)調(diào)試是做電子產(chǎn)品設(shè)計的一個很重要的部分,一般調(diào)試分為硬件部分和軟件部分。硬件的調(diào)試主要是分析自己所設(shè)計的電路是否是正確的,同時檢查電路是否短路,開路以及元器件是否焊接正確,調(diào)試的時候可以分塊檢測。而軟件調(diào)試主要通過編程看是否能夠達到自己預(yù)期的想法,同時也要注意程序的簡潔和優(yōu)化,調(diào)試的時候可以通過先寫個小程序一步一步去實現(xiàn)它。
4.1 硬件調(diào)試
本設(shè)計硬件部分的調(diào)試主要是根據(jù)實物(8位LED點陣屏)來弄清其具體結(jié)構(gòu)和工作原理。在整個硬件調(diào)試中,我們主要以幾個核心IC為突破點,從74HC595的特性可知其傳送的是顯示的數(shù)據(jù),而74HC244則是將輸入的數(shù)據(jù)進行緩沖處理防止干擾,對于74HC138及TIP127組成的擴流譯碼電路中則知是進行行掃描。在硬件調(diào)試過程中還遇到了屏幕閃動的問題,后來考慮到單片機的處理速度,原因可能是掃描的過慢了,故將12M晶振改為24M,其后的顯示效果得到了明顯的改善。
4.2 軟件調(diào)試
    在軟件的調(diào)試中,我首先是寫了一個一行顯示的小程序,可以后我接著寫了兩行顯示的程序,但發(fā)現(xiàn)第二排的漢字前八個字節(jié)沒問題,而后八個字節(jié)出現(xiàn)了亂碼。因為移數(shù)據(jù)的地方是通過了的,所以從中可以分析是送漢字代碼的地方出錯了,后來查出果然是送漢字代碼的指針搞錯了。還有在分屏顯示的時候我本來采用一個字庫來做成分兩個字庫顯示,用一個變量來改變字的顯示,并建立了一個標志位,但出現(xiàn)了一個用什么改變作為標志位變化的問題,考慮至此我采用了最基本的方法是建立兩個庫,然后在主程序中分別調(diào)用的方式來解決的。
5 結(jié)論
    本文通過設(shè)計單片機控制單色LED顯示屏的方法,對LED顯示模塊單元如何進行行列信號控制及信號傳輸中的驅(qū)動問題進行了研究。介紹了硬件的原理以及連接的方法,軟件的設(shè)計流程,經(jīng)焊接并調(diào)試后可以正常顯示漢字、圖片信息,并且可動態(tài)顯示。
    硬件部分的設(shè)計保證了點陣的正常工作。列驅(qū)動電路中的74HC595實現(xiàn)了串入并出,并且?guī)в墟i存和移位的功能;而74LS244則是防止外界的干擾會對顯示屏造成亂碼。行驅(qū)動電路使用了3-8線譯碼器74LS138驅(qū)動TIP127大電流低電阻的N溝道場效應(yīng)管,因為如果用單片機直接連接LED點陣,引腳不夠,同時驅(qū)動能力也不行,而用了這個譯碼器,可以節(jié)省引腳,并且方便做大屏幕的時候擴展。
軟件部分的設(shè)計跟硬件完美配合實現(xiàn)漢字、圖形的顯示。通過LED點陣顯示原理,我們知道只要合理的安排行選信號以及列信號同時導(dǎo)通的組合順序就可以顯示任何的圖形、文字。軟件的設(shè)計就是完成將漢字點陣數(shù)據(jù)通過一些特殊的算法調(diào)整,得到跟LED點陣相對應(yīng)的數(shù)據(jù),并將這些數(shù)據(jù)以及控制信號傳送到LED點陣屏,來實現(xiàn)預(yù)期的顯示效果。
但本設(shè)計同時也存在著一些問題。在硬件方面,整個屏幕上會存在一些LED不是很亮,還有信號容易受到外界的干擾,屏幕會有些跳動,所以很應(yīng)該加強硬件抗干擾的能力。在軟件方面,顯示的方式比較單一,還可以考慮其他種顯示方式,如上下移動,向右移動,以及從中間向四周擴散的移動方式。
參考文獻
  • 李華等編著·MCS-51系列單片機實用接口技術(shù)·北京:北京航空航天大學(xué)出版社,1993234~236
  • 張立科·單片機通信技術(shù)與工程實踐·北京:人民郵電出版社,2005156~161
  • 張凱等編著·MCS-51單片機綜合系統(tǒng)及其設(shè)計開發(fā)·北京:科學(xué)出版社,1996

187~189.

  • 朱宇光編著·單片機應(yīng)用新技術(shù)教程·北京:電子工業(yè)出版社,2000301~303
  • 諸昌鈐·LED顯示屏系統(tǒng)原理與工程技術(shù)·成都:電子科技大學(xué)出版社,2000

245~250.

  • 余永權(quán)·89系列FLASH單片機原理與應(yīng)用·北京:電子工業(yè)出版社,2000

112~114.  

  • 樓然苗,李光飛·51系列單片機設(shè)計實例·北京:北京航空航天大學(xué)出版

2003:330~332.

  • 李東生·PROTEL 99SE電路設(shè)計技術(shù)入門與應(yīng)用·北京:電子工業(yè)出版社

2002:387~390.

  • 張有順編著·MCS-51/96系列單片機簡明教程·北京:中國脊梁出版社,1998

124~125.

  • 謝宋和·單片機在 LED 顯示屏中的應(yīng)用·電子與自動化·98年第4

[11] Keil software Company.Cx51 Compiler User’s Guide.2001



附錄A
實物顯示效果圖:
             圖A  單片機主控制部分
              圖B  點陣屏顯示部分


完整的Word格式文檔51黑下載地址:
基于51單片機的LED點陣屏的設(shè)計與實現(xiàn).doc (3.28 MB, 下載次數(shù): 68)


回復(fù)

使用道具 舉報

ID:143914 發(fā)表于 2018-8-25 07:12 來自觸屏版 | 顯示全部樓層
剛得了幾塊32*64的雙色屏,正好學(xué)習(xí)下,感謝樓主
回復(fù)

使用道具 舉報

ID:393255 發(fā)表于 2018-9-8 20:48 | 顯示全部樓層
最近一直在研究LED點陣屏,進展很慢,學(xué)習(xí)內(nèi)容比較少,感謝樓主的教程。
回復(fù)

使用道具 舉報

ID:450904 發(fā)表于 2018-12-20 17:20 | 顯示全部樓層
謝謝樓主分享,愛你呦
回復(fù)

使用道具 舉報

ID:465401 發(fā)表于 2019-1-9 20:48 | 顯示全部樓層
樓主,能否加好友,有問題想請假下
回復(fù)

使用道具 舉報

ID:74933 發(fā)表于 2019-4-22 19:12 | 顯示全部樓層
最近一直在研究LED點陣屏,進展很慢,學(xué)習(xí)內(nèi)容比較少,感謝樓主的教程。
回復(fù)

使用道具 舉報

ID:734102 發(fā)表于 2020-4-21 09:08 | 顯示全部樓層
感謝樓主的整理,最近學(xué)習(xí)正好用到
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表