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