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