? LED顯示屏是利用發光二極管點陣模塊或像素單元組成的平面式顯示屏幕。它具有發光率高、使用壽命長、組態靈活、色彩豐富以及對室內外環境適應能力強等優點。并廣泛的用于公交汽車、商店、體育場館、車站、學校、銀行、高速公路等公共場所的信息發布和廣告宣傳。LED顯示屏發展較快,本文講述了基于AT89C51單片機16×16LED漢字點陣滾動顯示的基本原理、硬件組成與設計、程序編寫與調試、Proteus軟件仿真等基本環節和相關技術。
1. 硬件電路組成及工作原理
本產品采用以AT89C51單片機為核心芯片的電路來實現,主要由AT89C51芯片、時鐘電路、復位電路、列掃描驅動電路(74HCl54)、16×16LED點陣5部分組成,如圖1所示。其中,AT89C51是一種帶4kB閃爍可編程可擦除只讀存儲器(Falsh Programmable and Erasable Read only Memory,FPEROM)的低電壓、高性能CMOS型8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術制造,工業標準的MCS一5l指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,能夠進行1 000次寫/擦循環,數據保留時間為10年。它是一種高效微控制器,為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。因此,在智能化電子設計與制作過程中經常用到AT89C51芯片。時鐘電路由AT89C5l的18,19腳的時鐘端(XTAI l及XTAL2)以及12 MHz晶振X、電容C2、C3組成,采用片內振蕩方式。復位電路采用簡易的上電復位電路,主要由電阻R,R2,電容C,開關K組成,分別接至AT89C51的RST復位輸入端。LED點陣顯示屏采用16×16共256個像素的點陣,可通過萬用表檢測發光二極管的方法測試判斷出該點陣的引腳分布。
我們把行列總線接在單片機的I/0口,然后把上面分析到的掃描代碼送入總線,就可以得到顯示的漢字了。但是若將LED點陣的行列端口全部直接接入89S5 1單片機,則需要使用32條I/0口,這樣會造成I/0口資源的耗盡,系統也再無擴充的余地。因此,我們在實際應用中只是將LED點陣的16條行線直接接在P0口和P2口,至于列選掃描信號則是由4—16線譯碼器74HCl54來選擇控制,這樣一來列選控制只使用了單片機的4個I/O口,節約了很多I/O口資源,為單片機系統擴充使用功能提供了條件。考慮到P0口必需設置上拉電阻,我們采用4.7 kΩ排電阻作為上拉電阻。漢字掃描顯示的基本過程是這樣的:通電后由于電阻R,電容c1的作用,使單片機的RST復位腳電平先高后低,從而達到復位;之后,在C、C3、X以及單片機內部時鐘電路的作用下,單片機89C51按照設定的程序在P0和P2接口輸出與內部漢字對應的代碼電平送至LED點陣的行選線(高電平驅動),同時在P1.1,P1.2,P1.3,P1.4接口輸出列選掃描信號(低電平驅動),從而選中相應的象素LED發光,并利用人眼的視覺暫留特性合成整個漢字的顯示。再改變取表地址實現漢字的滾動顯示。
2. 漢字的點陣顯示原理及字庫代碼獲取方法
我們以UCDOS中文宋體字庫為例,每一個字由16行16列的點陣組成顯示。即國標漢字庫中的每一個字均由256點陣來表示。我們可以把每一個點理解為一個像素,而把每一個字的字形理解為一幅圖像。事實上這個漢字屏不僅可以顯示漢字,也可以顯示在256像素范圍內的任何圖形。如查用8位的AT89C51單片機控制,由于單片機的總線由8位,一個字需要拆分為2個部分,如圖2所示。
為了弄清楚漢字的點陣組成規律,首先通過列掃描方法獲取漢字的代碼。漢字可拆分為上部和下部,上部由8×16點陣組成,下部也由8×16點陣組成。本例通過列掃描方法首先顯示左上角的第一列的上半部分,即第0列的P00~P07口,方向為P00到P07,顯示漢字“我”時,為全滅,第一列的下半部分也為全滅。第二列的上半部分P06、點亮,由上往下排列,為:P0.0滅,P0.1滅,P0.2滅P0.3滅,P0.4滅,P0.5滅,P0.6亮,P0.7滅。即二進制00000010,轉換為十六進制為02h。上半部第二列完成后,繼續掃描下半部的第二列,為了接線的方便,我們仍設計成由上往下掃描,即從P27向P20方向掃描,從圖3可以看到,這一列P23亮,即為00001000,十六進制則為08h。依照這個方法轉向第三列、第四列,……,直至第十六列的掃描,一共掃描32個8位,可以得出漢字“我”的掃描代碼為:
00H,02H,08H,06H,28H,02H,24H,22H
0FCH,3FH,24H,21H,20H,10H,3CH,08H
0E2H,07H,20H,0AH,0E4H,11H,0A8H,20H
20H,30H,00H,00H,00H,00H,00H,00H
由這個原理可以看出,無論顯示何種字體或圖像,都可以用這個方法來分析出它的掃描代碼從而顯示在屏幕上。上述方法雖然能夠讓我們弄清楚漢字點陣代碼的獲取過程,但是依靠人工方法獲取漢字代碼是一件非常繁瑣的事情。為此,我們經常采用字庫軟件查找字符代碼,軟件打開后輸入漢字,點“檢取”,十六進制數據的漢字代碼即可自動生成,把我們所需要的豎排數據復制到程序中即可,如圖3所示。
可見,漢字點陣顯示一般有點掃描、行掃描和列掃描3種。為了符合視覺暫留要求,點掃描方法的掃描頻率必須大于16×64—1 024 Hz,周期小于1 ms即可。行掃描和列掃描方法的掃描頻率必須大于16×8—128 Hz,周期小于7.8 ms即可,但是一次驅動一列或一行(8顆LED)時需外加驅動電路提高電流,否則LED亮度會不足。
3. 在Keil環境中程序設計與調試
軟件程序主要由開始、初始化、主程序、字庫組成。其中主程序的流程圖如圖4所示。下面的程序能夠用來實現滾動顯示“我愛你——祖國”。漢字的顯示。程序清單如下:
在keil軟件中完成程序編寫、調試和編譯之后,生成能讓單片機運行的Hex文件,如圖5所示。
4. 元器件選擇
本設計所需元器件如表1所示。
5. 運用Proteus軟件仿真LED漢字顯示屏
Proteus與其它單片機仿真軟件不同的是,它不僅能仿真單片機外圍電路或沒有單片機參與的其它電路的工作情況,也能仿真單片機CPU的工作情況。因此在仿真和程序調試時,是從工程的角度直接看程序運行和電路工作的過程和結果。從某種意義上講Proteus仿真,基本接近與工程應用。本次基于AT89C51單片機16×16LED漢字滾動顯示屏的設計已運用Proteus軟件仿真實現,如圖6所示。
雖然本設計只使用了一塊16×16LED點陣,電路簡單,但是已經包含了LED漢字滾動顯示屏的電路基本原理、基本程序和Proteus軟件仿真,只要擴展單片機的10接口,并增加一些LED點陣和相關芯片,就能設計出更大面積、更多花樣的LED顯示屏。