陳莉
(陜西理工學院 物理與電信工程學院,陜西 漢中 723000)
LED點陣是一種簡單的漢字顯示器件,具有價廉、易于控制實現(xiàn)、使用壽命長的特點。本次LED漢字顯示屏的設計使用STC89C52單片機對4片8x8LED點陣進行控制,采用上移顯示方式,可以連續(xù)顯示多個漢字。
系統(tǒng)硬件組成框圖如圖1所示。
圖1 系統(tǒng)硬件組成框圖Fig.1 Block diagram of hardware system
1)選用STC89C52單片機作為微控制器。
2)由74HC154構成譯碼器,該譯碼器是4線-16線譯碼器,輸入端有4條數(shù)據線,共有6種輸出,分別對應控制LED點陣顯示器的0-15行。譯碼器輸入端接單片機P0口。
3)驅動電路:由PNP型三極管8550和NPN型三極管8050構成,分別控制行和列。為顯示器提供足夠的驅動電流。列驅動高八位接單片機P2口,低八位接單片機P1口。行驅動接譯碼器芯片輸出端。
4)顯示模塊:由4個8x8LED顯示器級聯(lián)而成作為輸出終端;4塊顯示器的連接方法為:上下排列對應列引腳相連,左右排列對應行引腳相連。
1.2.1 STC89C52RC單片機
STC89C52是一個低電壓,高性能CMOS 8位單片機,片內含8k bytes的可反復擦寫的Flash只讀程序存儲器和256 bytes的隨機存取數(shù)據存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準MCS-51指令系統(tǒng),片內置通用8位中央處理器和Flash存儲單元,STC89C52單片機在電子行業(yè)中有廣泛的應用[1-2],管腳分布如圖2所示。
1)主電源引腳(2 根):VCC(Pin40)電源輸入,接+5V 電源;GND(Pin20)接地線。
2)外接晶振引腳(2 根):XTAL1(Pin19)片內振蕩電路的輸入端;XTAL2(Pin20)片內振蕩電路的輸出端。
3)控制引腳(4 根):RST/VPP(Pin9)復位引腳,引腳上出現(xiàn)2個機器周期的高電平將使單片機復位;ALE/PROG(Pin30)地址鎖存允許信號;PSEN(Pin29)外部存儲器讀選通信號EA/VPP(Pin31)程序存儲器的內外部選通,接低電平從外部程序存儲器讀指令,如果接高則從內部程序存儲器讀指令。
圖2 STC89C52管腳分布圖Fig.2 STC89C52 pin map
4)可編程輸入/輸出引腳(32根):AT89S51單片機有 4組8位的可編程I/O口,分別位 P0、P1、P2、P3口,每個口有 8位(8根引腳),共32根。每一根引腳都可以編程。
1.2.2 74HC154芯片
74HC154是一款高速CMOS器件,74HC154引腳兼容低功耗肖特基TTL(LSTTL)系列,管腳分布如圖3所示。
圖3 74HC154管腳分布圖Fig.3 74HC154 pin map
74HC154譯碼器可接受4位高有效二進制地址輸入,并提供16個互斥的低有效輸出。74HC154的兩個輸入能門門電路用于譯碼器選通,以消除輸出端上的通常譯碼 “假信號”,也可用于譯碼器擴展[2-3]。門電路包含兩個“邏輯與”輸入,必須置為低以便使能輸出端。任選一個使能輸入端作為數(shù)據輸入,74HC154可充當一個1-16的多路分配器。當其余的使能輸入端置低時,地址輸出將會跟隨應用的狀態(tài)。
在本設計中,需要定時對16x16LED的行進行動態(tài)掃描,共有16種狀態(tài),故選擇了4線-16線譯碼器,該譯碼器只用輸出4位有效數(shù)據,就可控制16種狀態(tài),大大簡化了軟件的編寫,同時節(jié)省了單片機的硬件資源。
1.2.3 復位電路設計
復位電路如圖4所示,其基本功能是:系統(tǒng)上電時提供復位信號,直至系統(tǒng)電源穩(wěn)定后,撤銷復位信號。為可靠起見,電源穩(wěn)定后還要經一定的延時才撤銷復位信號,以防電源開關或電源插頭分-合過程中引起的抖動而影響復位[2-3]。采用簡易的上電復位電路,主要由電阻 R1,R2,電容 C1,開關K1組成,分別接至AT89C51的RST復位輸入端。
圖4 復位電路圖Fig.4 Reset circuit
1.2.4 晶振電路設計
晶振電路如圖5所示,其基本功能是:為單片機提供一個穩(wěn)定的參考時鐘,使單片機能夠可靠的工作。晶振的頻率常用的有6 MHz、11.0592 MHz、12 MHz等。晶振電路的接法比較固定,本設計采用的11.059 2 MHz晶振電路為晶振兩端接2個20~30 pF的起振電容后接地,然后兩端接單片機XTAL引腳即可,各單片機說明手冊中附有不同頻率的晶振的晶振電路的接法。
圖5 復位電路圖Fig.5 Reset circuit diagram
1.2.5 驅動電路設計
驅動電路原理圖如圖6所示,行、列驅動部分均用16個小功率普通三極管來控制。由于選用的LED顯示器為共陰接法,即同名列共陽,同名行共陰[3-4],為使加入驅動后與原顯示屏控制方式保持一致(列高電位接通,行低電位接通),故行驅動選用PNP型三極管8550,對應的列驅動選擇NPN型三極管8050。驅動電路原理圖如圖6所示。
圖6 驅動電路組成框圖Fig.6 Schematic diagram of drive circuit
1.2.6 LED點陣漢字顯示
要顯示一個漢字,必然要用到漢字的點陣字形信息,也叫做漢字的字模[5]。得到漢字字模的過程稱為漢字的取模,漢字的取模是漢字顯示的逆過程。根據漢字的不同字體,漢字字??煞譃樗误w字模、楷體字模、黑體字模等。根據漢字的顯示清晰度,又可分為16×16點陣字模、32×32點陣字模等等。漢字的字模是漢字字形的數(shù)字化[6]。本設計中,漢字的字模是以16進制數(shù)字形式記錄的顯示一個具體的漢字時每一行需要點亮的LED的信息。如圖7所示:以漢字“你”為例,每一行中數(shù)字“0”代表未點亮該行對應列位置上的LED,而數(shù)字“1”則代表該行對應列位置上的LED被點亮。這樣,每一行由數(shù)字“0”和數(shù)字“1”組成的漢字信息叫做位代碼,將每行16位位代碼轉換成2個字節(jié)的16進制代碼,就是我們需要的漢字字模信息。
圖7 漢字字模原理圖Fig.7 Schematic diagram of Chinese characters font
主程序流程圖如圖8所示。主程序調用了2個重要子函數(shù),即顯示子函數(shù)和移位子函數(shù)。顯示子函數(shù)的功能是讓LED顯示器顯示指針所指向的字模數(shù)組的數(shù)據,而移位子函數(shù)的功能是讓指針所指的地址加2,以實現(xiàn)漢字整體上移一行的效果。整個主程序運行后,先初始化指針p所指向的地址,讓指針指向字模數(shù)組的起始處,并且設定變量I的初值為0,用I的值來控制顯示函數(shù)的重復次數(shù),達到調整顯示漢字移動速度的目的。當I值未達到設定值時,不斷重復顯示子函數(shù),此時屏幕上顯示的是一個靜止不動的漢字,直到I達到設定值,調用移位子函數(shù),將指針地址加2,使指針的起始位置指向第二行,然后重新從I的初始化開始執(zhí)行,這樣,屏幕上就呈現(xiàn)出漢字不斷上移的結果。
圖8 主程序流程圖Fig.8 Flow chart of main program
顯示子程序流程圖如圖9所示,顯示子程序的運行過程主要是單片機I/O口對外發(fā)送數(shù)據的過程。程序首先設定了一個局部變量I,并定義其值為0。設定該變量的主要目的是為了確定掃描的行數(shù),以控制I/O口發(fā)送相應行的字模數(shù)據。經過判斷,如果I值小于15,說明正在掃描顯示器上的某一行,則P0口送出相應的行掃描命令到74HC154芯片,經譯碼后控制顯示器接通相應的行,然后P2、P1送出相應的高、低八位列字模數(shù)據,最后關閉列控制以防止殘影,對I值自加1就完成了一個循環(huán)。當I>15時,說明全部的16行掃描進行完成,此時顯示器整屏已經出現(xiàn)了需要的圖像,程序執(zhí)行完成。
圖9 顯示子程序流程圖Fig.9 Shows the subprogram flow chart
位移子程序就是讓地址指針自動加2,這樣,當顯示函數(shù)執(zhí)行時,第一行顯示的就是原本第二行要顯示的內容,依次類推,整個字形就好像上移了一行一樣。所以程序運行過程是這樣的:首先讓地址指針自加2,以實現(xiàn)地址指針的移動,然后判定地址指針所指向的地址的值,如果地址指針指向了字模數(shù)組的最后一位地址,就要令地址指針歸0,否則,指針順序移動下去,當移出字模數(shù)組的范圍后,后面的存儲空間存儲的數(shù)據是未知的,就會出現(xiàn)非預期的圖形,例如亂碼或空白。
圖10 移位子程序流程圖Fig.10 Flow chart of shift subroutine
最初設計方案沒有使用驅動電路,軟件仿真正常。在面包板上依原理圖建立物理連接后,調試中發(fā)現(xiàn)LED忽明忽暗,漢字顯示不穩(wěn)定。經萬用表測量,LED顯示器中單個發(fā)光二極管中通過的電流不足1.5 mA,達不到額定的工作電流。確定問題的原因是單片機的驅動電流不足。為解決這一問題,本次設計采用一套利用三級管控制的驅動電路,經試驗,加入到電路中效果良好,上述缺陷得到解決。
當確定要加驅動電路之后,怎樣用三極管來控制這個電流大小是一個問題。起初通過三極管直接加5 V電壓。一個LED被燒壞,這就需要加要加限流電阻,但是這電阻要加多大呢?分析如下:正常點亮一個LED的電流大約是5~15 mA左右,動態(tài)掃描電路,每次每列最多只點亮1個LED,故每個驅動三極管流過的電流按10 mA的電流大小算。通過加不同阻值的電阻,用萬用表測量后發(fā)現(xiàn)用4.7 kΩ的限流電阻與8550(PNP型)三極管串聯(lián)控制行,用 47 kΩ的電阻與 8050(NPN型)三極管串聯(lián)控制列便可以滿足要求。
最初設計方案采用軟件編程來實現(xiàn)掃描時的換行控制,雖然硬件電路相對現(xiàn)在的有少許簡單,但是軟件程序確實相當?shù)膹碗s,后發(fā)現(xiàn)只用一個譯碼器就可以大大簡化程序。
設計之處初用單片機的P0口通過譯碼器控制顯示屏的行,插好線后發(fā)現(xiàn)單片機不能正常工作,原因是單片機的P0口是比較特殊的。P0口在不接片外存儲器與不擴展I/O口時,可作為準雙向輸入/輸出口。在接有片外存儲器或擴展I/O口時,P0口分時復用為低8位地址總線和雙向數(shù)據總線。所以P0口的帶負載能力是比較低的,一般情況下要接一個上拉電阻,所以最后在P0口接了一個10千歐的排阻之后解決了問題。
當所有的線路都連接好后,顯示卻不清晰、有串擾,每行有上一行的重影。在源程序中加入消影程序后可以清晰穩(wěn)定的顯示。
文中給出了LED漢字顯示屏的系統(tǒng)框圖,各單元硬件電路、軟件設計流程圖及硬件電路的調試流程;詳細闡述了由STC89C52RC芯片、74HC154芯片、晶振電路、復位電路、驅動電路、16×16 LED點陣構成的LED漢字顯示屏系統(tǒng)。所設計的顯示屏可以實現(xiàn)漢字的滾動顯示,顯示的漢字清晰,無串擾,無重影。
[1]李建忠,余新拴,王寬仁.單片機原理及應用[M].2版.西安:西安電子科技大學出版社,2008.
[2]閻石.數(shù)字電子技術基礎[M].5版.北京:清華大學電子學教研組,高等教育出版社,2005.
[3]張華,樊慶文,石華剛,等.一種經濟型大屏幕LED顯示系統(tǒng)[J].自動化信息,2002(1):25-26.ZHANG Hua,F(xiàn)AN Qing-wen,SHIHua-gang,etal.An economic type of large screen LED display system[J].automation information,2002(1):25-26.
[4]周荷琴,吳秀清.微型計算機原理與接口技術[M].4版.合肥:中國科學技術大學出版社,2008.
[5]周水清.LED大屏幕信息發(fā)布技術與應用研究[D].武漢:武漢理工大學,2002.
[6]陽憲惠.工業(yè)數(shù)據通信與控制網絡出版社[M].北京:清華大學出版社,2003.
[7]雷震,唐云龍.VXI數(shù)據采集系統(tǒng)的建立及其應用[J].火箭推進,2008(5):54-58.LEI Zhen,TANG Yun-long.Establishment and application of VXI data acquisition system[J].Journal of Rocket Propulsion,2008(5):54-58.