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