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