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