摘要:文中詳細介紹了由STC89C52RC單片機、74HC154芯片、晶振電路、復位電路、驅動電路、16×16 LED點陣構成的LED漢字顯示屏系統(tǒng)。設計采用STC89C52RC單片機為微控制器,74HC154為譯碼器、PNP型三極管8550構成行驅動電路,NPN型三極管8050構成列驅動電路,采用4個8x8LED顯示器級聯(lián)構成16×16的點陣漢字顯示屏。軟、硬件設計結果表明所設計的LED漢字顯示屏可以實現漢字的滾動顯示,且漢字清晰,無串擾,無重影。
關鍵詞:STC89C52RC;LED點陣;漢字顯示屏;動態(tài)掃描
LED點陣是一種簡單的漢字顯示器件,具有價廉、易于控制實現、使用壽命長的特點。本次LED漢字顯示屏的設計使用STC89C52單片機對4片8x8LED點陣進行控制,采用上移顯示方式,可以連續(xù)顯示多個漢字。
1 硬件設計
1.1 系統(tǒng)的硬件組成框圖
系統(tǒng)硬件組成框圖如圖1所示。
1)選用STC89C52單片機作為微控制器。
2)由74HC154構成譯碼器,該譯碼器是4線-16線譯碼器,輸入端有4條數據線,共有6種輸出,分別對應控制LED點陣顯示器的0-15行。譯碼器輸入端接單片機P0口。
3)驅動電路:由PNP型三極管8550和NPN型三極管8050構成,分別控制行和列。為顯示器提供足夠的驅動電流。列驅動高八位接單片機P2口,低八位接單片機P1口。行驅動接譯碼器芯片輸出端。
4)顯示模塊:由4個8x8LED顯示器級聯(lián)而成作為輸出終端;4塊顯示器的連接方法為;上下排列對應列引腳相連,左右排列對應行引腳相連。
1.2 硬件模塊設計
1.2.1 STC89C52RC單片機
STC89C52是一個低電壓,高性能CMOS 8位單片機,片內含8k bytes的可反復擦寫的Flash只讀程序存儲器和256bytes的隨機存取數據存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準MCS-51指令系統(tǒng),片內置通用8位中央處理器和Flash存儲單元,STC89C52單片機在電子行業(yè)中有廣泛的應用,管腳分布如圖2所示。
1)主電源引腳(2根):VCC(Pin40)電源輸入,接+5V電源;GND(Pin20)接地線。
2)外接晶振引腳(2根):XTAL1(Pin19)片內振蕩電路的輸入端;XTAL2(Pin20)片內振蕩電路的輸出端。
3)控制引腳(4根):RST/VPP(Pin9)復位引腳,引腳上出現2個機器周期的高電平將使單片機復位;ALE/PROG(Pin30)地址鎖存允許信號;PSEN(Pin29)外部存儲器讀選通信號EA/VPP(Pin31)程序存儲器的內外部選通,接低電平從外部程序存儲器讀指令,如果接高則從內部程序存儲器讀指令。
4)可編程輸入/輸出引腳(32根):AT89S51單片機有4組8位的可編程I/O口,分別位P0、P1、P2、P3口,每個口有8位(8根引腳),共32根。每一根引腳都可以編程。
1.2.2 74HC154芯片
74HC154是一款高速CMOS器件,74HC154引腳兼容低功耗肖特基TTL(LSTTL)系列,管腳分布如圖3所示。
74HC154譯碼器可接受4位高有效二進制地址輸入,并提供16個互斥的低有效輸出。74HC154的兩個輸入能門門電路用于譯碼器選通,以消除輸出端上的通常譯碼“假信號”,也可用于譯碼器擴展。門電路包含兩個“邏輯與”輸入,必須置為低以便使能輸出端。任選一個使能輸入端作為數據輸入,74HC154可充當一個1-16的多路分配器。當其余的使能輸入端置低時,地址輸出將會跟隨應用的狀態(tài)。
在本設計中,需要定時對16x16LED的行進行動態(tài)掃描,共有16種狀態(tài),故選擇了4線-16線譯碼器,該譯碼器只用輸出4位有效數據,就可控制16種狀態(tài),大大簡化了軟件的編寫,同時節(jié)省了單片機的硬件資源。
1.2.3 復位電路設計
復位電路如圖4所示,其基本功能是:系統(tǒng)上電時提供復位信號,直至系統(tǒng)電源穩(wěn)定后,撤銷復位信號。為可靠起見,電源穩(wěn)定后還要經一定的延時才撤銷復位信號,以防電源開關或電源插頭分-合過程中引起的抖動而影響復位。采用簡易的上電復位電路,主要由電阻R1,R2,電容C1,開關K1組成,分別接至AT89C51的RST復位輸入端。
1.2.4 晶振電路設計
晶振電路如圖5所示,其基本功能是:為單片機提供一個穩(wěn)定的參考時鐘,使單片機能夠可靠的工作。晶振的頻率常用的有6MHz、11.0 592 MHz、12 MHz等。晶振電路的接法比較同定,本設計采用的11.059 2 MHz晶振電路為晶振兩端接2個20~30 pF的起振電容后接地,然后兩端接單片機XTAL引腳即可,各單片機說明手冊中附有不同頻率的晶振的晶振電路的接法。
1.2.5 驅動電路設計
驅動電路原理圖如圖6所示,行、列驅動部分均用16個小功率普通三極管來控制。由于選用的LED顯示器為共陰接法,即同名列共陽,同名行共陰,為使加入驅動后與原顯示屏控制方式保持一致(列高電位接通,行低電位接通),故行驅動選用PNP型三極管8550,對應的列驅動選擇NPN型三極管8050。驅動電路原理圖如圖6所示。
1.2.6 LED點陣漢字顯示
要顯示一個漢字,必然要用到漢字的點陣字形信息,也叫做漢字的字模。得到漢字字模的過程稱為漢字的取模,漢字的取模是漢字顯示的逆過程。根據漢字的不同字體,漢字字??煞譃樗误w字模、楷體字模、黑體字模等。根據漢字的顯示清晰度,又可分為16×16點陣字模、32×32點陣字模等等。漢字的字模是漢字字形的數字化。本設計中,漢字的字模是以16進制數字形式記錄的顯示一個具體的漢字時每一行需要點亮的LED的信息。如圖7所示:以漢字“你”為例,每一行中數字“0”代表未點亮該行對應列位置上的LED,而數字“1”則代表該行對應列位置上的LED被點亮。這樣,每一行由數字“0”和數字“1”組成的漢字信息叫做位代碼,將每行16位位代碼轉換成2個字節(jié)的16進制代碼,就是我們需要的漢字字模信息。
2 軟件設計
2.1 主程序流程圖
主程序流程圖如圖8所示。主程序調用了2個重要子函數,即顯示子函數和移位子函數。顯示子函數的功能是讓LED顯示器顯示指針所指向的字模數組的數據,而移位子函數的功能是讓指針所指的地址加2,以實現漢字整體上移一行的效果。整個主程序運行后,先初始化指針p所指向的地址,讓指針指向字模數組的起始處,并且設定變量I的初值為0,用I的值來控制顯示函數的重復次數,達到調整顯示漢字移動速度的目的。當I值未達到設定值時,不斷重復顯示子函數,此時屏幕上顯示的是一個靜止不動的漢字,直到I達到設定值,調用移位子函數,將指針地址加2,使指針的起始位置指向第二行,然后重新從I的初始化開始執(zhí)行,這樣,屏幕上就呈現出漢字不斷上移的結果。
2.2 顯示子程序流程圖
顯示子程序流程圖如圖9所示,顯示子程序的運行過程主要是單片機I/O口對外發(fā)送數據的過程。程序首先設定了一個局部變量I,并定義其值為0。設定該變量的主要目的是為了確定掃描的行數,以控制I/O口發(fā)送相應行的字模數據。經過判斷,如果I值小于15,說明正在掃描顯示器上的某一行,則P0口送出相應的行掃描命令到74HC154芯片,經譯碼后控制顯示器接通相應的行,然后P2、P1送出相應的高、低八位列字模數據,最后關閉列控制以防止殘影,對I值自加1就完成了一個循環(huán)。當I>15時,說明全部的16行掃描進行完成,此時顯示器整屏已經出現了需要的圖像,程序執(zhí)行完成。
2.3 移位子程序流程圖
位移子程序就是讓地址指針自動加2,這樣,當濕示函數執(zhí)行時,第一行顯示的就是原本第二行要顯示的內容,依次類推,整個字形就好像上移了一行一樣。所以程序運行過程是這樣的:首先讓地址指針自加2,以實現地址指針的移動,然后削定地址指針所指向的地址的值,如果地址指針指向了字模數組的最后一位地址,就要令地址指針歸0,否則,指針順序移動下去,當移出字模數組的范圍后,后面的存儲空間存儲的數據是未知的,就會出現非預期的圖形,例如亂碼或空白。
3 硬件調試與改進
3.1 驅動電路的調試與改進
最初設計方案沒有使用驅動電路,軟件仿真正常。在面包板上依原理圖建立物理連接后,調試中發(fā)現LED忽明忽暗,漢字顯示不穩(wěn)定。經萬用表測量,LED顯示器中單個發(fā)光二極管中通過的電流不足1.5 mA,達不到額定的工作電流。確定問題的原因是單片機的驅動電流不足。為解決這一問題,本次設計采用一套利用三級管控制的驅動電路,經試驗,加入到電路中效果良好,上述缺陷得到解決。
3.2 限流電阻的調試與改進
當確定要加驅動電路之后,怎樣用三極管來控制這個電流大小是一個問題。起初通過三極管直接加5 V電壓。一個LED被燒壞,這就需要加要加限流電阻,但是這電阻要加多大呢?分析如下:正常點亮一個LED的電流大約是5~15 mA左右,動態(tài)掃描電路,每次每列最多只點亮1個LED,故每個驅動三極管流過的電流按10 mA的電流大小算。通過加不同阻值的電阻,用萬用表測量后發(fā)現用4.7 kΩ的限流電阻與8550(PNP型)三極管串聯(lián)控制行,用47 kΩ的電阻與8050(NPN型)三極管串聯(lián)控制列便可以滿足要求。
3.3 譯碼器的調試與改進
最初設計方案采用軟件編程來實現掃描時的換行控制,雖然硬件電路相對現在的有少許簡單,但是軟件程序確實相當的復雜,后發(fā)現只用一個譯碼器就可以大大簡化程序。
3.4 上拉電阻的選擇
設計之處初用單片機的P0口通過譯碼器控制顯示屏的行,插好線后發(fā)現單片機不能正常工作,原因是單片機的P0口是比較特殊的。P0口在不接片外存儲器與不擴展I/O口時,可作為準雙向輸入/輸出口。在接有片外存儲器或擴展I/O口時,P0口分時復用為低8位地址總線和雙向數據總線。所以P0口的帶負載能力是比較低的,一般情況下要接一個上拉電阻,所以最后在P0口接了一個10千歐的排阻之后解決了問題。
3.5 消影調試
當所有的線路都連接好后,顯示卻不清晰、有串擾,每行有上一行的重影。在源程序中加入消影程序后可以清晰穩(wěn)定的顯示。
4 結束語
文中給出了LED漢字顯示屏的系統(tǒng)框圖,各單元硬件電路、軟件設計流程圖及硬件電路的調試流程;詳細闡述了由STC89C52RC芯片、74H C154芯片、晶振電路、復位電路、驅動電路、16x16 LED點陣構成的LED漢字顯示屏系統(tǒng)。所設計的顯示屏可以實現漢字的滾動顯示,顯示的漢字清晰,無串擾,無重影。