欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 20848|回復: 6
打印 上一主題 下一主題
收起左側

基于51單片機的LED點陣屏的設計與實現

[復制鏈接]
跳轉到指定樓層
樓主
ID:332193 發表于 2018-5-17 15:43 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
基于51單片機的LED點陣屏的設計與實現
摘 要
本文主要闡述了用51單片機控制單色32*64的LED點陣屏顯示的方法,對LED點陣屏如何進行行列信號控制及信號傳輸中的驅動問題進行了研究,并討論了單片機控制系統中關鍵的數據處理以及發送問題。結果表明采用并行數據輸入、串行數據及同步時鐘傳輸的專用電路可大大減少CPU的輔助時間,提高了數據的發送速度。并給出了通過軟件控制點陣屏顯示的幾種方式,如靜態顯示,分屏顯示以及左移顯示,對其軟件的算法給出了具體分析。基于各種算法我們就可以靈活的運用軟件實現各種顯示,并將其用于商業用途。

前言
    隨著社會文化的不斷發展,人們的消費標準不斷提高,戶外燈箱廣告更是扮演著越來越重要的宣傳角色,不論是汽車站,火車站,股票交易市場,還是學校都離不開它,然而傳統的霓虹燈廣告牌不論是在顯示效果、耗電量還是可修改性上都無法滿足當前社會的需求,傳統的霓虹燈廣告亟待改進。
由于單片機技術的不斷發展和高亮度LED發光管的出現使得大屏幕高亮度LED電子廣告屏成為可能,與傳統的霓虹燈廣告在顯示效果以及可修改性上都有著無法比擬的優勢,而且單片機的日益平民化以及LED技術的不斷創新,使得高亮度高清晰的LED點陣廣告牌與傳統霓虹燈廣告牌的成本日益接近。另外,SMT技術的飛速發展,開關電源的大規模使用,使其無論在體積上還是在可靠性上都比傳統的霓虹燈廣告有明顯的改進,為其在特殊領域的應用奠定了基礎。
這種新興的大屏幕顯示技術成為眾人目光的焦點。與傳統的顯示設備相比,首先,LED 顯示屏色彩豐富,3基色的發光管可以顯示全彩色,顯示方式變化多樣(文字、圖形、動畫、視頻、電視畫面等),是集光電子技術、微電子技術、計算機技術、信息處理技術于一體的高技術產品,可用來顯示文字、計算機屏幕同步的圖形。其次,LED顯示屏的像素采用LED發光二極管,將多個發光二極管以序列的形式構成LED顯示陣列,這種顯示屏具有耗電低、成本低、亮度和清晰度高、壽命長等優點,而且 LED 顯示屏其受空間限制較小,并可以根據用戶要求設計屏的大小,具有全彩色效果,視角大,是信息傳播設施劃時代的產品。再次,LED 顯示屏應用廣泛,金融證券、銀行利率、商業廣告、文化娛樂等方面,顯示效果清晰穩定,越來越多的地方開始使用LED電子顯示屏,有巨大的社會效益和經濟效益。它以其超大畫面、超寬視覺、靈活多變的顯示方式等獨居一格的優勢,成為目前國際上使用廣泛的顯示系統。
1 概述
1.1 設計任務
本設計主要任務是設計一個實用的32*64 LED點陣屏的圖文顯示,要求在目測條件下LED顯示屏各點亮度均勻、充足,可顯示圖形和文字,顯示圖形或文字穩定、清晰無串擾。圖形或文字顯示有靜止和移入移出等顯示方式。本文還重點介紹了單片機對LED點陣屏的控制電路,驅動電路的設計方法,并根據LED點陣屏的硬件特點, 對其軟件實現的算法給出了具體的分析。從而實現了顯示的字體能夠進行向左移動。
1.2 點陣屏的內部結構及掃描原理
    LED點陣屏的內部結構可以分為共陰型和共陽型[5]兩種類型,本系統設計采用的是共陽型的LED點陣屏。 其硬件電路如(圖1.1)所示,我們只選取了一個8*8的LED矩陣做模型,當行上有一正選通信號時,列選端四位數據為0的發光二極管便導通點亮。根據這個原理,當我們需要某圖形或文字時,只需要將要顯示的文字或圖形的編碼作為列信號跟對應的行信號進行逐次掃描[1],就可以逐行點亮點陣。當掃描速度大于24Hz,由于掃描時間很快,人眼的視覺有暫留效應[3],就可以看到顯示的是完整的圖形或文字,這樣就達到了顯示的效果。
           
                  圖1.1  8*8共陽極LED點陣
    例如,若要圖中所示64個LED顯示一個“0”字的方框,則首先在列1~8上寫入列編碼的信號,接著應將對應的行上加選通信號,即在行、列的信號端分別加上如(圖1.2)所示數據,這樣,假設顯示數字為“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;只要把這些代碼分別送到相應的列線上面,即可實現“0”的數字顯示。
    送顯示代碼過程如下所示:
    送第一列線代碼到P3端口,同時置第一行線為“0”,其它行線為“1”,延時2ms左右;
    送第二列線代碼到P3端口,同時置第二行線為“0”,其它行線為“1”,延時2ms左右;
    如此下去,直到送完最后一列代碼,又從頭開始送。如此循環下去,當刷新頻率足夠高時(大于24Hz),由于人眼的視覺暫留特性,便可得到一個穩定的“0”字。這就簡單的描敘了一下的點亮LED的掃描原理。            
