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