摘 要: 介紹了一種基于LabVIEW與FPGA的LED漢字顯示屏,其利用LabVIEW軟件靈活,、簡便地從計(jì)算機(jī)的漢字庫中提取漢字字模并轉(zhuǎn)換為供FPGA直接調(diào)用的十六進(jìn)制字模數(shù)據(jù),。通過在LabVIEW中進(jìn)行圖像信息掃描的方式得到任意漢字的字模,然后經(jīng)串口傳遞給FPGA控制顯示漢字,。該方法的字模由上位機(jī)生成,,省去了建立字模庫步驟,,簡化了顯示過程,實(shí)用性較強(qiáng),。
關(guān)鍵詞: LabVIEW,;點(diǎn)陣字庫;FPGA,;LED顯示
隨著嵌入式技術(shù)的發(fā)展,,各類智能電子裝置日益增多。在這些電子裝置中經(jīng)常需要顯示漢字,,如各類由LED點(diǎn)陣組成的電子廣告牌與液晶顯示屏,,它們都是以“點(diǎn)位點(diǎn)亮”的方式顯示。因此,,在顯示漢字時(shí)必須通過某些技術(shù)手段獲得反映漢字字型點(diǎn)陣數(shù)據(jù)的漢字字模,。本文介紹了一種直接利用LabVIEW的圖片處理功能自動(dòng)生成字符點(diǎn)陣的方法,它比其他字模提取方法簡單直觀,。利用該程序無需使用專門的字庫可自動(dòng)得到各種字符的點(diǎn)陣,,然后將顯示信息通過串行傳輸方式發(fā)送到FPGA,通過FPGA驅(qū)動(dòng)相應(yīng)的二極管發(fā)光顯示信息,。本設(shè)計(jì)的硬件由計(jì)算機(jī),、FPGA、驅(qū)動(dòng)電路和LED顯示屏構(gòu)成,。結(jié)構(gòu)圖如圖1所示。
1 基于LabVIEW的漢字字模的提取
1.1 點(diǎn)陣字庫
點(diǎn)陣字庫包括16點(diǎn)陣,、24點(diǎn)陣及48點(diǎn)陣字庫等,,點(diǎn)陣數(shù)目越多,漢字質(zhì)量越高,,而所用存儲(chǔ)空間也就越多,。點(diǎn)陣字庫用于存放各個(gè)漢字的字模,在同一字庫中,,各漢字字模所占字節(jié)數(shù)相同,,以便于查找和提取。對(duì)于一個(gè)n×n的點(diǎn)陣字符,,其生成方法就是在一個(gè)具有n×n個(gè)小格的坐標(biāo)紙上書寫字符,,若筆畫通過某小格,該小格對(duì)應(yīng)數(shù)字1,;筆畫不通過,,則對(duì)應(yīng)數(shù)字0。然后將該點(diǎn)陣按行或按列切分為字節(jié)后存儲(chǔ),,就構(gòu)成了一個(gè)字符的點(diǎn)陣數(shù)據(jù),。
1.2 點(diǎn)陣字模的存儲(chǔ)結(jié)構(gòu)
要顯示一個(gè)漢字,,就必須知道這個(gè)漢字的點(diǎn)陣字模信息,這些字模有16點(diǎn)陣,、24點(diǎn)陣和32點(diǎn)陣等,。目前技術(shù)開發(fā)中常用的是16點(diǎn)陣和24點(diǎn)陣兩種。不同點(diǎn)陣漢字字體又有宋體,、仿宋體,、黑體、楷體之分,。在計(jì)算機(jī)中,,相同點(diǎn)陣、相同字體的字符存放在一個(gè)字庫中,,稱為一個(gè)漢字庫文件,。本文所用的16點(diǎn)陣字庫結(jié)構(gòu)采用行排列的形式,共有16行,,每行16個(gè)點(diǎn),,每行點(diǎn)陣存入2 B,因此,,每個(gè)字符占用32 B,。字節(jié)的存放順序?yàn)閺淖蟮接摇纳系较?,如圖2(a)所示,。24×24點(diǎn)陣字庫則主要為了打印方便,一般采用以列為主的存儲(chǔ)方式存放字模點(diǎn)陣,,如圖2(b)所示,。
1.3 點(diǎn)陣字庫原理
(1)計(jì)算區(qū)位碼
根據(jù)我國頒布的《信息交換用漢字編碼字符集——基本集》,,漢字庫中收集了6 763個(gè)漢字,,其中3 755個(gè)為常用漢字,其余為次常用漢字,。常用漢字按漢語拼音的順序存放在前面,,次常用漢字按偏旁部首的順序存放在最后,整個(gè)字庫分94個(gè)區(qū),,每個(gè)區(qū)可存放94個(gè)漢字或符號(hào),,各漢字或符號(hào)所在區(qū)即為區(qū)碼,在區(qū)中的順序號(hào)則為位碼,。因而,,通過區(qū)碼和位碼便可唯一地確定一個(gè)漢字或符號(hào),計(jì)算公式為:
一個(gè)漢字或符號(hào)在字庫中的順序號(hào)=94×(區(qū)碼-1)+(位碼-1)(1)
如果直接利用漢字的區(qū)位碼作為編碼存儲(chǔ),,就會(huì)無法區(qū)分是漢字還是西文字符,,為此,,對(duì)區(qū)位碼作統(tǒng)一變換后作為漢字的存儲(chǔ)代碼,即機(jī)內(nèi)碼,。機(jī)內(nèi)碼與區(qū)位碼之間的變換關(guān)系如下:
機(jī)內(nèi)碼高位字節(jié)=區(qū)碼+160
機(jī)內(nèi)碼低位字節(jié)=位碼+160(2)
對(duì)于16點(diǎn)陣字庫,,每個(gè)漢字字模使用32 B(16 bit×16 bit),再由式(1)和式(2)可知,,一個(gè)漢字字模在16點(diǎn)陣字庫中的起始位置可由式(3)求得:
32×[(機(jī)內(nèi)碼高字節(jié)-161)×94+(機(jī)內(nèi)碼低字節(jié)-161)] (3)
由于漢字庫前15個(gè)區(qū)主要用于存放各種非漢字符號(hào),,有些漢字系統(tǒng)為了不同的需要進(jìn)行了裁減,對(duì)此必須特別注意,,應(yīng)根據(jù)所選字庫對(duì)式(3)進(jìn)行適當(dāng)修改,。同樣,一個(gè)漢字字模在24點(diǎn)陣字庫中的起始位置應(yīng)為:
72×[(機(jī)內(nèi)碼高字節(jié)-176)×94+(機(jī)內(nèi)碼低字節(jié)-161)](4)
?。?)計(jì)算漢字點(diǎn)陣數(shù)據(jù)存儲(chǔ)位置偏移量
偏移量是指字模首字節(jié)距離文件頭的相對(duì)位置,。其計(jì)算原理是:求出被檢索漢字之前的漢字個(gè)數(shù),再乘每個(gè)漢字所占的字節(jié)數(shù),。1個(gè)n×n點(diǎn)陣字符所占字節(jié)數(shù)等于n×n÷8,。如16×16點(diǎn)陣占32 B,其偏移量offset計(jì)算式為:
offset=(94×(區(qū)碼-1)+(位碼-1))×32(5)
?。?)移動(dòng)文件指針讀出點(diǎn)陣字模數(shù)據(jù)
打開點(diǎn)陣字庫文件,,將文件指針從文件頭向后移動(dòng)offset個(gè)字節(jié),然后使用文件讀取函數(shù)讀出字模,,如使用Windows API函數(shù),。點(diǎn)陣字庫存在分辨率低和不能放大兩個(gè)致命的缺點(diǎn)。其中,,分辨率低導(dǎo)致不能反映字體形狀細(xì)節(jié),,也就不能反映豐富多彩的字體,可以通過提高位圖點(diǎn)數(shù)提高分辨率,。相較于其他字庫,點(diǎn)陣字模原理簡單且使用非常容易,,因此,,其在大型顯示屏等戶外電子裝置顯示漢字時(shí)得到了廣泛應(yīng)用。
1.4 漢字字模提取程序
1.4.1 漢字字模提取程序的前面板
前面板是圖形化用戶界面,,用于設(shè)置輸入數(shù)值和觀察輸出量,,漢字字模提取程序的前面板如圖3所示,它由漢字輸入和漢字顯示等幾部分組成,。只需要在漢字輸入窗口輸入一個(gè)漢字,,由LED控件組成的矩陣就可以模擬真實(shí)的LED顯示元件顯示所輸入的漢字。
1.4.2 漢字字模提取程序框圖
漢字字模提取程序基本流程為:在輸入一個(gè)漢字后,,得到該漢字的機(jī)內(nèi)碼,,從而進(jìn)一步計(jì)算得到該漢字字模首字節(jié)在漢字庫文件HZK16中的位置,,同時(shí)將一個(gè)指明漢字庫文件HZK16路徑的常量送入Open/Create/Replace File VI的file path端口。將文件HZK16打開并得到文件的標(biāo)識(shí)號(hào),。將文件HZK16的標(biāo)識(shí)號(hào)和得到的漢字字模首字節(jié)地址分別送入Set File Position VI的refnum端口和offset端口,,即指明了漢字字模在文件HZK16中的起始位置。接著將得到的refnum送入讀二進(jìn)制文件節(jié)點(diǎn)Read from Binary File VI的file端口,,同時(shí)在count端口指明讀取的字節(jié)數(shù)量為32,。讀二進(jìn)制文件節(jié)點(diǎn)就會(huì)從漢字庫文件HZK16中,從得到的字模起始位置開始連續(xù)讀取32 B的數(shù)據(jù),,這樣就得到了一個(gè)容量為32的數(shù)組,,即輸入漢字的點(diǎn)陣字模。然后利用一個(gè)For循環(huán),,將一維數(shù)組的每個(gè)十六進(jìn)制元素通過Number To Boolean Array VI轉(zhuǎn)化為布爾量,,這個(gè)布爾量與應(yīng)該得到的布爾量是前后顛倒的,因此應(yīng)將轉(zhuǎn)化的布爾量數(shù)組通過Reverse 1D Array VI再一次顛倒,,并通過轉(zhuǎn)化為16×16矩陣,,送入前面板顯示。程序框圖如圖4所示,。
2 系統(tǒng)硬件設(shè)計(jì)概述
本文需要設(shè)計(jì)的LED控制系統(tǒng)是基于NiosⅡ的嵌入式系統(tǒng),,其硬件平臺(tái)體系結(jié)構(gòu)如圖5所示。
由圖5可知,,該LED顯示控制系統(tǒng)大致可以分為FPGA內(nèi)部邏輯,、存儲(chǔ)器模塊和外圍元件3個(gè)部分。FPGA內(nèi)部邏輯在FPGA芯片內(nèi)部實(shí)現(xiàn),,核心是NiosⅡ核,,它集成了Avalon總線控制器、片內(nèi)存儲(chǔ)器,、內(nèi)部定時(shí)器,、CPU與外圍設(shè)備的接口等,在 SoPC Builder中首要設(shè)計(jì)的就是FPGA內(nèi)部邏輯,。存儲(chǔ)器模塊由外接的Flash,、SRAM及SDRAM組成。由于現(xiàn)有的FPGA還不能集成大容量的存儲(chǔ)器,,需要外擴(kuò)Flash及SDRAM存儲(chǔ)器,。
3 控制系統(tǒng)的軟件設(shè)計(jì)
軟件程序主要由初始化、主程序,、中斷程序等構(gòu)成,,采用匯編語言編寫。主程序用于LED顯示,,其流程圖如6所示,。中斷程序主要用于接收上位機(jī)傳送的字模信息,,由于LabVIEW和下位機(jī)傳遞的數(shù)據(jù)是ASCII形式的,需要轉(zhuǎn)換為十六進(jìn)制數(shù),。采用中斷的方式接收數(shù)據(jù)可以提高數(shù)據(jù)傳輸?shù)臅r(shí)效性,。
本文設(shè)計(jì)了基于LabVIEW和FPGA的LED漢字顯示屏。采用LabVIEW編程方法產(chǎn)生字模,,通過串口傳遞給FPGA,,簡化了編程,節(jié)省了FPGA程序運(yùn)行時(shí)間,,不但能實(shí)現(xiàn)動(dòng)態(tài)輸入,,還能根據(jù)需要隨時(shí)修改需要顯示的內(nèi)容,具有較高的實(shí)用價(jià)值,。而下位機(jī)系統(tǒng)主要采用了FPGA技術(shù),、SoPC技術(shù)和NiosⅡ處理器技術(shù)。
雖然本設(shè)計(jì)只使用了一塊16×16 LED點(diǎn)陣,,電路簡單,,但是包含了LED顯示屏的電路基本原理和基本編程思想,如要進(jìn)行擴(kuò)展,,只需擴(kuò)展FPGA的I/O接口,,增加一些LED點(diǎn)陣和相關(guān)芯片,就能設(shè)計(jì)出面積更大,、花樣更多的LED顯示屏,。實(shí)驗(yàn)結(jié)果表明,本文所設(shè)計(jì)的系統(tǒng)靈活性和可靠性較高,,外圍電路簡單,,硬件易升級(jí),功能擴(kuò)展性增強(qiáng),,是LED控制系統(tǒng)的一個(gè)主要發(fā)展方向,。
參考文獻(xiàn)
[1] 周立功.SOPC嵌入式系統(tǒng)基礎(chǔ)教程[M].北京:北京航空航天大學(xué)出版社,2006.
[2] 褚振勇.翁木云.FPGA設(shè)計(jì)及應(yīng)用[M].西安:西安電子科技大學(xué)出版社,,2002.
[3] Altera Corporation. QuartusII version6.0 handbook[EB/OL].www.altera.com. 2006.
[4] 楊樂平.LabVIEW程序設(shè)計(jì)與應(yīng)用(第2版)[M].北京:電子工業(yè)出版社,,2005.
[5] 侯國屏.LabVIEW編程與虛擬儀器設(shè)計(jì)[M].北京:清華大學(xué)出版社,2005.