陳孝堅,陳健,屈環(huán)宇
(嘉興學院 數(shù)理與信息工程學院,嘉興314001)
隨著數(shù)字化技術的飛速發(fā)展,嵌入式產(chǎn)品應用在我們生活中的各個方面。尤其是那些高性能、低成本、低功耗的RISC處理器已廣泛地嵌入到家用電器、儀器儀表等生活所必需的產(chǎn)品之中。嵌入式產(chǎn)品將面向基層、面向大眾,獲得更廣泛的應用。
當產(chǎn)品面向大眾時,要做到較好的人機交互,就必須能顯示中文,從而達到與用戶對話的效果。于是,便出現(xiàn)了一個值得深入研究的問題:顯示中文時如何實現(xiàn)占用存儲空間小、字模無冗余、不依賴于其他嵌入式GUI、操作方便等效果。
作者多次遇到需在液晶屏上顯示中文的項目需求,通常用以下兩種方法解決。
(1)逐個字模法
當顯示漢字字符串數(shù)在十幾個時,通常會逐個獲取漢字字模,再組合成所要顯示的漢字字符串。
在硬件層面,此方法雖占用的存儲空間較小,但容易出現(xiàn)字模冗余。
在操作層面,此方法操作起來非常復雜,得逐字取模,而且還需組合成漢字字符串數(shù)組。當所需顯示的漢字字符串增加時,取模操作將成倍數(shù)增加,而組合成字符串的操作將呈指數(shù)次增加。
也就是說,當需要顯示字符串較多時,此方法非常繁瑣。
(2)字模庫法
當所需顯示的漢字字符串數(shù)在幾百個時,通常會采用字模庫法。
在硬件層面,此方法占用的存儲空間非常大,不會出現(xiàn)字模冗余。
在操作層面,此方法操作起來非常方便。
但這種方法有個致命的缺陷,其占用的存儲空間太大,不能應用在家用電器、儀器儀表等追求低成本的小型嵌入式產(chǎn)品中。
(3)基于漢字字符串法
這種方法是綜合以上兩種方法的優(yōu)缺點改進而成的。
在硬件層面,此方法所占用的存儲空間根據(jù)用戶所用到的字數(shù)多少而決定,且消除了字模的冗余。
在操作層面,此方法以數(shù)組的形式提供給用戶接口,簡單易用。
此方法只提取產(chǎn)品中所用到的漢字字模,占用存儲空間小,且以數(shù)組的形式提供給用戶調(diào)用的接口,簡單易用,非常適用于家用電器、儀器儀表等存儲容量較小的小型嵌入式系統(tǒng)。
該中文顯示解決方案由兩部分組成:一是運行于宿主機的上位機軟件;二是運行于目標機的具有中文顯示功能的函數(shù)集。
用戶輸入:只需簡單地輸入產(chǎn)品中所用到的字符串即可,如圖1所示,如“嘉興的南湖?!?、“共產(chǎn)黨的誕生地在南湖!”、“我們的大學在嘉興!”。
軟件輸出:軟件根據(jù)用戶的輸入,會按照順序提取出其中無冗余的字——“嘉興的南湖。共產(chǎn)黨誕生地在!我們大學”,之后生成專用的字模庫、字符串所對應的字模數(shù)組,這些數(shù)據(jù)存放在軟件生成的test.h文件中。
圖1 上位機軟件
如圖2所示,該截圖截自于該函數(shù)集的頭文件。為盡可能地簡化使用步驟,將該中文顯示解決方案的配置及函數(shù)聲明放在了同一個頭文件中,限于篇幅,截圖只顯示了16×16的漢字顯示及相關函數(shù),相應的32×32、48×48顯示函數(shù)等也包含在該頭文件中。
圖2 函數(shù)集頭文件截圖
配置部分及中文顯示函數(shù)集如下:
考慮到ASCII的字模數(shù)據(jù)僅為漢字的一半,故從上位機軟件和目標機程序兩方面著手,解決漢字和ASCII交叉顯示及間距計算等問題。例如16×16的漢字字模數(shù)據(jù)為32個字節(jié),而16×16的ASCII碼數(shù)據(jù)為16個字節(jié),因而在上位機軟件產(chǎn)生字模數(shù)據(jù)時,在ASCII數(shù)據(jù)前加16個0x00,而在目標機程序中判斷并消除這16個0x00。這樣既達到了半字顯示的目的,又解決了ASCII碼字模數(shù)組與漢字字模數(shù)組間不相容的問題。
有了前面的介紹,大家對該中文顯示解決方案應該有了比較清晰的了解。接下來介紹一下其使用方法。
①用戶首先要實現(xiàn)液晶屏的畫點功能。也就是說需實現(xiàn)兩個函數(shù)的功能:液晶屏初始化函數(shù)和畫點函數(shù)。
②將該解決方案提供的3 個文件添加到工程文件中,如圖3所示。
圖3 工程文件
③在上位機軟件中,輸入項目中所需顯示的所有字符串,并點擊“取字模”按鈕生成特定的字模庫。
④將上位機生成的test.h中的數(shù)據(jù)復制到font.h文件中。
⑤調(diào)用該方案提供的相關顯示函數(shù)即可完成中文顯示功能。
該GUI中文顯示解決方案專為LED 廣告屏、家用電器、儀器儀表等追求低成本、高性能的小型嵌入式系統(tǒng)而設計。有如下優(yōu)點:
①無需導入整個漢字庫,占用存儲空間大大減小。
②用戶使用方便,只需輸入應用中所需的字符串即可。
③每個漢字的字模只定義一次,消除不必要的冗余。
④每個字符數(shù)組后有對應的字符串注釋,方便用戶查找調(diào)用。
⑤不依賴于其他GUI,易于移植,可獨立運行。
⑥可選擇實現(xiàn)16×16、32×32、48×48這3種漢字及ASCII碼的交叉顯示。
編者注:源程序見本刊網(wǎng)站www.mesnet.com.cn。
[1]Ian F Darwin.Java經(jīng)典實例[M].2版.關麗容,張曉坤譯.北京:中國電力出版社,2009.
[2]林信良.Java JDK6 學習筆記[M].北京:清華大學出版社,2007.
[3]王田苗.嵌入式系統(tǒng)設計與實例開發(fā)——基于ARM 微處理器與μC/OS-II實時操作系統(tǒng)[M].北京:清華大學出版社,2003:103-135.
[4]任哲.嵌入式操作系統(tǒng)基礎μC/OS-II和Linux[M].北京:北京航空航天大學出版社,2006:52.