摘 要: 以USB2.0接口芯片CY7C68013A為核心,分別采用74HC138和74HC595構(gòu)成行列控制電路驅(qū)動16×64 LED顯示屏,實現(xiàn)高速、動態(tài)的顯示圖文信息。詳細(xì)介紹了硬件電路、固件程序和應(yīng)用程序的設(shè)計。實驗結(jié)果表明,通過調(diào)用不同的字庫,本系統(tǒng)可以動態(tài)地顯示HZK16中的漢字、ASC16中的字符和對應(yīng)尺寸的自定義圖片。
關(guān)鍵詞: USB; LED; 圖文顯示
LED顯示屏可以動態(tài)地顯示各種文字和圖形圖像,具有亮度高、功耗低、壽命長和性能穩(wěn)定等優(yōu)點,正受到廣泛的重視并得到迅速的發(fā)展[1]。本系統(tǒng)的LED顯示屏采用異步控制方式,即在PC上編輯好圖文,通過USB總線傳入LED屏,實現(xiàn)脫機自動播放。
USB自提出以來便得到各PC、PC外設(shè)和芯片制造廠商的廣泛支持。USB最大的特點是支持即插即用和熱插拔,允許多達127個外設(shè)同時連接至PC的一個USB接口上。目前,USB接口主要有USB1.1和USB2.0兩種。本系統(tǒng)采用USB2.0接口,支持速率最高達480 Mb/s,實現(xiàn)數(shù)據(jù)高速傳輸。
本系統(tǒng)由硬件和軟件組成,硬件包括USB2.0接口芯片外圍電路和LED屏控制電路;軟件包括固件程序和應(yīng)用軟件,其中,固件程序與系統(tǒng)硬件緊密相關(guān),二者配合控制LED點陣的亮滅。由于設(shè)備CPU運行速度較慢且內(nèi)存較小,因此固件程序應(yīng)盡量簡單。USB設(shè)備與PC的通信以及復(fù)雜的運算(如圖文字模的提取等)都交由運行在PC的應(yīng)用軟件來實現(xiàn)。本系統(tǒng)采用了Cypress公司提供的通用驅(qū)動程序,也可用相關(guān)驅(qū)動程序開發(fā)工具自行定制。
1 硬件設(shè)計
1.1 接口芯片選擇和外圍電路
USB接口芯片大致可以分為單獨運作的USB接口芯片、內(nèi)含USB單元的微處理器和特定的接口轉(zhuǎn)換芯片3類。其中,前兩種芯片需要自行開發(fā)驅(qū)動程序,接口轉(zhuǎn)換芯片可以利用虛擬串口等驅(qū)動程序縮短開發(fā)周期,但數(shù)據(jù)傳輸速率較低。與第二種芯片相比,第一種芯片的開發(fā)者需要面對應(yīng)用和如何使用USB2.0兩方面的工作,開發(fā)周期長,硬件集成度較低。
本系統(tǒng)采用內(nèi)含USB單元的微處理器CY7C68013A,其優(yōu)點是集成了USB2.0收發(fā)器、智能SIE、增強的8051微控制器和可編程的外圍接口,數(shù)據(jù)傳輸率達到56 MB/s,可以硬件處理USB1.1和USB2.0協(xié)議,從而減少開發(fā)時間、確保USB的兼容性、提高硬件的集成度和可靠性[2]。
由于CY7C68013的集成度高,所以它的外圍電路比較簡單,主要有供電電路、串行I2C總線電路以及復(fù)位和喚醒電路。
串行I2C總線電路圖1所示。其中,SDA和SCL分別為I2C總線的數(shù)據(jù)線和時鐘線,因為是OC輸出,所以需經(jīng)2.2 kΩ上拉電阻接電源[4]。SDA接選擇開關(guān)SW2,這是因為在固件程序調(diào)試初期,需要多次修改,可將編譯好的HEX文件下載到CY7C68013A中的RAM中, 數(shù)據(jù)斷電消失,調(diào)試比較方便,此時SW2處于斷開位置;到后期,固件程序調(diào)試完畢,可將I2C文件固化在EEPROM中,利用I2C上電后自動從EEPROM中讀入進行枚舉,此時SW2處于圖1所示位置,即接通。另外,EEPROM是電可擦除的,SW2與專用固件配合可以利用PC擦除已有數(shù)據(jù),重新編程,提高了硬件的利用率。由于芯片已經(jīng)將I2C總線集成,且采用的是24LC64(8 KB)的EEPROM,因此相應(yīng)的地址線A2~A0為001。
1.2 LED屏驅(qū)動電路
LED顯示屏可以采用點掃描、行掃描或列掃描[1]。本系統(tǒng)選用行掃描,即顯示屏是一行一行地被點亮。雖然每次都只有一行亮,但由于人眼視覺暫留效應(yīng),看到的仍然是全屏穩(wěn)定的圖像。本系統(tǒng)需要分時驅(qū)動16行和64列LED點陣,若采用I/O口直接驅(qū)動的方法比較簡單,但需要大量的I/O口。由于控制芯片 的I/O口個數(shù)有限,也考慮到今后擴展的需要,顯示屏的行驅(qū)動選用3線-8線譯碼器74HC138,列驅(qū)動選用8 bit串行輸入轉(zhuǎn)并行輸出移位寄存器芯片74HC595。這樣就可以采用很少的I/O口控制盡量多的行和列。
行驅(qū)動由2片74HC138級聯(lián)組成,共16個并行數(shù)據(jù)輸出端,分別控制點陣模塊的16個同名行。列驅(qū)動由8片74HC595組成,共64個輸出端,分別控制點陣模塊的同名列。部分電路如圖2所示。
行驅(qū)動:U2為低位片,U3為高位片,A3~A0為4 bit譯碼輸入端。列驅(qū)動: 4片74HC595一組,共兩組。以第一組為例,DS1為串行數(shù)據(jù)輸入端;第1片的Q7與第2片的DS連接,第2片的Q7與第3片的DS連接,以此類推至第4片。由于I/O口的驅(qū)動能力有限,列驅(qū)動采用了PNP型晶體管。晶體管發(fā)射極接電源,集電極接LED陽極,基極經(jīng)限流電阻接74HC595輸出端,這樣利用晶體管的電流放大作用,僅需提供幾毫安的驅(qū)動電流就可控制對應(yīng)LED的亮滅了。
以顯示第一行為例,首先,CY7C68013A將行驅(qū)動使能端置0,輸出”0000”到行驅(qū)動的譯碼輸入端。此時選通低位片,而高位片不工作,輸出16 bit二進制為0xFFFE,使得第一行LED的陰極為低電平,其他行LED的陰極均為高電平。然后,CY7C68013A在SH_CP端產(chǎn)生64個連續(xù)的時鐘脈沖上升沿,將本行對應(yīng)的圖文字模依次送入8個列移位寄存器中,并鎖存在鎖存器中,再在ST_CP端產(chǎn)生1個時鐘脈沖上升沿,將字模并行輸出到對應(yīng)的64根列控制引腳線上,若該列的LED陽極為高電平,則對應(yīng)的LED被點亮;若該列的LED陽極為低電平,則對應(yīng)的LED為暗。同理,依次選擇第2~16行,點亮對應(yīng)的LED并循環(huán),此時顯示屏就會顯示相應(yīng)的圖文。
2 軟件設(shè)計
2.1 固件程序設(shè)計
固件程序是指運行在設(shè)備CPU中的程序,只有在該程序運行時,外設(shè)才能被稱為具有給定功能的外部設(shè)備[2]。CY7C68013A開發(fā)包提供了固件程序框架和固件函數(shù)庫[2],在Keil C51環(huán)境下編寫,降低了開發(fā)難度,縮短了開發(fā)周期。本系統(tǒng)固件程序流程圖如圖3所示。
USB設(shè)備上電/復(fù)位后,工作分配器函數(shù)TD_Init()完成系統(tǒng)的初始化,主要包括對CY7C68013A 的I/O口和EP2端口、74HC138和74HC595的使能端的初始化。然后通過調(diào)用工作分配器函數(shù)TD_Poll()啟動采樣,判斷是否有EP2OUT中斷發(fā)生。若有中斷發(fā)生,則首先判斷EP2FIFOBUF[0],若等于0x00,則調(diào)用靜態(tài)顯示函數(shù)displaystatic(),將PC通過USB總線傳來的數(shù)據(jù)放在EP2OUTBUF[1]~EP2OUTBUF[128]中,根據(jù)這些數(shù)據(jù)依次驅(qū)動LED顯示屏的行和列,更新LED顯示;若不等于0x00則調(diào)用對應(yīng)的動態(tài)顯示子函數(shù),目前包括上下左右移動,今后還可以根據(jù)需要增加相應(yīng)的效果函數(shù)。若沒有中斷發(fā)生,則繼續(xù)等待,同時保持LED屏的顯示。其中靜態(tài)顯示函數(shù)displaystatic()部分程序如下:
for(n=1;n<=16;n++)
{ chooseraw_138(n);//選擇行
chooseline_5951(EP2FIFOBUF[i], EP2FIFOBUF[i+1]);
//第1個字模
chooseline_5951(EP2FIFOBUF[i+32],EP2FIFOBUF[i+
33]); //第2個字模
chooseline_5952(EP2FIFOBUF[i+64],EP2FIFOBUF[i+
65]); //第3個字模
chooseline_5952(EP2FIFOBUF[i+96],EP2FIFOBUF[i+
97]); //第4個字模
stcp1=0;stcp2=0; stcp1=1;stcp2=1;
//產(chǎn)生1個時鐘脈沖上升沿
……}
2.2 應(yīng)用軟件設(shè)計
本系統(tǒng)涉及與USB通信的問題,因此采用了動態(tài)鏈接庫(DLL)和應(yīng)用程序相結(jié)合的方式編寫應(yīng)用軟件。動態(tài)鏈接庫通過調(diào)用相應(yīng)的API函數(shù),利用驅(qū)動程序建立與底層硬件的通信,應(yīng)用程序為用戶提供一個直觀的軟件界面方便操作[3]。本系統(tǒng)部分應(yīng)用程序流程圖如圖4所示。
初始化后,調(diào)用DLL函數(shù)OPEN()打開USB設(shè)備。若要顯示ASC16或HZK16字庫中的文字,則首先判斷首字節(jié)的ASCII碼qh,若qh<128則以只讀方式打開ASC16,代入式子offset=qh×16+1,根據(jù)offset(字庫中字模的起始地址)將16 bit字模數(shù)據(jù)讀入內(nèi)存;若qh≥128,則接著讀取第2個字節(jié)的ASCII碼wh,打開HZK16,代入式子offset=(94×(qh-0xa0-1)+(wh-0xa0-1))×32,根據(jù)offset將32 bit字模數(shù)據(jù)讀入內(nèi)存。然后在軟件界面上顯示文字點陣,同時調(diào)用DLL函數(shù)OUTPUT()將處理好的字模數(shù)據(jù)以點陣信息的形式通過USB總線發(fā)送至下位機顯示。若要顯示自定義的圖形(圖中未畫出),可以用鼠標(biāo)左鍵單擊的形式在軟件界面上直接設(shè)計圖形,或是讀取自定義圖文庫ZDK16,將處理好的字模數(shù)據(jù)發(fā)送給下位機顯示。最后調(diào)用DLL函數(shù)CLOSE()關(guān)閉USB設(shè)備。
本文設(shè)計的LED動態(tài)圖文顯示系統(tǒng)符合USB2.0協(xié)議標(biāo)準(zhǔn),LED顯示屏為16×64條屏(2塊16×32條屏級聯(lián))它可以方便地與同類條屏級聯(lián)組成更大的LED顯示屏。通過調(diào)用不同的字庫,本系統(tǒng)可以動態(tài)顯示各種圖文信息,顯示效果如圖5所示。
參考文獻
[1] 諸昌鈐.LED 顯示屏系統(tǒng)原理及工程技術(shù)[M].成都: 電子科技大學(xué)出版社,2000.
[2] 許永和.EZ-USB FX系列單片機USB外圍設(shè)備設(shè)計與應(yīng)用[M]. 北京:北京航空航天大學(xué)出版社,2002.
[3] 張立科.Windows API程序設(shè)計參考大全[M].北京:人民郵電出版社, 2006.
[4] EZ-USB FX2 CY68013 Technical Reference Manual[DB/OL].Cypress Semiconductor 2001.