中心議題:
- 基于USB接口的LED顯示系統(tǒng)設(shè)計(jì)
解決方案:
- 顯示和驅(qū)動(dòng)設(shè)計(jì)
- 控制設(shè)計(jì)
- 固件程序設(shè)計(jì)
- 驅(qū)動(dòng)程序設(shè)計(jì)
- 應(yīng)用軟件設(shè)計(jì)
配合驅(qū)動(dòng)LED顯示屏實(shí)現(xiàn)高速數(shù)據(jù)傳輸。應(yīng)用軟件處理文字信息,并與USB設(shè)備通信。本設(shè)計(jì)經(jīng)測(cè)試能動(dòng)態(tài)地顯示文字信息。
1 引 言
LED顯示屏是由若干發(fā)光二極管排列組成的顯示器件。它采用低電壓掃描驅(qū)動(dòng),具有耗電省、使用壽命長(zhǎng)、成本低、亮度高、視角大、可視距離遠(yuǎn)、規(guī)格品種多等優(yōu)點(diǎn),被廣泛地應(yīng)用于許多公共場(chǎng)合的提示、說(shuō)明、廣告等。
本設(shè)計(jì)包括硬件和軟件。硬件包括LED顯示屏的驅(qū)動(dòng)和控制。驅(qū)動(dòng)部分負(fù)責(zé)根據(jù)行列選通信號(hào)向指定的LED發(fā)光器件提供合適的驅(qū)動(dòng)電流;控制部分采用集成USB2. 0的微處理器CY7C68013A, 實(shí)現(xiàn)USB通信和對(duì)行列移位寄存系統(tǒng)的控制。軟件包括Keil C51環(huán)境下編寫(xiě)的固件程序、驅(qū)動(dòng)程序和應(yīng)用軟件。固件程序控制硬件完成相應(yīng)的功能;驅(qū)動(dòng)程序提供了連接到計(jì)算機(jī)的硬件設(shè)備的軟件接口;應(yīng)用軟件處理圖文信息并與USB設(shè)備通信。本設(shè)計(jì)的結(jié)構(gòu)框圖如圖1所示。
2 硬件設(shè)計(jì)
2. 1 顯示和驅(qū)動(dòng)設(shè)計(jì)
本設(shè)計(jì)的LED顯示屏如圖1中64 ×16 LED點(diǎn)陣顯示屏所示,采用16塊8 ×8模塊,組成4個(gè)16 ×16點(diǎn)陣。每個(gè)16 ×16 點(diǎn)陣顯示一個(gè)漢字, 因此LED顯示屏可以顯示4個(gè)漢字。
由于CY7C68013A I/O 口的個(gè)數(shù)有限( 5 個(gè)8位I/O口) ,也考慮到今后方便擴(kuò)展的需要, LED顯示屏的行列驅(qū)動(dòng)系統(tǒng)均選用8位串行輸入轉(zhuǎn)并行輸出移位寄存器芯片74HC595。其優(yōu)點(diǎn)是可以采用很少的I/O口控制盡量多的行或列,且可以克服直接采用I/O口控制或采用I/O口和譯碼器共同控制時(shí)難以克服的一些問(wèn)題,如“鬼影”的消除。
由于I/O口的驅(qū)動(dòng)能力有限,列驅(qū)動(dòng)采用了PNP型晶體管。點(diǎn)亮每一個(gè)LED器件大約需要20mA驅(qū)動(dòng)電流,為了滿足同時(shí)點(diǎn)亮16個(gè)LED大約需要320mA的驅(qū)動(dòng)電流,采用PNP型晶體管的發(fā)射極接電源,集電極接LED陽(yáng)極,基極經(jīng)限流電阻接74HC595輸出端。這樣利用晶體管的電流放大作用, 74HC595的輸出端僅需提供幾毫安的驅(qū)動(dòng)電流就可控制對(duì)應(yīng)LED的亮滅了。部分驅(qū)動(dòng)電路如圖2所示。
[page]
2. 2 控制設(shè)計(jì)
本設(shè)計(jì)的USB接口采用集成USB2. 0的微處理器CY7C68013A,其優(yōu)點(diǎn)是集成了USB2. 0收發(fā)器、智能SIE、增強(qiáng)的8051微控制器和可編程的外圍接口, 數(shù)據(jù)傳輸率達(dá)到56MByte / s, 可以硬件處理USB1. 1和USB2. 0協(xié)議,從而減少開(kāi)發(fā)時(shí)間、確保USB的兼容性、提高硬件的集成度和可靠性 。
CY7C68013A的外圍電路主要包括供電( 5V -3. 3V轉(zhuǎn)換)電路,串行I2C總線電路以及復(fù)位和喚醒電路 。具體電路可參考文獻(xiàn)。
LED顯示屏的基本工作原理是動(dòng)態(tài)掃描。動(dòng)態(tài)掃描又分為行掃描和列掃描兩種方式。本設(shè)計(jì)采用行掃描工作方式。
同一行8個(gè)8 ×8點(diǎn)陣模塊的同名行控制引腳是接在一條線上的,共16條線,連接在行移位寄存系統(tǒng)上。同一列2個(gè)8 ×8點(diǎn)陣模塊的同名列控制引腳也是接在一條線上的,共64條線,連接在列移位寄存系統(tǒng)上。行移位寄存系統(tǒng)由2 片74HC595組成,列移位寄存系統(tǒng)由8片74HC595組成。
以行移位寄存系統(tǒng)為例:將第一片的DS (串行數(shù)據(jù)輸入)端由一個(gè)CY7C68013A 的I/O 口控制;第一片和第二片74HC595的SH_CP (移位寄存器的時(shí)鐘脈沖) 、ST_CP (存儲(chǔ)寄存器的時(shí)鐘脈沖)和OE(輸出使能端)端分別接在一起,各由一個(gè)I/O口控制;第一片的Q7 (串行輸出)端與第二片的DS連接;MR (芯片復(fù)位)端接高電平; O1 - O7 (并行數(shù)據(jù)輸出)端分別與對(duì)應(yīng)的LED行控制引腳相連接。
CY7C68013A在SH_CP端產(chǎn)生連續(xù)的16個(gè)時(shí)鐘脈沖上升沿,將16位二進(jìn)制數(shù)0x01依次送入兩個(gè)移位寄存器中,并鎖存在鎖存器中, 然后在ST_CP端產(chǎn)生1個(gè)時(shí)鐘脈沖上升沿,將0x01并行輸出到對(duì)應(yīng)的16根行控制引腳線上,使得第一行LED陰極為低電平,其它行LED陰極均為高電平。此時(shí)將對(duì)應(yīng)的字模送到列驅(qū)動(dòng)系統(tǒng),若該列的LED陽(yáng)極為高電平,則對(duì)應(yīng)的LED被點(diǎn)亮,若該列的LED陽(yáng)極為低電平,則對(duì)應(yīng)的LED為暗。依次選擇第二至十六行,將對(duì)應(yīng)的字模送到列驅(qū)動(dòng)系統(tǒng), 點(diǎn)亮相應(yīng)的LED。當(dāng)顯示完第十六行的字模后,又從第一行開(kāi)始顯示,這樣LED顯示屏就會(huì)顯示相應(yīng)的漢字。
按照這種工作方式, LED顯示屏是一行一行點(diǎn)亮的,每次都只有一行亮,但由于人眼視覺(jué)暫留時(shí)間最長(zhǎng)為1 /16 s,只要設(shè)計(jì)的掃描周期時(shí)間(從第一列到最后一列所花費(fèi)的時(shí)間)小于1 /16 s,看到的還是全屏穩(wěn)定的圖像。
3 軟件設(shè)計(jì)
3. 1 固件程序設(shè)計(jì)
固件程序是指運(yùn)行在設(shè)備CPU中的程序。只有在該程序運(yùn)行時(shí),外設(shè)才能被稱為具有給定功能的外部設(shè)備。固件程序在Keil C51環(huán)境下編寫(xiě)。
C51編譯器包可以用在所有的8051系列處理器上,可以在W INDOWS 32 位命令行中執(zhí)行 。本設(shè)計(jì)的固件程序流程圖如圖3所示。
硬件設(shè)備上電/復(fù)位后,工作分配器函數(shù)TD _Init ( )完成對(duì)微處理器的初始化,然后通過(guò)調(diào)用工作分配器函數(shù)TD _Poll ( )啟動(dòng)采樣,判斷是否有EP2OUT中斷發(fā)生。若有中斷發(fā)生,則進(jìn)入中斷處理函數(shù)INT_Ep2out ( ) ,將上位機(jī)通過(guò)USB 總線傳來(lái)的數(shù)據(jù)放在EP2OUTBUF中,根據(jù)這些數(shù)據(jù)依次驅(qū)動(dòng)LED顯示屏的行和列,更新LED 顯示。中斷處理完畢后又回到啟動(dòng)采樣階段,重復(fù)判斷是否有中斷過(guò)程。若沒(méi)有中斷發(fā)生,則繼續(xù)保持LED的顯示,然后也回到啟動(dòng)采樣階段,重復(fù)判斷是否有中斷過(guò)程。
其中顯示第i行字模的函數(shù)如下:
chooseraw_5950 ( i) ; / /選擇第i行
chooseline_5951 ( a, b) ; / /第一個(gè)字對(duì)應(yīng)第i行的字模
chooseline_5951 ( c, d) ; / /第二個(gè)字對(duì)應(yīng)第i行的字模
chooseline_5952 ( e, f) ; / /第三個(gè)字對(duì)應(yīng)第i行的字模
chooseline_5952 ( g, h) ; / /第四個(gè)字對(duì)應(yīng)第i行的字模
stcp0 = 0; stcp1 = 0; stcp2 = 0;
stcp0 = 1; stcp1 = 1; stcp2 = 1; / / st_cp 端產(chǎn)生一個(gè)脈沖上升沿,數(shù)據(jù)并行輸出
delay_ms (3) ; / /延時(shí)3ms
}
3. 2 驅(qū)動(dòng)程序設(shè)計(jì)
采用DDK來(lái)開(kāi)發(fā)驅(qū)動(dòng)程序, DDK的編譯工具build來(lái)進(jìn)行驅(qū)動(dòng)程序的編譯,DriverStudio工具包中的SoftIce用來(lái)對(duì)驅(qū)動(dòng)程序進(jìn)行調(diào)試[ 5 ] 。
驅(qū)動(dòng)程序使用的例程包括:驅(qū)動(dòng)程序入口例程、即插即用例程、分發(fā)例程、電源管理例程、卸載例程。
驅(qū)動(dòng)程序的編寫(xiě)與固件中定義的USB 傳輸方式等信息有關(guān),在固件中,采用端點(diǎn)EP2作為OUT方向的批量傳輸端點(diǎn),負(fù)責(zé)儲(chǔ)存要發(fā)往外設(shè)的數(shù)據(jù)。
3. 3 應(yīng)用軟件設(shè)計(jì)
因?yàn)樯婕暗脚cUSB通信的問(wèn)題,所以本設(shè)計(jì)采用了動(dòng)態(tài)鏈接庫(kù)(DLL)和應(yīng)用程序相結(jié)合的方式編寫(xiě)應(yīng)用軟件。動(dòng)態(tài)鏈接庫(kù)利用驅(qū)動(dòng)程序建立起與底層硬件的通信,應(yīng)用程序?yàn)橛脩籼峁┮粋€(gè)直觀的軟件界面以方便操作。
應(yīng)用程序可采用不同的算法,實(shí)現(xiàn)文字的滾動(dòng)顯示,如左移、右移、上翻、下翻等。
4 結(jié)束語(yǔ)
本設(shè)計(jì)的LED顯示系統(tǒng),采用USB總線通信,實(shí)現(xiàn)了文字的靜態(tài)和動(dòng)態(tài)顯示,達(dá)到了設(shè)計(jì)要求。
采用USB接口與串口相比能提高數(shù)據(jù)傳輸?shù)乃俾省?/p>
LED顯示屏的行列驅(qū)動(dòng)系統(tǒng)均選用串行輸入轉(zhuǎn)并行輸出移位寄存器,使得擴(kuò)展變得很方便。調(diào)用不同的文字庫(kù),本系統(tǒng)可以顯示不同字體的漢字、數(shù)字、字母和符號(hào),還可以顯示自定義圖片。
軟件界面如圖4所示。顯示效果如圖5所示。