摘 要:介紹了一種利用嵌入式系統(tǒng)仿真軟件Proteus實(shí)現(xiàn)對(duì)16×16 LED點(diǎn)陣漢字分批顯示的仿真設(shè)計(jì)。詳細(xì)介紹點(diǎn)陣漢字分批顯示的硬軟件設(shè)計(jì)原理,給出了主要的C語言源程序,并給出了仿真運(yùn)行結(jié)果。該LED顯示屏系統(tǒng)結(jié)構(gòu)簡(jiǎn)潔、功耗低、成本低、擴(kuò)展性能好。通過Proteus軟件的前期仿真,LED顯示系統(tǒng)設(shè)計(jì)大大縮短了實(shí)際開發(fā)周期,降低開發(fā)成本。
關(guān)鍵詞:LED點(diǎn)陣; 分批顯示; Proteus; AT89C51
中圖分類號(hào):TP312 文獻(xiàn)標(biāo)識(shí)碼:B
文章編號(hào):1004-373X(2010)12-0029-04
Proteus Design and Simulation of LED Chinese-Character Display in Batches
LI Ping
(Zhejiang Water Conservancy and Hydropower College,Hangzhou 310018,China)
Abstract:The simulation of 16 × 16 LED dot-matrix display of Chinese character in batches with an embedded system simulation software Proteus is introduced. The hardware and software design principles about dot-matrix Chinese character display in batches are proposed in detail, the main C-language source codes and the simulation results are given. The LED display system has simple architecture, low power consumption, low cost and good scalability. LED display system significantly reduces the actual development cycle and the development cost through the pre-simulation on Proteus.
Keywords:LED dot matrix; batch display; Proteus; AT89C51
0 引 言
近年來,LED顯示屏由于具有亮度高,壽命長(zhǎng),功耗小,性能穩(wěn)定,驅(qū)動(dòng)簡(jiǎn)單以及可視距離遠(yuǎn)等優(yōu)點(diǎn)[1],已經(jīng)成為新一代的信息傳播媒體工具。目前,LED顯示屏應(yīng)用十分廣泛,如證券交易顯示、金融信息顯示、體育場(chǎng)館顯示比賽信息、廣告,城市廣場(chǎng)群顯示、道路交通信息顯示等領(lǐng)域。顯示漢字信息時(shí),一般需要多個(gè)LED點(diǎn)陣顯示組合,最常見的組合方式有8×8,16×16,32×16等。由于顯示屏的顯示信息有限,當(dāng)顯示信息較多時(shí),一般需要進(jìn)行分批顯示或者滾動(dòng)顯示。
Proteus是目前最先進(jìn)、最完整的多種型號(hào)微處理器系統(tǒng)的仿真設(shè)計(jì)平臺(tái),由ISIS和ARES 兩個(gè)構(gòu)成,其中ISIS是一款智能電路原理圖輸入系統(tǒng)軟件,可作為電子系統(tǒng)仿真平臺(tái),ARES是一款高級(jí)布線編輯軟件,用于制作PCB印制電路板。開發(fā)者可以在無硬件條件下直接使用Proteus進(jìn)行電路設(shè)計(jì)和仿真調(diào)試,真正實(shí)現(xiàn)了在計(jì)算機(jī)中完成電路原理圖設(shè)計(jì)、電路分析與仿真、系統(tǒng)測(cè)試到形成印制電路板的完整電子設(shè)計(jì)、研發(fā)過程[2]。因此,本課題利用AT89C51單片機(jī)作為主控制器,采用Proteus軟件實(shí)現(xiàn)對(duì)16×16 LED點(diǎn)陣漢字的分批顯示,仿真運(yùn)行通過后再進(jìn)行點(diǎn)陣顯示電路制作,大大縮減實(shí)際開發(fā)周期,節(jié)約了開發(fā)成本。
1 硬件電路設(shè)計(jì)
在很多LED顯示的場(chǎng)合,需要實(shí)現(xiàn)一系列LED點(diǎn)陣漢字的分批顯示,為簡(jiǎn)化設(shè)計(jì),每批只顯示2個(gè)漢字,分若干次完成全部顯示。利用Proteus ISIS 平臺(tái)畫出的硬件電路如圖1所示。
該硬件電路的核心是利用單片機(jī)讀取顯示字型碼,通過驅(qū)動(dòng)電路對(duì)16×16共陰極 LED 點(diǎn)陣進(jìn)行動(dòng)態(tài)列掃描,以實(shí)現(xiàn)點(diǎn)陣漢字的分批顯示。設(shè)計(jì)選用的單片機(jī)為Atmel公司的AT89C51,它是一種低功耗,高性能CMOS 8位單片機(jī),片內(nèi)含4 KB可反復(fù)擦寫的FLASH ROM,采用Atmel公司的高密度、非易失性存儲(chǔ)技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及8051引腳結(jié)構(gòu),內(nèi)置看門狗電路。功能強(qiáng)大的AT89C51可為許多嵌入式控制應(yīng)用系統(tǒng)提供高性價(jià)比的解決方案。時(shí)鐘電路用于產(chǎn)生單片機(jī)工作時(shí)所必需的時(shí)鐘信號(hào),其中晶振頻率為12 MHz。上電復(fù)位電路可保證單片機(jī)的在程序運(yùn)行出錯(cuò)或操作錯(cuò)誤使系統(tǒng)處于死鎖狀態(tài)時(shí),重啟運(yùn)行。
顯示單元是LED漢字顯示屏,由2片16×16 LED 點(diǎn)陣模塊組成。但由于Proteus 軟件目前版本中還沒有16×16 點(diǎn)陣模塊,設(shè)計(jì)中采用Proteus 軟件中的4個(gè)8×8點(diǎn)陣模塊組合成1個(gè)16×16 點(diǎn)陣模塊[3-4]。點(diǎn)陣漢字的陽極驅(qū)動(dòng)是由單片機(jī)的P0口和P2口各自經(jīng)過一片輸出緩沖器74LS273向4個(gè)8×8 LED點(diǎn)陣輸出字型碼作為行驅(qū)動(dòng)信號(hào);點(diǎn)陣的陰極驅(qū)動(dòng)由P1.0~P1.3經(jīng)過4-16線譯碼器74HC154譯碼后輸出列選信號(hào)[5],對(duì)4個(gè)8×8點(diǎn)陣進(jìn)行列掃描,從而控制LED點(diǎn)陣的相應(yīng)像素點(diǎn)亮。2個(gè)LED點(diǎn)陣漢字中的列選信號(hào)則分別由P3.0和P3.1控制來選擇相應(yīng)的74HC154,因此需要兩片74HC154譯碼器。RP1為排阻,含有8個(gè)電阻,作為P0口各位的上拉電阻,以保證P0口能夠輸出高電平。
圖1 硬件電路原理圖
2 點(diǎn)陣漢字分批顯示原理與軟件設(shè)計(jì)
16×16共陰極LED點(diǎn)陣由4個(gè)8×8點(diǎn)陣構(gòu)成,需要顯示漢字字符串“單片機(jī)仿真!”,可通過建立數(shù)據(jù)表格的形式進(jìn)行[6]。通過16×16點(diǎn)陣漢字字模提取軟件,可提取各顯示漢字的字模數(shù)據(jù)[2,7],詳見程序設(shè)計(jì)中的顯示字符代碼表1。
在進(jìn)行漢字分批輸出顯示時(shí)采用動(dòng)態(tài)掃描驅(qū)動(dòng)方式,可按行或列進(jìn)行掃描。當(dāng)按“列”掃描時(shí),需要建立列的掃描代碼表如下:
const uchar tab2[ ]={0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08}
現(xiàn)以列掃描為例,闡述16×16 LED點(diǎn)陣漢字分批顯示原理。在初始化設(shè)置(關(guān)顯示)后,首先,P1送出第1列掃描代碼,同時(shí)使P3=0xFD選中U2的74HC154和U4,對(duì)P0輸出段碼給左邊漢字上半部的第1列以驅(qū)動(dòng)相應(yīng)段點(diǎn)亮;接著,使P3=0xFA選中U2的74HC154和U5,對(duì)P2輸出段碼值給左邊漢字下半部的第1列以驅(qū)動(dòng)相應(yīng)段點(diǎn)亮,即送出了第一個(gè)漢字“單”的第1列的字模數(shù)據(jù)(16位段碼值);再設(shè)置P3=0xF5選中U3的74HC154和U4,對(duì)P0輸出段碼給右邊漢字的上半部的第1列以驅(qū)動(dòng)相應(yīng)段點(diǎn)亮。接著,使P3=0xF9亦選中U3的74HC154和U5,對(duì)P2輸出段碼值給由邊漢字下半部的第1列以驅(qū)動(dòng)相應(yīng)段點(diǎn)亮,即送出了第2個(gè)漢字“片”的第1列的字模數(shù)據(jù)(16位段碼值)。然后,給P1送第2列的掃描代碼,同理再送出第1個(gè)漢字“單”、第2個(gè)漢字“片”的各自第2列的字模數(shù)據(jù),…如此進(jìn)行,經(jīng)過16次列掃描,分時(shí)送完兩個(gè)漢字的各自16個(gè)段碼值,就可顯示第1批漢字“單”、“片”;再進(jìn)行第2批漢字“機(jī)”、“仿”的顯示;…,直到漢字字符串顯示完成。若字符顯示完畢,又從頭開始循環(huán)顯示。LED點(diǎn)陣漢字分批顯示的程序流程如2所示。在某一時(shí)刻,只有1行或1列發(fā)光二極管被對(duì)應(yīng)的字模數(shù)據(jù)驅(qū)動(dòng)點(diǎn)亮,但只要掃描間隔時(shí)間合適(一般為數(shù)毫秒),利用人眼的視覺暫留特性,看上去整批字符就顯示在LED點(diǎn)陣顯示器上。
主要的C語言源程序如下:
#include \"reg51.h\"
#define uint unsigned int
#define uchar unsigned char
code uchar tab1[ ]={ //顯示的字符代碼表
0x00,0x10,0x00,0x10,0x1f,0xd0,0x14,0x90, //“單”
0x94,0x90,0x74,0x90,0x54,0x90,0x1f,0xff,
0x14,0x90,0x34,0x90,0xd4,0x90,0x54,0x90,
0x1f,0xd0,0x00,0x10,0x00,0x10,0x00,0x00,
0x00,0x01,0x00,0x02,0x00,0x0c,0x7f,0xf0, //“片”
0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,
0x08,0x80,0xF8,0x80,0x08,0x80,0x08,0xff,
0x08,0x00,0x18,0x00,0x08,0x00,0x00,0x00,
0x10,0x20,0x10,0xc0,0x03,0x00,0xff,0xff,//“機(jī)”
0x12,0x00,0x11,0x82,0x10,0x0C,0x00,0x30,
0x7F,0xc0,0x40,0x00,0x40,0x00,0x40,0x00,
0x7F,0xfc,0x00,0x02,0x00,0x1e,0x00,0x00,
0x02,0x00,0x04,0x00,0x08,0x00,0x37,0xfe, //“仿”
0xe0,0x02,0x50,0x04,0x10,0x18,0x10,0x60,
0x9f,0x80,0x51,0x08,0x71,0x04,0x11,0x02,
0x11,0x04,0x33,0xf8,0x11,0x00,0x00,0x00,
… }; “真”,“!”字符代碼此處略
const uchar tab2[]={0x07,0x06,0x05,0x04,0x03,//掃描代碼表
0x02,0x01,0x00,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08};
void delay(uint n)//延時(shí)函數(shù)
{uint i;
for (i;i void main( )//主函數(shù) {int j=0,q=0,y=0; ucharr,t=0; P0=0x00; P3=0xff;//初始化設(shè)置 while(1) {for(r=0;r<200;r++) //控制每批字符顯示的時(shí)間 for (j=q;j<32+q;j++) { P1=tab2[t]; //輸出列掃描碼 P3=0xf6; P0=tab1[j]; //選中U2和U4,輸出段碼給左邊漢字的上半部某列 j++; P3=0xfa; P2=tab1[j];//選中U2和U5,輸出段碼給左邊漢字的下半部某列 delay(250); y=j+31; P3=0xf5; P0=tab1[y]; //選中U3和U4,輸出段碼給右邊漢字的上半部某列 y++; P3=0xf9; P2=tab1[y]; //選中U3和U5,輸出段碼給右邊漢字的下半部某列 t++; delay(250); if(t==16)t=0;} //判斷是否顯示完兩個(gè)漢字的各自16列 q=q+64; //指向下一批漢字字符,準(zhǔn)備顯示 if(q==192) q=0; }}//判斷是否顯示完該字符串 3 程序調(diào)試與仿真 (1) 生成目標(biāo)代碼文件。利用Proteus 平臺(tái)在進(jìn)行仿真時(shí),需要加載程序到單片機(jī)中,加載的程序?yàn)槟繕?biāo)代碼文件.HEX。方法是:利用單片機(jī)軟件仿真系統(tǒng)Keil UVsion3,在新建項(xiàng)目中選擇AT89C51單片機(jī)作為CPU,同時(shí)將創(chuàng)建C語言源程序文件并將其加載到新建項(xiàng)目中。在“Project”下拉菜單中,選擇“Options for Target”對(duì)話框,在對(duì)話框中選中“Output”選項(xiàng)卡中的“Create HEX File”選項(xiàng)。在“Project”下拉菜單中選擇“Rebuild all Target Files”選項(xiàng),編譯成功后將生成.HEX目標(biāo)代碼文件[8]。 (2) 調(diào)試與仿真: 在Proteus ISIS 平臺(tái)中,按圖1畫出硬件電路,單擊鼠標(biāo)右鍵將AT89C51單片機(jī)選中并單擊鼠標(biāo)左鍵,彈出“Edit Component”對(duì)話框,在其中的“Clock Frequency”欄中設(shè)置單片機(jī)晶振頻率為12 MHz,在“Program File”欄選擇生成的.HEX文件。保存設(shè)計(jì),生成.DSN文件。在“Debug”菜單中選擇“Execute”,可得到仿真運(yùn)行效果[9]。仿真調(diào)試成功后,可看見“單片機(jī)仿真!”點(diǎn)陣漢字的分批顯示。顯示次序?yàn)椤皢纹?機(jī)仿-真!”,其中“機(jī)仿”如圖3所示。通過Keil 與Proteus 的聯(lián)合調(diào)試取得了良好的效果。 圖2 程序流程圖 圖3 仿真效果圖 4 結(jié) 語 在嵌入式系統(tǒng)仿真平臺(tái)Proteus 的基礎(chǔ)上,實(shí)現(xiàn)對(duì)16×16 LED點(diǎn)陣漢字分批顯示的仿真設(shè)計(jì),實(shí)現(xiàn)了“單片機(jī)仿真! ”六個(gè)漢字的分批顯示,達(dá)到了良好的設(shè)計(jì)效果。該仿真電路接近于實(shí)際電路,再使用Proteus ARES軟件在仿真原理圖的基礎(chǔ)上直接繪制PCB電路板,即可以制作出實(shí)際的點(diǎn)陣式LED 分批漢字顯示屏。該顯示屏電路結(jié)構(gòu)簡(jiǎn)潔,可靠性高,成本低且易于實(shí)現(xiàn),軟件通過適當(dāng)修改即可實(shí)現(xiàn)其他顯示功能如滾動(dòng)顯示等[10],顯示靈活,適用領(lǐng)域廣泛。通過Proteus的前期仿真為L(zhǎng)ED顯示屏系統(tǒng)的設(shè)計(jì)開發(fā)大大縮短了開發(fā)周期,降低了開發(fā)成本,同時(shí)也為單片機(jī)應(yīng)用系統(tǒng)、電子電 路的開發(fā)設(shè)計(jì)等提供了一種嶄新的設(shè)計(jì)方法和有效手段。 參考文獻(xiàn) [1]靳桅,鄔芝權(quán),李騏,等.基于51系列單片機(jī)的LED顯示屏開發(fā)技術(shù)[M].北京:北京航空航天大學(xué)出版社,2009. [2]侯玉寶,陳忠平,李成群,等.基于Proteus的51系列單片機(jī)設(shè)計(jì)與仿真[M].北京:電子工業(yè)出版社, 2008. [3]鐘蔚,袁臣虎.點(diǎn)陣LED滾動(dòng)漢字顯示屏的Proteus仿真設(shè)計(jì)[J].微計(jì)算機(jī)信息,2008,24(6):106-107. [4]王猛,陳林.基于Proteus的LED大屏幕的設(shè)計(jì)與仿真[J].微計(jì)算機(jī)信息,2008,24(6):233-235. [5]游達(dá)章,黃勁.簡(jiǎn)易LED點(diǎn)陣漢字顯示控制模塊設(shè)計(jì)[J].現(xiàn)代顯示,2008(5):43-45. [6]楊延寧,劉立軍,張志勇.基于Proteus的單片機(jī)漢字點(diǎn)陣顯示電路設(shè)計(jì)[J].液晶與顯示,2009,24(1):98-102. [7]汪建,張麗娟.嵌入式LED點(diǎn)陣漢字顯示系統(tǒng)的驅(qū)動(dòng)與編碼[J].微處理機(jī),2007(1):119-121. [8]朱清慧,王志奎.Proteus在LED點(diǎn)陣滾動(dòng)顯示屏設(shè)計(jì)中的應(yīng)用[J].液晶與顯示,2009,24(2):232-235. [9]丁明亮,唐前輝.51單片機(jī)應(yīng)用設(shè)計(jì)與仿真 基于Keil C與Proteus [M].北京:北京航天航空大學(xué)出版社,2009. [10]遠(yuǎn)飛.基于Proteus的LED滾幕設(shè)計(jì)與仿真[J].電子元器件應(yīng)用,2009,11(6):38-40.