1.3 方案論證1.3.1 顯示方法的論證
    方案一:從理論上說,不論顯示圖形還是文字,只要控制與組成這些圖形或文字的各個點所在位置相對應的LED器件發光,就可以得到我們想要的顯示結果,這種控制各個發光點同時亮滅的方法稱為靜態驅動顯示方法[2]。但從實際考慮可以知道,32*64的點陣共有2048個發光二極管,如果采用這種方法,顯然單片機沒有這么多端口。但如果我們采用鎖存器來擴展端口,按8位的鎖存器來計算,32*64的點陣需要256個鎖存器。這個數字仍然很龐大,而且成本很昂貴,而我們僅僅是32*64的8個漢字點陣,但在實際應用中的顯示屏往往要大得多,這樣在鎖存器上花的成本將是一個很龐大的數字。顯然這樣做不能達到我們的要求,因此在實際應用中的顯示屏幾乎都不采用這種設計方法。
    方案二:而這里我們采用的是另外的一種叫做動態掃描[10]的方法。 動態掃描的意思簡單地說就是逐行輪流點亮,這樣掃描驅動電路就可以實現多行(比如8行)的同名列共用一套列驅動器。具體就32*64的點陣來說,把所有同一列的發光管的陰極連在一起,再去驅動這一列LED (共陽接法),每一列先送出對應第1行發光管對應的數據并鎖存,再選通第1行使其點亮一定的時間,然后熄滅;再送出第2行的數據并鎖存,再選通第2行使其點亮相同的時間,然后熄滅……第8行之后,又重新點亮第1行,反復輪回。當這樣輪回的速度足夠快(每秒24次以上),由于人眼的視覺暫留現象,就能看到顯示屏上穩定的圖形了。
1.3.2 數據傳送的方法論證
    方案一:采用掃描方式進行顯示時,每行有一個行驅動器,各行的同名列共用一個列驅動器。顯示數據通常存儲在單片機的程序存儲器中,按8位一個字節的形式順序排放。顯示時只要把一行中各列的數據都傳送到相應的列驅動器上去,這就存在一個顯示數據傳輸的問題。從控制電路到列驅動器的數據傳輸可以采用并行方式或串行方式。采用并行方式時,32*64的LED點陣有8列8*8的點陣,需要8*8=64個列數據輸入口,而一個89S51只有32個I/O接口,還要同時驅動行數據,根本不夠用,并且從控制電路到列驅動器的線路數量大,相應的硬件數目多,由此可以得出,當列數很多時,并行傳輸的方案是不可取的。
    方案二:采用串行傳輸[10]的方法,控制電路可以只用2根線:數據線、時鐘線。將行數據一位一位傳往行驅動器,在硬件方面無疑是十分經濟的。但是,串行傳輸過程較長,數據按順序一位一位地輸出給行驅動器,只有當一行的各列數據都已傳輸到位之后,這一行的各列才能并行地進行顯示。這樣,對于一行的顯示過程就可以分解成列數據準備傳輸和列數據顯示兩個部分。對于串行傳輸方式來說,列數據準備時間可能相當長,在行掃描周期確定的情況下,留給顯示的時間就太少了,以致影響到LED的亮度。解決串行傳輸中列數據準備和列數據顯示的時間矛盾問題,可以采用準備數據鎖存的方法。即在顯示本行數據的同時,傳送下一行的數據。所以列數據的顯示驅動電路就需要具有鎖存功能。經過上述分析,可以歸納出列驅動器電路應具備的主要功能:對數據準備來說,它應能實現串入并出[7]的移位功能;對數據顯示來說,應具有并行鎖存的功能。這樣,本行已準備好的數據輸人并行鎖存器進行顯示時,串并移位寄存器就可以準備下一行的列數據,而不會影響本行的顯示。同時為了LED顯示的亮度,采用8行掃描,每個漢字上面有2個8列驅動器驅動,列驅動器的位置應該是在第1行跟第9行,即每個16*16的漢字點陣是有4個8*8的點陣組成的陣列,掃描的時候同時掃描顯示第1行跟第9行,第二次掃描的時候顯示第2行跟第10行,以此類推,最后顯示第8行跟第16行。
