新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于單片機(jī)的智能終端中漢字顯示的處理

基于單片機(jī)的智能終端中漢字顯示的處理

作者: 時(shí)間:2012-03-16 來源:網(wǎng)絡(luò) 收藏

GB2312在此基礎(chǔ)上對矩陣進(jìn)行劃分,分為94個(gè)區(qū),每區(qū)94位,x定義了該字所在的行號,y表示該字所在的位號,x和y均以二進(jìn)制或十六進(jìn)制表示。這就是“區(qū)位碼”,例如:“啊”字的區(qū)位碼為(0x10,0x01),表示位于16區(qū)第一位。于是庫中的字模存放位置(相對于字庫文件頭的偏移地址)可以由區(qū)位碼計(jì)算得到:偏移地址=區(qū)碼×94+位碼。那么“啊”字的字模相對于字庫文件頭的偏移地址等于16×94+1=1505(十進(jìn)制表示)。

但是許多低位數(shù)字已被其它領(lǐng)域所占用,比如:0x06表示通信確認(rèn)回答標(biāo)志。為了不與已經(jīng)存在的信碼相混淆,GB2312在每個(gè)區(qū)位碼上加上0x20,這樣形成的碼叫國標(biāo)碼。例如:“啊”字的國標(biāo)碼為(0x30,0x21)。

由于通用的ASCII字符的最高位為0,為了在計(jì)算機(jī)內(nèi)部和之間傳輸時(shí)可以和ASCII碼區(qū)別開來,將表示的兩個(gè)字節(jié)的最高位都置1。這樣,相當(dāng)于在國標(biāo)碼基礎(chǔ)上高低字節(jié)同時(shí)加了0x80,這就是上面提到的內(nèi)碼。比如:“啊”字的內(nèi)碼為(0xB0,0xA1)。在計(jì)算機(jī)內(nèi)部,用內(nèi)碼來唯一標(biāo)識一個(gè)漢字。在程序中,通過調(diào)用系統(tǒng)函數(shù)取得某個(gè)漢字的ASCII字符表示,也就得到了這個(gè)漢字的內(nèi)碼。

在明白了內(nèi)碼和區(qū)位碼之間的關(guān)系后,我們可以根據(jù)某個(gè)漢字的內(nèi)碼計(jì)算得到該漢字的區(qū)位碼;再通過區(qū)位碼計(jì)算得到該漢字的字模在漢字庫表中的偏移地址;從此地址開始的連續(xù)32個(gè)字節(jié)就是該漢字的字模信息。

3.2 字模轉(zhuǎn)換

圖1中所示的漢字與字模存放的關(guān)系是PC機(jī)中的字模存儲(chǔ)格式。而在系統(tǒng)中,選擇不同的液晶驅(qū)動(dòng)器要求有不同的字模存儲(chǔ)方式。比如我們在實(shí)際應(yīng)用中,使用的是清華蓬遠(yuǎn)科貿(mào)公司的HD61202液晶驅(qū)動(dòng)器。圖5 指示了HD61202液晶驅(qū)動(dòng)器所要求的字模存放與漢字的關(guān)系。圖中標(biāo)明了標(biāo)出了第1、第2個(gè)字節(jié)和第31、第32個(gè)字節(jié)的存放位置。

45.gif

造成漢字與字模存放有這樣關(guān)系是因?yàn)椴煌囊壕?qū)動(dòng)器有不同的掃描顯示方式。所以,為了能夠?qū)h字正確的顯示出來,針對不同的液晶驅(qū)動(dòng)要做相應(yīng)的字模轉(zhuǎn)化。字模轉(zhuǎn)化可以自編一個(gè)轉(zhuǎn)化函數(shù)來實(shí)現(xiàn),在寫入終端字庫下載文件前將32個(gè)字節(jié)的字模按位轉(zhuǎn)化為需要的格式,再按字節(jié)順序存入下載文件。

經(jīng)過轉(zhuǎn)化之后,“大”字的字模(32個(gè)字節(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:《應(yīng)用系統(tǒng)設(shè)計(jì)》 何立民 北京航空航天大學(xué)出版社 1994
2:《漢字編碼標(biāo)準(zhǔn)與識別》


上一頁 1 2 3 4 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