基于單片機(jī)的智能終端中漢字顯示的處理
GB2312在此基礎(chǔ)上對矩陣進(jìn)行劃分,分為94個區(qū),每區(qū)94位,x定義了該字所在的行號,y表示該字所在的位號,x和y均以二進(jìn)制或十六進(jìn)制表示。這就是“區(qū)位碼”,例如:“啊”字的區(qū)位碼為(0x10,0x01),表示位于16區(qū)第一位。于是漢字庫中的字模存放位置(相對于字庫文件頭的偏移地址)可以由區(qū)位碼計算得到:偏移地址=區(qū)碼×94+位碼。那么“啊”字的字模相對于字庫文件頭的偏移地址等于16×94+1=1505(十進(jìn)制表示)。
但是許多低位數(shù)字已被其它領(lǐng)域所占用,比如:0x06表示通信確認(rèn)回答標(biāo)志。為了不與已經(jīng)存在的信碼相混淆,GB2312在每個區(qū)位碼上加上0x20,這樣形成的碼叫國標(biāo)碼。例如:“啊”字的國標(biāo)碼為(0x30,0x21)。
由于通用的ASCII字符的最高位為0,為了在計算機(jī)內(nèi)部和之間傳輸漢字時可以和ASCII碼區(qū)別開來,將表示漢字的兩個字節(jié)的最高位都置1。這樣,相當(dāng)于在國標(biāo)碼基礎(chǔ)上高低字節(jié)同時加了0x80,這就是上面提到的內(nèi)碼。比如:“啊”字的內(nèi)碼為(0xB0,0xA1)。在計算機(jī)內(nèi)部,用內(nèi)碼來唯一標(biāo)識一個漢字。在程序中,通過調(diào)用系統(tǒng)函數(shù)取得某個漢字的ASCII字符表示,也就得到了這個漢字的內(nèi)碼。
在明白了內(nèi)碼和區(qū)位碼之間的關(guān)系后,我們可以根據(jù)某個漢字的內(nèi)碼計算得到該漢字的區(qū)位碼;再通過區(qū)位碼計算得到該漢字的字模在漢字庫表中的偏移地址;從此地址開始的連續(xù)32個字節(jié)就是該漢字的字模信息。
3.2 字模轉(zhuǎn)換
圖1中所示的漢字顯示與字模存放的關(guān)系是PC機(jī)中的字模存儲格式。而在單片機(jī)系統(tǒng)中,選擇不同的液晶驅(qū)動器要求有不同的字模存儲方式。比如我們在實(shí)際應(yīng)用中,使用的是清華蓬遠(yuǎn)科貿(mào)公司的HD61202液晶驅(qū)動器。圖5 指示了HD61202液晶驅(qū)動器所要求的字模存放與漢字顯示的關(guān)系。圖中標(biāo)明了標(biāo)出了第1、第2個字節(jié)和第31、第32個字節(jié)的存放位置。
造成漢字顯示與字模存放有這樣關(guān)系是因為不同的液晶驅(qū)動器有不同的掃描顯示方式。所以,為了能夠?qū)h字正確的顯示出來,針對不同的液晶驅(qū)動要做相應(yīng)的字模轉(zhuǎn)化。字模轉(zhuǎn)化可以自編一個轉(zhuǎn)化函數(shù)來實(shí)現(xiàn),在寫入終端字庫下載文件前將32個字節(jié)的字模按位轉(zhuǎn)化為需要的格式,再按字節(jié)順序存入下載文件。
經(jīng)過轉(zhuǎn)化之后,“大”字的字模(32個字節(jié))變成:(32,32,32,32,32,32,160,127,0,64,64,32,16,12,3,0,160,32,32,32,32,48,32,0,1,6,8,16,32,96,32,0), 這就是存放在終端下載字庫中的字模格式。
參考資料:
1:《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》 何立民 北京航空航天大學(xué)出版社 1994
2:《漢字編碼標(biāo)準(zhǔn)與識別》
評論