2 系統硬件設計
  硬件電路[4]大致上可以分成單片機系統及外圍電路、列驅動電路和行驅動電路以及LED點陣陣列三大部分。框圖(圖2.1)如下:
             圖2.1  硬件的總體框圖
    在實際應用中的大屏幕LED點陣顯示屏,都是采用很多的顯示模塊組成,每個模塊一般是有32*64個點陣組成,每個模塊負責自己那部分LED的顯示;有電腦通過統一的協議發送數據到每個控制單片機,行選是統一的;而且控制模塊也是分開的,一個控制模塊上面有很多的RAM芯片,控制芯片接收從主控電腦發送過來的數據,并將其保存在RAM中,之后不需要電腦控制即可自己循環控制顯示。而且一個模塊控制幾個至幾十個32*64的點陣模塊。
2.1 單片機系統及外圍電路
    由于LED點陣顯示屏由單片機控制部分和顯示驅動部分組成,單片機我選擇最常見的ATMEL公司的AT89C51單片機。此單片機與MCS-51產品指令系統[9]完全兼容,由4K字節可重擦寫Flash閃速存儲器,128*8字節內部RAM,32個可編程I/O口線,2個16位定時/計數器和6個中斷源。同時支持在線下載,并且該單片機經濟實用,使用廣泛。
我們使用的是AT89C51的最小系統電路,包括:電源、時鐘脈沖、復位電路和程序存儲器設定電路,暫時只是顯示很少的幾十個漢字,不用外擴存儲器。
2.1.1 時鐘脈沖電路
    AT89C51單片機芯片內部設有一個反向放大器所構成的振蕩器,其最高時鐘脈沖頻率已經達到了24MHz ,AT89C51的兩個引腳XTAL1和XTAL2(即19、18腳)分別為振蕩電路的輸入端和輸出端,只要連接到簡單的石英振蕩晶體的2個管腳即可,同時晶體的2個管腳也要用30pF的電容耦合到地。

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

187~189.

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

245~250.

  • 余永權·89系列FLASH單片機原理與應用·北京:電子工業出版社,2000

112~114.  

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

2003:330~332.

  • 李東生·PROTEL 99SE電路設計技術入門與應用·北京:電子工業出版社

2002:387~390.

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

124~125.

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

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



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


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


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:143914 發表于 2018-8-25 07:12 來自觸屏版 | 只看該作者
剛得了幾塊32*64的雙色屏,正好學習下,感謝樓主
回復

使用道具 舉報

板凳
ID:393255 發表于 2018-9-8 20:48 | 只看該作者
最近一直在研究LED點陣屏,進展很慢,學習內容比較少,感謝樓主的教程。
回復

使用道具 舉報

地板
ID:450904 發表于 2018-12-20 17:20 | 只看該作者
謝謝樓主分享,愛你呦
回復

使用道具 舉報

5#
ID:465401 發表于 2019-1-9 20:48 | 只看該作者
樓主,能否加好友,有問題想請假下
回復

使用道具 舉報

6#
ID:74933 發表于 2019-4-22 19:12 | 只看該作者
最近一直在研究LED點陣屏,進展很慢,學習內容比較少,感謝樓主的教程。
回復

使用道具 舉報

7#
ID:734102 發表于 2020-4-21 09:08 | 只看該作者
感謝樓主的整理,最近學習正好用到
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表