標(biāo)題: 基于51單片機(jī)的LED點(diǎn)陣屏的設(shè)計(jì)與實(shí)現(xiàn) [打印本頁(yè)]
作者: zdw915 時(shí)間: 2018-5-17 15:43
標(biāo)題: 基于51單片機(jī)的LED點(diǎn)陣屏的設(shè)計(jì)與實(shí)現(xiàn)
基于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)問(wèn)題進(jìn)行了研究,并討論了單片機(jī)控制系統(tǒng)中關(guān)鍵的數(shù)據(jù)處理以及發(fā)送問(wèn)題。結(jié)果表明采用并行數(shù)據(jù)輸入、串行數(shù)據(jù)及同步時(shí)鐘傳輸?shù)膶?zhuān)用電路可大大減少CPU的輔助時(shí)間,提高了數(shù)據(jù)的發(fā)送速度。并給出了通過(guò)軟件控制點(diǎn)陣屏顯示的幾種方式,如靜態(tài)顯示,分屏顯示以及左移顯示,對(duì)其軟件的算法給出了具體分析。基于各種算法我們就可以靈活的運(yùn)用軟件實(shí)現(xiàn)各種顯示,并將其用于商業(yè)用途。
前言 隨著社會(huì)文化的不斷發(fā)展,人們的消費(fèi)標(biāo)準(zhǔn)不斷提高,戶外燈箱廣告更是扮演著越來(lái)越重要的宣傳角色,不論是汽車(chē)站,火車(chē)站,股票交易市場(chǎng),還是學(xué)校都離不開(kāi)它,然而傳統(tǒng)的霓虹燈廣告牌不論是在顯示效果、耗電量還是可修改性上都無(wú)法滿足當(dāng)前社會(huì)的需求,傳統(tǒng)的霓虹燈廣告亟待改進(jìn)。
由于單片機(jī)技術(shù)的不斷發(fā)展和高亮度LED發(fā)光管的出現(xiàn)使得大屏幕高亮度LED電子廣告屏成為可能,與傳統(tǒng)的霓虹燈廣告在顯示效果以及可修改性上都有著無(wú)法比擬的優(yōu)勢(shì),而且單片機(jī)的日益平民化以及LED技術(shù)的不斷創(chuàng)新,使得高亮度高清晰的LED點(diǎn)陣廣告牌與傳統(tǒng)霓虹燈廣告牌的成本日益接近。另外,SMT技術(shù)的飛速發(fā)展,開(kāi)關(guān)電源的大規(guī)模使用,使其無(wú)論在體積上還是在可靠性上都比傳統(tǒng)的霓虹燈廣告有明顯的改進(jìn),為其在特殊領(lǐng)域的應(yīng)用奠定了基礎(chǔ)。
這種新興的大屏幕顯示技術(shù)成為眾人目光的焦點(diǎn)。與傳統(tǒng)的顯示設(shè)備相比,首先,LED 顯示屏色彩豐富,3基色的發(fā)光管可以顯示全彩色,顯示方式變化多樣(文字、圖形、動(dòng)畫(huà)、視頻、電視畫(huà)面等),是集光電子技術(shù)、微電子技術(shù)、計(jì)算機(jī)技術(shù)、信息處理技術(shù)于一體的高技術(shù)產(chǎn)品,可用來(lái)顯示文字、計(jì)算機(jī)屏幕同步的圖形。其次,LED顯示屏的像素采用LED發(fā)光二極管,將多個(gè)發(fā)光二極管以序列的形式構(gòu)成LED顯示陣列,這種顯示屏具有耗電低、成本低、亮度和清晰度高、壽命長(zhǎng)等優(yōu)點(diǎn),而且 LED 顯示屏其受空間限制較小,并可以根據(jù)用戶要求設(shè)計(jì)屏的大小,具有全彩色效果,視角大,是信息傳播設(shè)施劃時(shí)代的產(chǎn)品。再次,LED 顯示屏應(yīng)用廣泛,金融證券、銀行利率、商業(yè)廣告、文化娛樂(lè)等方面,顯示效果清晰穩(wěn)定,越來(lái)越多的地方開(kāi)始使用LED電子顯示屏,有巨大的社會(huì)效益和經(jīng)濟(jì)效益。它以其超大畫(huà)面、超寬視覺(jué)、靈活多變的顯示方式等獨(dú)居一格的優(yōu)勢(shì),成為目前國(guó)際上使用廣泛的顯示系統(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)定、清晰無(wú)串?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)可以分為共陰型和共陽(yáng)型[5]兩種類(lèi)型,本系統(tǒng)設(shè)計(jì)采用的是共陽(yáng)型的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í)間很快,人眼的視覺(jué)有暫留效應(yīng)[3],就可以看到顯示的是完整的圖形或文字,這樣就達(dá)到了顯示的效果。
圖1.1 8*8共陽(yáng)極LED點(diǎn)陣
例如,若要圖中所示64個(gè)LED顯示一個(gè)“0”字的方框,則首先在列1~8上寫(xiě)入列編碼的信號(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ù)字顯示。
送顯示代碼過(guò)程如下所示:
送第一列線代碼到P3端口,同時(shí)置第一行線為“0”,其它行線為“1”,延時(shí)2ms左右;
送第二列線代碼到P3端口,同時(shí)置第二行線為“0”,其它行線為“1”,延時(shí)2ms左右;
如此下去,直到送完最后一列代碼,又從頭開(kāi)始送。如此循環(huán)下去,當(dāng)刷新頻率足夠高時(shí)(大于24Hz),由于人眼的視覺(jué)暫留特性,便可得到一個(gè)穩(wěn)定的“0”字。這就簡(jiǎn)單的描敘了一下的點(diǎn)亮LED的掃描原理。
1.3 方案論證1.3.1 顯示方法的論證 方案一:從理論上說(shuō),不論顯示圖形還是文字,只要控制與組成這些圖形或文字的各個(gè)點(diǎn)所在位置相對(duì)應(yīng)的LED器件發(fā)光,就可以得到我們想要的顯示結(jié)果,這種控制各個(gè)發(fā)光點(diǎn)同時(shí)亮滅的方法稱(chēng)為靜態(tài)驅(qū)動(dòng)顯示方法[2]。但從實(shí)際考慮可以知道,32*64的點(diǎn)陣共有2048個(gè)發(fā)光二極管,如果采用這種方法,顯然單片機(jī)沒(méi)有這么多端口。但如果我們采用鎖存器來(lái)擴(kuò)展端口,按8位的鎖存器來(lái)計(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)掃描的意思簡(jiǎn)單地說(shuō)就是逐行輪流點(diǎn)亮,這樣掃描驅(qū)動(dòng)電路就可以實(shí)現(xiàn)多行(比如8行)的同名列共用一套列驅(qū)動(dòng)器。具體就32*64的點(diǎn)陣來(lái)說(shuō),把所有同一列的發(fā)光管的陰極連在一起,再去驅(qū)動(dòng)這一列LED (共陽(yáng)接法),每一列先送出對(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次以上),由于人眼的視覺(jué)暫留現(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ù)膯?wèn)題。從控制電路到列驅(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)器,在硬件方面無(wú)疑是十分經(jīng)濟(jì)的。但是,串行傳輸過(guò)程較長(zhǎng),數(shù)據(jù)按順序一位一位地輸出給行驅(qū)動(dòng)器,只有當(dāng)一行的各列數(shù)據(jù)都已傳輸?shù)轿恢螅@一行的各列才能并行地進(jìn)行顯示。這樣,對(duì)于一行的顯示過(guò)程就可以分解成列數(shù)據(jù)準(zhǔn)備傳輸和列數(shù)據(jù)顯示兩個(gè)部分。對(duì)于串行傳輸方式來(lái)說(shuō),列數(shù)據(jù)準(zhǔn)備時(shí)間可能相當(dāng)長(zhǎng),在行掃描周期確定的情況下,留給顯示的時(shí)間就太少了,以致影響到LED的亮度。解決串行傳輸中列數(shù)據(jù)準(zhǔn)備和列數(shù)據(jù)顯示的時(shí)間矛盾問(wèn)題,可以采用準(zhǔn)備數(shù)據(jù)鎖存的方法。即在顯示本行數(shù)據(jù)的同時(shí),傳送下一行的數(shù)據(jù)。所以列數(shù)據(jù)的顯示驅(qū)動(dòng)電路就需要具有鎖存功能。經(jīng)過(guò)上述分析,可以歸納出列驅(qū)動(dòng)器電路應(yīng)具備的主要功能:對(duì)數(shù)據(jù)準(zhǔn)備來(lái)說(shuō),它應(yīng)能實(shí)現(xiàn)串入并出[7]的移位功能;對(duì)數(shù)據(jù)顯示來(lái)說(shuō),應(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行,以此類(lèi)推,最后顯示第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的顯示;有電腦通過(guò)統(tǒng)一的協(xié)議發(fā)送數(shù)據(jù)到每個(gè)控制單片機(jī),行選是統(tǒng)一的;而且控制模塊也是分開(kāi)的,一個(gè)控制模塊上面有很多的RAM芯片,控制芯片接收從主控電腦發(fā)送過(guò)來(lái)的數(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ī)我選擇最常見(jiàn)的ATMEL公司的AT89C51單片機(jī)。此單片機(jī)與MCS-51產(chǎn)品指令系統(tǒng)[9]完全兼容,由4K字節(jié)可重擦寫(xiě)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腳)分別為振蕩電路的輸入端和輸出端,只要連接到簡(jiǎn)單的石英振蕩晶體的2個(gè)管腳即可,同時(shí)晶體的2個(gè)管腳也要用30pF的電容耦合到地。
2.1.2 復(fù)位電路 89C51的復(fù)位引腳(RESET)是第9腳,當(dāng)此引腳連接高電平超過(guò)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)作。最簡(jiǎn)單的硬件電路接法就是用一個(gè)電阻,一個(gè)電容和一個(gè)開(kāi)關(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)的程序就顯得捉襟見(jiàn)肘,而且程序存儲(chǔ)器空間也只有4K,大一點(diǎn)的程序就存儲(chǔ)不下,尤其是在存儲(chǔ)漢字點(diǎn)陣信息的時(shí)候,每個(gè)漢字32Byte,100個(gè)漢字就到了3.2KB,程序也只有不到1KB的容量了。 在這時(shí)候必須外接存儲(chǔ)器來(lái)擴(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ù)是有電腦傳送過(guò)來(lái)的,每個(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來(lái)驅(qū)動(dòng)一個(gè)漢字,我的電路設(shè)計(jì)的是8個(gè)漢字,所以需要8*2=16個(gè)74HC595來(lái)實(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)門(mén)的開(kāi)放信號(hào),只有當(dāng)其為低時(shí)鎖存器的輸出才開(kāi)放,否則輸出端為高阻狀態(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)通過(guò)3/8譯碼器譯碼后,再通過(guò)TIP127擴(kuò)流以驅(qū)動(dòng)LED點(diǎn)亮,然后再進(jìn)行行掃描來(lái)達(dá)到動(dòng)態(tài)顯示的目的。
2.3.1 電路的設(shè)計(jì)89S51單片機(jī)P2口低4位輸出的3條行選信號(hào)和2條使能信號(hào),通過(guò)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)的(通過(guò)它的真值表可以看到全0全1都有一行是被選中輸出低電位的),TIP127被電阻拉到高電平這樣顯示屏就顯示一些不確定的圖案,就不符合我們的設(shè)計(jì)要求了。74LS244是一個(gè)常用的八緩沖器,它的管腳圖以及控制表如(圖2.9)所示:
圖 2.9 74LS244的外部管腳圖及門(mén)控制端的真值表
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來(lái)表示。
圖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)才被它選擇通過(guò),一般的電路干擾,電磁干擾不會(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)初始化程序完成,顯示效果處理等工作,則由主程序通過(guò)調(diào)用子程序來(lái)實(shí)現(xiàn)。
3.1 顯示驅(qū)動(dòng)程序 然后顯示驅(qū)動(dòng)程序查詢當(dāng)前燃亮的行號(hào),從顯示緩存區(qū)內(nèi)讀取下一行的顯示數(shù)據(jù),并通過(guò)串口發(fā)送給移位寄存器。為消除在切換行顯示數(shù)據(jù)的時(shí)候產(chǎn)生拖尾現(xiàn)象,驅(qū)動(dòng)程序先要關(guān)閉顯示屏,即消隱,等數(shù)據(jù)發(fā)送完畢后輸出74HC595的鎖存信號(hào),將顯示數(shù)據(jù)打入輸出鎖存器并鎖存,然后再輸出新的行號(hào),并打開(kāi)顯示。圖3.1為顯示驅(qū)動(dòng)程序(顯示屏掃描函數(shù))流程圖。
圖3.1 顯示驅(qū)動(dòng)程序流程圖
3.2 系統(tǒng)主程序 系統(tǒng)主程序開(kāi)始以后,首先是對(duì)系統(tǒng)環(huán)境初始化,包括設(shè)置串口,端口以及一些參數(shù);然后分屏顯示“懷化學(xué)院物電系!,劉小敏的畢業(yè)設(shè)計(jì)”;關(guān)閉屏3秒鐘,再靜止顯示“懷化學(xué)院物電系!”停留約3秒,接著開(kāi)始左跑馬滾動(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語(yǔ)言編寫(xiě),在Keil μVisionV3[11]的編譯環(huán)境下測(cè)試通過(guò),并通過(guò)了硬件的測(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 分屏顯示 該分屏方法是,將我做的字體庫(kù)分成兩個(gè)部分,然后在主程序中先調(diào)用第一個(gè)字體庫(kù),通過(guò)一段時(shí)間的延時(shí)后,再調(diào)用第二個(gè)字體庫(kù),然后循環(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; //打開(kāi)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 字模提取 該軟件中顯示的字體都是通過(guò)專(zhuān)門(mén)的漢字提取軟件來(lái)實(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í)檢查電路是否短路,開(kāi)路以及元器件是否焊接正確,調(diào)試的時(shí)候可以分塊檢測(cè)。而軟件調(diào)試主要通過(guò)編程看是否能夠達(dá)到自己預(yù)期的想法,同時(shí)也要注意程序的簡(jiǎn)潔和優(yōu)化,調(diào)試的時(shí)候可以通過(guò)先寫(xiě)個(gè)小程序一步一步去實(shí)現(xiàn)它。
4.1 硬件調(diào)試本設(shè)計(jì)硬件部分的調(diào)試主要是根據(jù)實(shí)物(8位LED點(diǎn)陣屏)來(lái)弄清其具體結(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)試過(guò)程中還遇到了屏幕閃動(dòng)的問(wèn)題,后來(lái)考慮到單片機(jī)的處理速度,原因可能是掃描的過(guò)慢了,故將12M晶振改為24M,其后的顯示效果得到了明顯的改善。
4.2 軟件調(diào)試 在軟件的調(diào)試中,我首先是寫(xiě)了一個(gè)一行顯示的小程序,可以后我接著寫(xiě)了兩行顯示的程序,但發(fā)現(xiàn)第二排的漢字前八個(gè)字節(jié)沒(méi)問(wèn)題,而后八個(gè)字節(jié)出現(xiàn)了亂碼。因?yàn)橐茢?shù)據(jù)的地方是通過(guò)了的,所以從中可以分析是送漢字代碼的地方出錯(cuò)了,后來(lái)查出果然是送漢字代碼的指針搞錯(cuò)了。還有在分屏顯示的時(shí)候我本來(lái)采用一個(gè)字庫(kù)來(lái)做成分兩個(gè)字庫(kù)顯示,用一個(gè)變量來(lái)改變字的顯示,并建立了一個(gè)標(biāo)志位,但出現(xiàn)了一個(gè)用什么改變作為標(biāo)志位變化的問(wèn)題,考慮至此我采用了最基本的方法是建立兩個(gè)庫(kù),然后在主程序中分別調(diào)用的方式來(lái)解決的。
5 結(jié)論 本文通過(guò)設(shè)計(jì)單片機(jī)控制單色LED顯示屏的方法,對(duì)LED顯示模塊單元如何進(jìn)行行列信號(hào)控制及信號(hào)傳輸中的驅(qū)動(dòng)問(wèn)題進(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)漢字、圖形的顯示。通過(guò)LED點(diǎn)陣顯示原理,我們知道只要合理的安排行選信號(hào)以及列信號(hào)同時(shí)導(dǎo)通的組合順序就可以顯示任何的圖形、文字。軟件的設(shè)計(jì)就是完成將漢字點(diǎn)陣數(shù)據(jù)通過(guò)一些特殊的算法調(diào)整,得到跟LED點(diǎn)陣相對(duì)應(yīng)的數(shù)據(jù),并將這些數(shù)據(jù)以及控制信號(hào)傳送到LED點(diǎn)陣屏,來(lái)實(shí)現(xiàn)預(yù)期的顯示效果。
但本設(shè)計(jì)同時(shí)也存在著一些問(wèn)題。在硬件方面,整個(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ì)開(kāi)發(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ù)入門(mén)與應(yīng)用·北京:電子工業(yè)出版社
2002:387~390.
- 張有順編著·MCS-51/96系列單片機(jī)簡(jiǎn)明教程·北京:中國(guó)脊梁出版社,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ī)主控制部分
作者: wfouliya 時(shí)間: 2018-8-25 07:12
剛得了幾塊32*64的雙色屏,正好學(xué)習(xí)下,感謝樓主
作者: loost 時(shí)間: 2018-9-8 20:48
最近一直在研究LED點(diǎn)陣屏,進(jìn)展很慢,學(xué)習(xí)內(nèi)容比較少,感謝樓主的教程。
作者: 海洋楠木 時(shí)間: 2018-12-20 17:20
謝謝樓主分享,愛(ài)你呦
作者: 我數(shù)到三 時(shí)間: 2019-1-9 20:48
樓主,能否加好友,有問(wèn)題想請(qǐng)假下
作者: moonchen 時(shí)間: 2019-4-22 19:12
最近一直在研究LED點(diǎn)陣屏,進(jìn)展很慢,學(xué)習(xí)內(nèi)容比較少,感謝樓主的教程。
作者: wyl0301 時(shí)間: 2020-4-21 09:08
感謝樓主的整理,最近學(xué)習(xí)正好用到
| 歡迎光臨 (http://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |