基于51單片機(jī)的LED點(diǎn)陣屏的設(shè)計(jì)與實(shí)現(xiàn) 摘 要本文主要闡述了用51單片機(jī)控制單色32*64的LED點(diǎn)陣屏顯示的方法,對(duì)LED點(diǎn)陣屏如何進(jìn)行行列信號(hào)控制及信號(hào)傳輸中的驅(qū)動(dòng)問題進(jìn)行了研究,并討論了單片機(jī)控制系統(tǒng)中關(guān)鍵的數(shù)據(jù)處理以及發(fā)送問題。結(jié)果表明采用并行數(shù)據(jù)輸入、串行數(shù)據(jù)及同步時(shí)鐘傳輸?shù)膶S秒娐房纱蟠鬁p少CPU的輔助時(shí)間,提高了數(shù)據(jù)的發(fā)送速度。并給出了通過軟件控制點(diǎn)陣屏顯示的幾種方式,如靜態(tài)顯示,分屏顯示以及左移顯示,對(duì)其軟件的算法給出了具體分析。基于各種算法我們就可以靈活的運(yùn)用軟件實(shí)現(xiàn)各種顯示,并將其用于商業(yè)用途。
前言 隨著社會(huì)文化的不斷發(fā)展,人們的消費(fèi)標(biāo)準(zhǔn)不斷提高,戶外燈箱廣告更是扮演著越來越重要的宣傳角色,不論是汽車站,火車站,股票交易市場(chǎng),還是學(xué)校都離不開它,然而傳統(tǒng)的霓虹燈廣告牌不論是在顯示效果、耗電量還是可修改性上都無法滿足當(dāng)前社會(huì)的需求,傳統(tǒng)的霓虹燈廣告亟待改進(jìn)。 由于單片機(jī)技術(shù)的不斷發(fā)展和高亮度LED發(fā)光管的出現(xiàn)使得大屏幕高亮度LED電子廣告屏成為可能,與傳統(tǒng)的霓虹燈廣告在顯示效果以及可修改性上都有著無法比擬的優(yōu)勢(shì),而且單片機(jī)的日益平民化以及LED技術(shù)的不斷創(chuàng)新,使得高亮度高清晰的LED點(diǎn)陣廣告牌與傳統(tǒng)霓虹燈廣告牌的成本日益接近。另外,SMT技術(shù)的飛速發(fā)展,開關(guān)電源的大規(guī)模使用,使其無論在體積上還是在可靠性上都比傳統(tǒng)的霓虹燈廣告有明顯的改進(jìn),為其在特殊領(lǐng)域的應(yīng)用奠定了基礎(chǔ)。 這種新興的大屏幕顯示技術(shù)成為眾人目光的焦點(diǎn)。與傳統(tǒng)的顯示設(shè)備相比,首先,LED 顯示屏色彩豐富,3基色的發(fā)光管可以顯示全彩色,顯示方式變化多樣(文字、圖形、動(dòng)畫、視頻、電視畫面等),是集光電子技術(shù)、微電子技術(shù)、計(jì)算機(jī)技術(shù)、信息處理技術(shù)于一體的高技術(shù)產(chǎn)品,可用來顯示文字、計(jì)算機(jī)屏幕同步的圖形。其次,LED顯示屏的像素采用LED發(fā)光二極管,將多個(gè)發(fā)光二極管以序列的形式構(gòu)成LED顯示陣列,這種顯示屏具有耗電低、成本低、亮度和清晰度高、壽命長等優(yōu)點(diǎn),而且 LED 顯示屏其受空間限制較小,并可以根據(jù)用戶要求設(shè)計(jì)屏的大小,具有全彩色效果,視角大,是信息傳播設(shè)施劃時(shí)代的產(chǎn)品。再次,LED 顯示屏應(yīng)用廣泛,金融證券、銀行利率、商業(yè)廣告、文化娛樂等方面,顯示效果清晰穩(wěn)定,越來越多的地方開始使用LED電子顯示屏,有巨大的社會(huì)效益和經(jīng)濟(jì)效益。它以其超大畫面、超寬視覺、靈活多變的顯示方式等獨(dú)居一格的優(yōu)勢(shì),成為目前國際上使用廣泛的顯示系統(tǒng)。 1 概述
1.1 設(shè)計(jì)任務(wù)本設(shè)計(jì)主要任務(wù)是設(shè)計(jì)一個(gè)實(shí)用的32*64 LED點(diǎn)陣屏的圖文顯示,要求在目測(cè)條件下LED顯示屏各點(diǎn)亮度均勻、充足,可顯示圖形和文字,顯示圖形或文字穩(wěn)定、清晰無串?dāng)_。圖形或文字顯示有靜止和移入移出等顯示方式。本文還重點(diǎn)介紹了單片機(jī)對(duì)LED點(diǎn)陣屏的控制電路,驅(qū)動(dòng)電路的設(shè)計(jì)方法,并根據(jù)LED點(diǎn)陣屏的硬件特點(diǎn), 對(duì)其軟件實(shí)現(xiàn)的算法給出了具體的分析。從而實(shí)現(xiàn)了顯示的字體能夠進(jìn)行向左移動(dòng)。 1.2 點(diǎn)陣屏的內(nèi)部結(jié)構(gòu)及掃描原理 LED點(diǎn)陣屏的內(nèi)部結(jié)構(gòu)可以分為共陰型和共陽型[5]兩種類型,本系統(tǒng)設(shè)計(jì)采用的是共陽型的LED點(diǎn)陣屏。 其硬件電路如(圖1.1)所示,我們只選取了一個(gè)8*8的LED矩陣做模型,當(dāng)行上有一正選通信號(hào)時(shí),列選端四位數(shù)據(jù)為0的發(fā)光二極管便導(dǎo)通點(diǎn)亮。根據(jù)這個(gè)原理,當(dāng)我們需要某圖形或文字時(shí),只需要將要顯示的文字或圖形的編碼作為列信號(hào)跟對(duì)應(yīng)的行信號(hào)進(jìn)行逐次掃描[1],就可以逐行點(diǎn)亮點(diǎn)陣。當(dāng)掃描速度大于24Hz,由于掃描時(shí)間很快,人眼的視覺有暫留效應(yīng)[3],就可以看到顯示的是完整的圖形或文字,這樣就達(dá)到了顯示的效果。 圖1.1 8*8共陽極LED點(diǎn)陣 例如,若要圖中所示64個(gè)LED顯示一個(gè)“0”字的方框,則首先在列1~8上寫入列編碼的信號(hào),接著應(yīng)將對(duì)應(yīng)的行上加選通信號(hào),即在行、列的信號(hào)端分別加上如(圖1.2)所示數(shù)據(jù),這樣,假設(shè)顯示數(shù)字為“0”時(shí): 1 2 3 4 5 6 7 8 00 00 3E 41 41 41 3E 00 圖1.2 在點(diǎn)陣上所加的行信號(hào)以及列選擇信號(hào) 因此,形成的列代碼為00H,00H,3EH,41H,41H,41H,3EH,00H;只要把這些代碼分別送到相應(yīng)的列線上面,即可實(shí)現(xiàn)“0”的數(shù)字顯示。 送顯示代碼過程如下所示: 送第一列線代碼到P3端口,同時(shí)置第一行線為“0”,其它行線為“1”,延時(shí)2ms左右; 送第二列線代碼到P3端口,同時(shí)置第二行線為“0”,其它行線為“1”,延時(shí)2ms左右; 如此下去,直到送完最后一列代碼,又從頭開始送。如此循環(huán)下去,當(dāng)刷新頻率足夠高時(shí)(大于24Hz),由于人眼的視覺暫留特性,便可得到一個(gè)穩(wěn)定的“0”字。這就簡單的描敘了一下的點(diǎn)亮LED的掃描原理。 1.3 方案論證1.3.1 顯示方法的論證 方案一:從理論上說,不論顯示圖形還是文字,只要控制與組成這些圖形或文字的各個(gè)點(diǎn)所在位置相對(duì)應(yīng)的LED器件發(fā)光,就可以得到我們想要的顯示結(jié)果,這種控制各個(gè)發(fā)光點(diǎn)同時(shí)亮滅的方法稱為靜態(tài)驅(qū)動(dòng)顯示方法[2]。但從實(shí)際考慮可以知道,32*64的點(diǎn)陣共有2048個(gè)發(fā)光二極管,如果采用這種方法,顯然單片機(jī)沒有這么多端口。但如果我們采用鎖存器來擴(kuò)展端口,按8位的鎖存器來計(jì)算,32*64的點(diǎn)陣需要256個(gè)鎖存器。這個(gè)數(shù)字仍然很龐大,而且成本很昂貴,而我們僅僅是32*64的8個(gè)漢字點(diǎn)陣,但在實(shí)際應(yīng)用中的顯示屏往往要大得多,這樣在鎖存器上花的成本將是一個(gè)很龐大的數(shù)字。顯然這樣做不能達(dá)到我們的要求,因此在實(shí)際應(yīng)用中的顯示屏幾乎都不采用這種設(shè)計(jì)方法。 方案二:而這里我們采用的是另外的一種叫做動(dòng)態(tài)掃描[10]的方法。 動(dòng)態(tài)掃描的意思簡單地說就是逐行輪流點(diǎn)亮,這樣掃描驅(qū)動(dòng)電路就可以實(shí)現(xiàn)多行(比如8行)的同名列共用一套列驅(qū)動(dòng)器。具體就32*64的點(diǎn)陣來說,把所有同一列的發(fā)光管的陰極連在一起,再去驅(qū)動(dòng)這一列LED (共陽接法),每一列先送出對(duì)應(yīng)第1行發(fā)光管對(duì)應(yīng)的數(shù)據(jù)并鎖存,再選通第1行使其點(diǎn)亮一定的時(shí)間,然后熄滅;再送出第2行的數(shù)據(jù)并鎖存,再選通第2行使其點(diǎn)亮相同的時(shí)間,然后熄滅……第8行之后,又重新點(diǎn)亮第1行,反復(fù)輪回。當(dāng)這樣輪回的速度足夠快(每秒24次以上),由于人眼的視覺暫留現(xiàn)象,就能看到顯示屏上穩(wěn)定的圖形了。 1.3.2 數(shù)據(jù)傳送的方法論證 方案一:采用掃描方式進(jìn)行顯示時(shí),每行有一個(gè)行驅(qū)動(dòng)器,各行的同名列共用一個(gè)列驅(qū)動(dòng)器。顯示數(shù)據(jù)通常存儲(chǔ)在單片機(jī)的程序存儲(chǔ)器中,按8位一個(gè)字節(jié)的形式順序排放。顯示時(shí)只要把一行中各列的數(shù)據(jù)都傳送到相應(yīng)的列驅(qū)動(dòng)器上去,這就存在一個(gè)顯示數(shù)據(jù)傳輸?shù)膯栴}。從控制電路到列驅(qū)動(dòng)器的數(shù)據(jù)傳輸可以采用并行方式或串行方式。采用并行方式時(shí),32*64的LED點(diǎn)陣有8列8*8的點(diǎn)陣,需要8*8=64個(gè)列數(shù)據(jù)輸入口,而一個(gè)89S51只有32個(gè)I/O接口,還要同時(shí)驅(qū)動(dòng)行數(shù)據(jù),根本不夠用,并且從控制電路到列驅(qū)動(dòng)器的線路數(shù)量大,相應(yīng)的硬件數(shù)目多,由此可以得出,當(dāng)列數(shù)很多時(shí),并行傳輸?shù)姆桨甘遣豢扇〉摹?/font> 方案二:采用串行傳輸[10]的方法,控制電路可以只用2根線:數(shù)據(jù)線、時(shí)鐘線。將行數(shù)據(jù)一位一位傳往行驅(qū)動(dòng)器,在硬件方面無疑是十分經(jīng)濟(jì)的。但是,串行傳輸過程較長,數(shù)據(jù)按順序一位一位地輸出給行驅(qū)動(dòng)器,只有當(dāng)一行的各列數(shù)據(jù)都已傳輸?shù)轿恢螅@一行的各列才能并行地進(jìn)行顯示。這樣,對(duì)于一行的顯示過程就可以分解成列數(shù)據(jù)準(zhǔn)備傳輸和列數(shù)據(jù)顯示兩個(gè)部分。對(duì)于串行傳輸方式來說,列數(shù)據(jù)準(zhǔn)備時(shí)間可能相當(dāng)長,在行掃描周期確定的情況下,留給顯示的時(shí)間就太少了,以致影響到LED的亮度。解決串行傳輸中列數(shù)據(jù)準(zhǔn)備和列數(shù)據(jù)顯示的時(shí)間矛盾問題,可以采用準(zhǔn)備數(shù)據(jù)鎖存的方法。即在顯示本行數(shù)據(jù)的同時(shí),傳送下一行的數(shù)據(jù)。所以列數(shù)據(jù)的顯示驅(qū)動(dòng)電路就需要具有鎖存功能。經(jīng)過上述分析,可以歸納出列驅(qū)動(dòng)器電路應(yīng)具備的主要功能:對(duì)數(shù)據(jù)準(zhǔn)備來說,它應(yīng)能實(shí)現(xiàn)串入并出[7]的移位功能;對(duì)數(shù)據(jù)顯示來說,應(yīng)具有并行鎖存的功能。這樣,本行已準(zhǔn)備好的數(shù)據(jù)輸人并行鎖存器進(jìn)行顯示時(shí),串并移位寄存器就可以準(zhǔn)備下一行的列數(shù)據(jù),而不會(huì)影響本行的顯示。同時(shí)為了LED顯示的亮度,采用8行掃描,每個(gè)漢字上面有2個(gè)8列驅(qū)動(dòng)器驅(qū)動(dòng),列驅(qū)動(dòng)器的位置應(yīng)該是在第1行跟第9行,即每個(gè)16*16的漢字點(diǎn)陣是有4個(gè)8*8的點(diǎn)陣組成的陣列,掃描的時(shí)候同時(shí)掃描顯示第1行跟第9行,第二次掃描的時(shí)候顯示第2行跟第10行,以此類推,最后顯示第8行跟第16行。 2 系統(tǒng)硬件設(shè)計(jì) 硬件電路[4]大致上可以分成單片機(jī)系統(tǒng)及外圍電路、列驅(qū)動(dòng)電路和行驅(qū)動(dòng)電路以及LED點(diǎn)陣陣列三大部分。框圖(圖2.1)如下: 圖2.1 硬件的總體框圖 在實(shí)際應(yīng)用中的大屏幕LED點(diǎn)陣顯示屏,都是采用很多的顯示模塊組成,每個(gè)模塊一般是有32*64個(gè)點(diǎn)陣組成,每個(gè)模塊負(fù)責(zé)自己那部分LED的顯示;有電腦通過統(tǒng)一的協(xié)議發(fā)送數(shù)據(jù)到每個(gè)控制單片機(jī),行選是統(tǒng)一的;而且控制模塊也是分開的,一個(gè)控制模塊上面有很多的RAM芯片,控制芯片接收從主控電腦發(fā)送過來的數(shù)據(jù),并將其保存在RAM中,之后不需要電腦控制即可自己循環(huán)控制顯示。而且一個(gè)模塊控制幾個(gè)至幾十個(gè)32*64的點(diǎn)陣模塊。 2.1 單片機(jī)系統(tǒng)及外圍電路 由于LED點(diǎn)陣顯示屏由單片機(jī)控制部分和顯示驅(qū)動(dòng)部分組成,單片機(jī)我選擇最常見的ATMEL公司的AT89C51單片機(jī)。此單片機(jī)與MCS-51產(chǎn)品指令系統(tǒng)[9]完全兼容,由4K字節(jié)可重擦寫Flash閃速存儲(chǔ)器,128*8字節(jié)內(nèi)部RAM,32個(gè)可編程I/O口線,2個(gè)16位定時(shí)/計(jì)數(shù)器和6個(gè)中斷源。同時(shí)支持在線下載,并且該單片機(jī)經(jīng)濟(jì)實(shí)用,使用廣泛。 我們使用的是AT89C51的最小系統(tǒng)電路,包括:電源、時(shí)鐘脈沖、復(fù)位電路和程序存儲(chǔ)器設(shè)定電路,暫時(shí)只是顯示很少的幾十個(gè)漢字,不用外擴(kuò)存儲(chǔ)器。 2.1.1 時(shí)鐘脈沖電路 AT89C51單片機(jī)芯片內(nèi)部設(shè)有一個(gè)反向放大器所構(gòu)成的振蕩器,其最高時(shí)鐘脈沖頻率已經(jīng)達(dá)到了24MHz ,AT89C51的兩個(gè)引腳XTAL1和XTAL2(即19、18腳)分別為振蕩電路的輸入端和輸出端,只要連接到簡單的石英振蕩晶體的2個(gè)管腳即可,同時(shí)晶體的2個(gè)管腳也要用30pF的電容耦合到地。
2.1.2 復(fù)位電路 89C51的復(fù)位引腳(RESET)是第9腳,當(dāng)此引腳連接高電平超過2個(gè)機(jī)器周期,即可產(chǎn)生復(fù)位的動(dòng)作。以24MHz的時(shí)鐘脈沖為例,每個(gè)時(shí)鐘脈沖為0.5μS,兩個(gè)機(jī)器周期為1µS,因此,在第9腳上連接一個(gè)2μS的高電平脈沖,即可產(chǎn)生復(fù)位動(dòng)作。最簡單的硬件電路接法就是用一個(gè)電阻,一個(gè)電容和一個(gè)開關(guān)就構(gòu)成可靠的復(fù)位電路[8],電阻一般選擇10K,電容一般選擇10µF,具體電路如(圖2.2)所示: 圖2.2 通電瞬間復(fù)位電路 2.1.3 程序及數(shù)據(jù)存儲(chǔ)器設(shè)定 因?yàn)閱纹瑱C(jī)內(nèi)部數(shù)據(jù)存儲(chǔ)器[6]只有128 Byte,非常有限,運(yùn)行大一點(diǎn)的程序就顯得捉襟見肘,而且程序存儲(chǔ)器空間也只有4K,大一點(diǎn)的程序就存儲(chǔ)不下,尤其是在存儲(chǔ)漢字點(diǎn)陣信息的時(shí)候,每個(gè)漢字32Byte,100個(gè)漢字就到了3.2KB,程序也只有不到1KB的容量了。 在這時(shí)候必須外接存儲(chǔ)器來擴(kuò)展,那單片機(jī)怎么知道我們當(dāng)前使用的是內(nèi)部程序存儲(chǔ)器還是外部程序存儲(chǔ)器呢?所以就需要設(shè)定單片機(jī)是使用外部程序存儲(chǔ)器還是內(nèi)部程序存儲(chǔ)器,89C51把31腳設(shè)定為此功能,如果把31腳接地,則采用外部程序存儲(chǔ)器,如果把31腳接VCC,則默認(rèn)采用內(nèi)部程序存儲(chǔ)器。我們暫時(shí)只是顯示幾十個(gè)漢字研究原理,所以僅僅用內(nèi)部存儲(chǔ)器就足夠了,所以把31腳接高電位,就僅僅使用內(nèi)部的4K程序存儲(chǔ)空間。如(圖2.3)所示。但是在現(xiàn)實(shí)大屏幕顯示應(yīng)用中,一般要擴(kuò)展ROM,比如24C08(8K的E2PROM),因?yàn)榇罅康臄?shù)據(jù)是有電腦傳送過來的,每個(gè)單片機(jī)只是負(fù)責(zé)自己控制的一行字符,這些數(shù)據(jù)是要隨時(shí)更新的,采用ROM可以隨時(shí)更新內(nèi)容,而且一般的顯示程序優(yōu)化以后的代碼4K也夠用了。 圖2.3 89C51的基本外部電路 2.2 列驅(qū)動(dòng)電路 每個(gè)漢字需要4個(gè)8*8的LED點(diǎn)陣,要想實(shí)現(xiàn)8行掃描驅(qū)動(dòng),上下2行只使用了1個(gè)74HC595接到LED點(diǎn)陣模塊上,而每個(gè)漢字是按照16*16取模,所以需要2個(gè)74HC595來驅(qū)動(dòng)一個(gè)漢字,我的電路設(shè)計(jì)的是8個(gè)漢字,所以需要8*2=16個(gè)74HC595來實(shí)現(xiàn)8行掃描顯示。設(shè)計(jì)好的列驅(qū)動(dòng)電路的部分如下(圖2.4)所示: 圖2.4 列驅(qū)動(dòng)部分電路圖 2.2.1 串入并出移位寄存器74HC595 列驅(qū)動(dòng)電路由集成電路74HC595構(gòu)成。它具有一個(gè)8位串入并出的移位寄存器和一個(gè)8位輸出鎖存器,而且移位寄存器和輸出鎖存器的控制是各自獨(dú)立的,可以實(shí)現(xiàn)在顯示本行各列數(shù)據(jù)的同時(shí),傳送下一行的列數(shù)據(jù),即達(dá)到數(shù)據(jù)準(zhǔn)備的目的。 圖2.5 74HC595外形及內(nèi)部邏輯結(jié)構(gòu) 74HC595的外形及內(nèi)部結(jié)構(gòu)如(圖2.5)所示。它的輸入端有8個(gè)串行移位寄存器,每個(gè)移位寄存器的輸出都連接一個(gè)輸出鎖存器。引腳SI是串行數(shù)據(jù)的輸入端。引腳SCK是移位寄存器的移位時(shí)鐘脈沖,在其上升沿發(fā)生移位,并將SI的下一個(gè)數(shù)據(jù)輸入最低位。移位后的各位信號(hào)出現(xiàn)在各移位寄存器的輸出端,也就是輸出鎖存器的輸入端。RCK是輸出鎖存器的輸入信號(hào),其上升沿將移位寄存器的輸出輸入到輸出鎖存器。引腳G是輸出三態(tài)門的開放信號(hào),只有當(dāng)其為低時(shí)鎖存器的輸出才開放,否則輸出端為高阻狀態(tài)。SCLR信號(hào)是移位寄存器的清0輸入端,當(dāng)其為低時(shí)移位寄存器的輸出全部為0。由于SCK和RCK兩個(gè)信號(hào)是互相獨(dú)立的,所以能夠做到輸入串行移位與輸出鎖存互不干擾。芯片的輸出端為QA~QH,最高位QH可作為多片74HC595級(jí)聯(lián)應(yīng)用時(shí)向上一級(jí)的級(jí)聯(lián)輸出。但因QH受輸出鎖存器輸入控制,所以還從輸出鎖存器前引出了QH’,作為與移位寄存器完全同步的級(jí)聯(lián)輸出。 由74HC595在4.5V供電的情況下(25℃),可以達(dá)到21MHz以上的時(shí)鐘頻率,而我們采用的89S51的時(shí)鐘頻率只有24MHz,串口方式0的時(shí)鐘頻率只有fosc/12=2MHz,所以74HC595完全勝任;由于74HC595輸出高電平時(shí)每個(gè)管腳的驅(qū)動(dòng)電流只有20mA,而每個(gè)LED發(fā)光管的驅(qū)動(dòng)電流也是20mA,要是8個(gè)發(fā)光管同時(shí)輪流點(diǎn)亮的時(shí)候瞬間電流必定大于20mA,所以我們采用是采用吸收電流的方式直驅(qū)LED發(fā)光管。 2.3 行驅(qū)動(dòng)電路 本設(shè)計(jì)采用的是行驅(qū)動(dòng)電路,主要是將輸入的信號(hào)通過3/8譯碼器譯碼后,再通過TIP127擴(kuò)流以驅(qū)動(dòng)LED點(diǎn)亮,然后再進(jìn)行行掃描來達(dá)到動(dòng)態(tài)顯示的目的。 2.3.1 電路的設(shè)計(jì)89S51單片機(jī)P2口低4位輸出的3條行選信號(hào)和2條使能信號(hào),通過74LS244八位數(shù)據(jù)緩沖器,經(jīng)緩沖調(diào)整后,再將數(shù)據(jù)送往3/8譯碼器74LS138譯碼的輸入端,生成8條行選通信號(hào)線,接入一10K的電阻,再接入TIP127的基極,當(dāng)TIP127導(dǎo)通后再去驅(qū)動(dòng)對(duì)應(yīng)的行LED顯示。其硬件電路如(圖2.6)所示: 圖2.6 74LS138譯碼擴(kuò)流電路 2.3.2 3—8線譯碼器74LS138 我們前面的列驅(qū)動(dòng)電路里面只是用了單片機(jī)的串口跟P3口,還剩下P0口以及P1口可以直接接到8個(gè)LED的行選端,但是為了整個(gè)大屏幕方便以后擴(kuò)展控制,以及防止直接驅(qū)動(dòng)損壞單片機(jī)以及隔離外界干擾信號(hào),所以使用了74LS138這個(gè)3—8譯碼器作為行選通的芯片。 74LS138譯碼器的引腳圖,邏輯圖及真值表如下(圖2.7)、(表2.1)所示: 圖2.7 74LS138的外部引腳圖以及內(nèi)部原理圖表2.1 3線-8線譯碼器74LS138的真值表 由上看以看出,只要在信號(hào)輸入端A,B,C輸入特定組合的1、0的組合序列,就可以在輸出端輪只有一個(gè)流輸出低電壓0,這樣我們就可以有選擇的控制行電路。 2.3.3 大電流達(dá)林頓管TIP127 TIP127是一種大功率的PNP型達(dá)林頓管,其主要目的在于LED的列驅(qū)動(dòng)電路做擴(kuò)流作用。我們知道按每一LED器件20mA電流計(jì)算,64(8*8)個(gè)LED同時(shí)點(diǎn)亮?xí)r,需要1280mA即1.28A電流,所以選用TIP127作為驅(qū)動(dòng)管,它的最大工作電流可達(dá)10A,所以不需要加散熱既可穩(wěn)定工作。它的原理圖如下(圖2.8)所示: 圖2.8 TIP127的內(nèi)部原理圖 2.3.4 位數(shù)據(jù)緩沖器74LS244 我們?yōu)榱烁綦x外界的干擾信號(hào),使用了74LS244八位數(shù)據(jù)緩沖器。因?yàn)槿魏螘r(shí)候74HC595里面的數(shù)據(jù)是不確定的,只要顯示屏只要稍微有一點(diǎn)外界干擾,導(dǎo)致74LS138使能端E變低, 74LS138就是會(huì)有輸出信號(hào)的(通過它的真值表可以看到全0全1都有一行是被選中輸出低電位的),TIP127被電阻拉到高電平這樣顯示屏就顯示一些不確定的圖案,就不符合我們的設(shè)計(jì)要求了。74LS244是一個(gè)常用的八緩沖器,它的管腳圖以及控制表如(圖2.9)所示: 圖 2.9 74LS244的外部管腳圖及門控制端的真值表 2.4 LED點(diǎn)陣屏的輸入輸出端口 對(duì)于整個(gè)LED點(diǎn)陣屏,從單片機(jī)的I/O口輸入時(shí),是先接入到74HC244的,為的是讓數(shù)據(jù)起到緩沖的作用。因?yàn)榭紤]到當(dāng)需要多個(gè)這樣的顯示8位漢字的LED點(diǎn)陣屏顯示時(shí),必須將幾個(gè)這樣的LED點(diǎn)陣屏級(jí)連。所以每個(gè)LED點(diǎn)陣屏都留有輸出端。其電路如(圖2.10): 圖2.10 級(jí)聯(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)試驗(yàn)證明可以顯示漢字信息,并且可動(dòng)態(tài)顯示,其中運(yùn)用了74HC595以及74LS244芯片,74HC595的功能是串入并出,并且?guī)в墟i存和移位的功能;而74LS244的作用就是完全屏蔽掉外界的干擾,只有單片機(jī)發(fā)出的正確的信號(hào)才被它選擇通過,一般的電路干擾,電磁干擾不會(huì)對(duì)顯示屏造成亂碼。而行驅(qū)動(dòng)則是使用了3-8線譯碼器74LS138驅(qū)動(dòng)TIP127大功率達(dá)林頓管。如果用單片機(jī)直接連接LED點(diǎn)陣,引腳不夠,同時(shí)驅(qū)動(dòng)能力也不行,而用了這個(gè)譯碼器,可以節(jié)省引腳,并且方便以后擴(kuò)展。 3 系統(tǒng)軟件設(shè)計(jì) 顯示屏軟件的主要功能是向顯示屏提供顯示數(shù)據(jù),并產(chǎn)生各種控制信號(hào),使屏幕按設(shè)計(jì)的要求顯示。根據(jù)軟件分層次設(shè)計(jì)的原理,可把顯示屏的軟件系統(tǒng)分成兩大層:第一層是底層的顯示驅(qū)動(dòng)程序,第二層是上層的系統(tǒng)應(yīng)用程序。顯示驅(qū)動(dòng)程序負(fù)責(zé)向點(diǎn)陣屏傳送特定組合的顯示數(shù)據(jù),并負(fù)責(zé)產(chǎn)生行掃描信號(hào)和其它控制信號(hào),配合完成LED顯示屏的掃描顯示工作。顯示驅(qū)動(dòng)程序由顯示子程序?qū)崿F(xiàn),系統(tǒng)環(huán)境設(shè)置(初始化)由系統(tǒng)初始化程序完成,顯示效果處理等工作,則由主程序通過調(diào)用子程序來實(shí)現(xiàn)。 3.1 顯示驅(qū)動(dòng)程序 然后顯示驅(qū)動(dòng)程序查詢當(dāng)前燃亮的行號(hào),從顯示緩存區(qū)內(nèi)讀取下一行的顯示數(shù)據(jù),并通過串口發(fā)送給移位寄存器。為消除在切換行顯示數(shù)據(jù)的時(shí)候產(chǎn)生拖尾現(xiàn)象,驅(qū)動(dòng)程序先要關(guān)閉顯示屏,即消隱,等數(shù)據(jù)發(fā)送完畢后輸出74HC595的鎖存信號(hào),將顯示數(shù)據(jù)打入輸出鎖存器并鎖存,然后再輸出新的行號(hào),并打開顯示。圖3.1為顯示驅(qū)動(dòng)程序(顯示屏掃描函數(shù))流程圖。 圖3.1 顯示驅(qū)動(dòng)程序流程圖 3.2 系統(tǒng)主程序 系統(tǒng)主程序開始以后,首先是對(duì)系統(tǒng)環(huán)境初始化,包括設(shè)置串口,端口以及一些參數(shù);然后分屏顯示“懷化學(xué)院物電系!,劉小敏的畢業(yè)設(shè)計(jì)”;關(guān)閉屏3秒鐘,再靜止顯示“懷化學(xué)院物電系!”停留約3秒,接著開始左跑馬滾動(dòng)顯示“懷化學(xué)院物電系!,劉小敏的畢業(yè)設(shè)計(jì)”。設(shè)置系統(tǒng)程序不斷地循環(huán)執(zhí)行上述顯示效果。圖3.2是系統(tǒng)主程序的流程圖。 圖3.2 系統(tǒng)主程序流程圖 3.3 部分源程序3.3.1 主程序 以下是32x64點(diǎn)陣LED電子顯示屏的源程序,采用C語言編寫,在Keil μVisionV3[11]的編譯環(huán)境下測(cè)試通過,并通過了硬件的測(cè)試。 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 分屏顯示 該分屏方法是,將我做的字體庫分成兩個(gè)部分,然后在主程序中先調(diào)用第一個(gè)字體庫,通過一段時(shí)間的延時(shí)后,再調(diào)用第二個(gè)字體庫,然后循環(huán)調(diào)用即可實(shí)現(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個(gè)漢字 { fachar(*(zima+i*32),*(zima1+(i+4)*32)); //送上下兩行的前16個(gè)數(shù)據(jù) fachar(*(zima+1+i*32),*(zima1+1+(i+4)*32)); //送上下兩行的后16個(gè)數(shù)據(jù) } /* for(i=0;i<8;i++) { fachar(*(zima++)); }*/ } 3.3.4 輸出行號(hào)及138使能子程序 void sring(uchar *zima,uchar *zima1) { uchar i; end=0; //打開138進(jìn)行譯碼 enh=0; for(i=0;i<8;i++) { fachars(zima,zima1); //發(fā)送列數(shù)據(jù) end=1; P3=((P3&0xf8)|i); //進(jìn)行行掃描 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 字模提取 該軟件中顯示的字體都是通過專門的漢字提取軟件來實(shí)現(xiàn)的。該軟件名為字模提取V2.1CopyLeft By Horse 2000.其提取方法為在漢字輸入?yún)^(qū)輸入你所需要的漢字后(可輸入多個(gè)字體),同時(shí)按下CTRL+ENTER,然后在“取模方式”菜單中選取“C51格式”,再在“修改圖象”菜單下選取“黑白反顯圖象”。這時(shí)點(diǎn)陣生成區(qū)則會(huì)出現(xiàn)相應(yīng)字體的漢字代碼。起操作界面如下: 圖3.4 字模提取軟件界面 4 系統(tǒng)調(diào)試系統(tǒng)調(diào)試是做電子產(chǎn)品設(shè)計(jì)的一個(gè)很重要的部分,一般調(diào)試分為硬件部分和軟件部分。硬件的調(diào)試主要是分析自己所設(shè)計(jì)的電路是否是正確的,同時(shí)檢查電路是否短路,開路以及元器件是否焊接正確,調(diào)試的時(shí)候可以分塊檢測(cè)。而軟件調(diào)試主要通過編程看是否能夠達(dá)到自己預(yù)期的想法,同時(shí)也要注意程序的簡潔和優(yōu)化,調(diào)試的時(shí)候可以通過先寫個(gè)小程序一步一步去實(shí)現(xiàn)它。 4.1 硬件調(diào)試本設(shè)計(jì)硬件部分的調(diào)試主要是根據(jù)實(shí)物(8位LED點(diǎn)陣屏)來弄清其具體結(jié)構(gòu)和工作原理。在整個(gè)硬件調(diào)試中,我們主要以幾個(gè)核心IC為突破點(diǎn),從74HC595的特性可知其傳送的是顯示的數(shù)據(jù),而74HC244則是將輸入的數(shù)據(jù)進(jìn)行緩沖處理防止干擾,對(duì)于74HC138及TIP127組成的擴(kuò)流譯碼電路中則知是進(jìn)行行掃描。在硬件調(diào)試過程中還遇到了屏幕閃動(dòng)的問題,后來考慮到單片機(jī)的處理速度,原因可能是掃描的過慢了,故將12M晶振改為24M,其后的顯示效果得到了明顯的改善。 4.2 軟件調(diào)試 在軟件的調(diào)試中,我首先是寫了一個(gè)一行顯示的小程序,可以后我接著寫了兩行顯示的程序,但發(fā)現(xiàn)第二排的漢字前八個(gè)字節(jié)沒問題,而后八個(gè)字節(jié)出現(xiàn)了亂碼。因?yàn)橐茢?shù)據(jù)的地方是通過了的,所以從中可以分析是送漢字代碼的地方出錯(cuò)了,后來查出果然是送漢字代碼的指針搞錯(cuò)了。還有在分屏顯示的時(shí)候我本來采用一個(gè)字庫來做成分兩個(gè)字庫顯示,用一個(gè)變量來改變字的顯示,并建立了一個(gè)標(biāo)志位,但出現(xiàn)了一個(gè)用什么改變作為標(biāo)志位變化的問題,考慮至此我采用了最基本的方法是建立兩個(gè)庫,然后在主程序中分別調(diào)用的方式來解決的。 5 結(jié)論 本文通過設(shè)計(jì)單片機(jī)控制單色LED顯示屏的方法,對(duì)LED顯示模塊單元如何進(jìn)行行列信號(hào)控制及信號(hào)傳輸中的驅(qū)動(dòng)問題進(jìn)行了研究。介紹了硬件的原理以及連接的方法,軟件的設(shè)計(jì)流程,經(jīng)焊接并調(diào)試后可以正常顯示漢字、圖片信息,并且可動(dòng)態(tài)顯示。 硬件部分的設(shè)計(jì)保證了點(diǎn)陣的正常工作。列驅(qū)動(dòng)電路中的74HC595實(shí)現(xiàn)了串入并出,并且?guī)в墟i存和移位的功能;而74LS244則是防止外界的干擾會(huì)對(duì)顯示屏造成亂碼。行驅(qū)動(dòng)電路使用了3-8線譯碼器74LS138驅(qū)動(dòng)TIP127大電流低電阻的N溝道場(chǎng)效應(yīng)管,因?yàn)槿绻脝纹瑱C(jī)直接連接LED點(diǎn)陣,引腳不夠,同時(shí)驅(qū)動(dòng)能力也不行,而用了這個(gè)譯碼器,可以節(jié)省引腳,并且方便做大屏幕的時(shí)候擴(kuò)展。 軟件部分的設(shè)計(jì)跟硬件完美配合實(shí)現(xiàn)漢字、圖形的顯示。通過LED點(diǎn)陣顯示原理,我們知道只要合理的安排行選信號(hào)以及列信號(hào)同時(shí)導(dǎo)通的組合順序就可以顯示任何的圖形、文字。軟件的設(shè)計(jì)就是完成將漢字點(diǎn)陣數(shù)據(jù)通過一些特殊的算法調(diào)整,得到跟LED點(diǎn)陣相對(duì)應(yīng)的數(shù)據(jù),并將這些數(shù)據(jù)以及控制信號(hào)傳送到LED點(diǎn)陣屏,來實(shí)現(xiàn)預(yù)期的顯示效果。 但本設(shè)計(jì)同時(shí)也存在著一些問題。在硬件方面,整個(gè)屏幕上會(huì)存在一些LED不是很亮,還有信號(hào)容易受到外界的干擾,屏幕會(huì)有些跳動(dòng),所以很應(yīng)該加強(qiáng)硬件抗干擾的能力。在軟件方面,顯示的方式比較單一,還可以考慮其他種顯示方式,如上下移動(dòng),向右移動(dòng),以及從中間向四周擴(kuò)散的移動(dòng)方式。 參考文獻(xiàn)- 李華等編著·MCS-51系列單片機(jī)實(shí)用接口技術(shù)·北京:北京航空航天大學(xué)出版社,1993:234~236.
- 張立科·單片機(jī)通信技術(shù)與工程實(shí)踐·北京:人民郵電出版社,2005:156~161.
- 張凱等編著·MCS-51單片機(jī)綜合系統(tǒng)及其設(shè)計(jì)開發(fā)·北京:科學(xué)出版社,1996:
187~189. - 朱宇光編著·單片機(jī)應(yīng)用新技術(shù)教程·北京:電子工業(yè)出版社,2000:301~303.
- 諸昌鈐·LED顯示屏系統(tǒng)原理與工程技術(shù)·成都:電子科技大學(xué)出版社,2000:
245~250. - 余永權(quán)·89系列FLASH單片機(jī)原理與應(yīng)用·北京:電子工業(yè)出版社,2000:
112~114. - 樓然苗,李光飛·51系列單片機(jī)設(shè)計(jì)實(shí)例·北京:北京航空航天大學(xué)出版
2003:330~332. - 李東生·PROTEL 99SE電路設(shè)計(jì)技術(shù)入門與應(yīng)用·北京:電子工業(yè)出版社
2002:387~390. - 張有順編著·MCS-51/96系列單片機(jī)簡明教程·北京:中國脊梁出版社,1998:
124~125. - 謝宋和·單片機(jī)在 LED 顯示屏中的應(yīng)用·電子與自動(dòng)化·98年第4期
[11] Keil software Company.Cx51 Compiler User’s Guide.2001
附錄A實(shí)物顯示效果圖: 圖A 單片機(jī)主控制部分 |