硬件漢字庫設(shè)計(jì)原理與應(yīng)用
如果有新的漢字加入那么漢字庫的維護(hù)也成問題,而我們?nèi)粘I畹囊恍┦殖止ぞ呱先缡謾C(jī)快譯通等等它們可以任意輸入漢字不僅靈活性大而且檢索速度快,這其中的主要原因就是在這些設(shè)備中固化了硬件漢字庫。而半導(dǎo)體技術(shù)的發(fā)展使得大容量FLASH ROM 的價(jià)格大大下降從而使用硬件漢字庫的儀器設(shè)備的成本大大下降,因此越來越多的技術(shù)開發(fā)人員開始關(guān)注起硬件漢字庫希望能在自己開發(fā)的設(shè)備中設(shè)計(jì)并使用硬件漢字庫,達(dá)到加快產(chǎn)品開發(fā)速度降低軟件成本的目的。
一硬件漢字庫相關(guān)知識
1 漢字機(jī)內(nèi)碼國標(biāo)碼和區(qū)位碼
在PC 機(jī)的文本文件中,漢字是以機(jī)內(nèi)碼的形式存儲的。每個漢字占用兩個字節(jié)長度為了和ASCII碼區(qū)別,范圍從十六進(jìn)制的0A1H 開始小于80H 的為ASCII 碼,將機(jī)內(nèi)碼每個字節(jié)的最高位屏蔽掉,再以十六進(jìn)制的形式顯示出來則為國標(biāo)碼。將機(jī)內(nèi)碼的每個字節(jié)各減去0A0H 再以十進(jìn)制顯示出來,即為該漢字的區(qū)位碼。例如"國"字的機(jī)內(nèi)碼國標(biāo)碼和區(qū)位碼如表1 所示
表1 國字的機(jī)內(nèi)碼國標(biāo)碼和區(qū)位碼
類別數(shù)值高位字節(jié)低位字節(jié)
機(jī)內(nèi)碼B9FAH 1 0 1 1 1 0 0 1 1 1 1 1 1 0 1 0
國標(biāo)碼397AH 0 0 1 1 1 0 0 1 0 1 1 1 1 0 1 0
區(qū)位碼195AH 0 0 0 1 1 0 0 1 0 1 0 1 1 0 1 0
即區(qū)位碼機(jī)內(nèi)碼0A0AOH 就國字而言其區(qū)位碼和機(jī)內(nèi)碼的關(guān)系為
195AH 區(qū)位碼0B9FAH 機(jī)內(nèi)碼0A0A0H
記住這個關(guān)系是我們理解下面有關(guān)程序的關(guān)鍵
2 國標(biāo)漢字字符集與區(qū)位碼
根據(jù)對漢字使用頻率程度的研究可把漢字分成高頻字約100 個常用字約3000 個次常用
字約4000 字罕見字約8000 個和死字約45000 個即正常使用的漢字達(dá)15000 個。我國1981
年公布了通訊用漢字字符集基本集及其交換碼標(biāo)準(zhǔn)GB2312-80 方案,把高頻字常用字和次常用字集合成漢字基本字符集共6763 個,在該字符集中按漢字使用的頻度又將其分為一級漢字3755 個,按拼音排序二級漢字3008 個,按部首排序再加上西文字母數(shù)字圖形符號等700 個,國家標(biāo)準(zhǔn)的漢字字符集GB2312-80 在漢字操作系統(tǒng)中是以漢字庫的形式提供的漢字庫結(jié)構(gòu)作了統(tǒng)一規(guī)定如圖1 所示
此主題相關(guān)圖片如下:
即將字庫分成94 個區(qū)每個區(qū)有94 個漢字,以位作區(qū)別每一個漢字在漢字庫中有確定的區(qū)和位。編號用兩個字節(jié)這就是所謂的區(qū)位碼。區(qū)位碼的第一個字節(jié)表示區(qū)號,第二個字節(jié)表示位號,因而只要知道了區(qū)位碼就可知道該漢字在字庫中的地址。每個漢字在字庫中是以點(diǎn)陣字模形式存儲的,如一般采用16x16 點(diǎn)陣形式,每個點(diǎn)用一個二進(jìn)制位表示,存1 的點(diǎn)當(dāng)顯示時可以在屏上顯示一個亮點(diǎn),存0 的點(diǎn)則在屏上不顯示,這樣就把存某字的16 16 點(diǎn)陣信息直接用來在顯示器上按上述原則顯示,則將出現(xiàn)對應(yīng)的漢字如一個國字的16 16 點(diǎn)陣字模如圖2 所示。當(dāng)用存儲單元存儲該字模信息時將需32 個字節(jié)地址在圖2 的右邊寫出了該字模對應(yīng)的字節(jié)值
此主題相關(guān)圖片如下:
3 液晶顯示模塊特性與字模數(shù)據(jù)
漢字顯示是國內(nèi)應(yīng)用圖形液晶顯示模塊的目的之一,目前對硬件漢字庫比較關(guān)心的技術(shù)人員大多是想將其應(yīng)用到圖形點(diǎn)陣液晶顯示器中,但目前有關(guān)液晶顯示的資料大多數(shù)是介紹通過字模軟件取出的點(diǎn)陣數(shù)據(jù)是如何送往液晶顯示器的,因此作者在此作一下比較要在液晶屏幕上顯示出這個點(diǎn)陣圖形需要將相應(yīng)的點(diǎn)陣數(shù)據(jù)送入液晶顯示驅(qū)動器,但對于不同的液晶顯示驅(qū)動器要顯示同一圖形所需要送入的數(shù)據(jù)排列順序可能不同,作者曾經(jīng)使用過內(nèi)置D61202U 液晶顯示驅(qū)動控制器和內(nèi)置T6963C 液晶顯示驅(qū)動控制器的液晶顯示模塊,同樣是顯示16 16 點(diǎn)陣的國
字則需要的點(diǎn)陣數(shù)據(jù)如下
HD61202U
DB 000H,0FEH,002H,00AH,08AH,08AH,08AH,0FAH
DB 08AH,08AH,08AH,00AH,002H,0FEH,000H,000H
DB 000H,0FFH,040H,048H,048H,048H,048H,04FH
DB 048H,049H,04EH,048H,040H,0FFH,000H,000H
由于HD61202U 顯示存儲器的特性不能將計(jì)算機(jī)內(nèi)的漢字庫提出直接使用,需要將其旋轉(zhuǎn)90 度后再寫入,也就是有些字模軟件如zimo22.exe 可到www.c51bbs.com上免費(fèi)下載設(shè)置為豎向倒序取模后所得的數(shù)據(jù)其生成字庫的格式是前16 個字節(jié)為上半部16 8 點(diǎn)陣字模數(shù)據(jù)后16 個字節(jié)為下半部16x8 點(diǎn)陣字模數(shù)據(jù),讀者如果與圖2 中的相應(yīng)數(shù)據(jù)作比較可以看出如果僅僅從數(shù)據(jù)上是看不出兩者的聯(lián)系的,如果在這種液晶顯示器上要使用硬件漢字庫則讀出的點(diǎn)陣信息必須經(jīng)過處理方可送出顯示增加了使用難度
T6963C
DB 000H,000H,07FH,0FCH,040H,004H,05FH,0F4H
DB 041H,004H,041H,004H,041H,004H,04FH,0E4H
DB 041H,044H,041H,024H,041H,024H,05FH,0F4H
DB 040H,004H,040H,004H,07FH,0FCH,040H,004H
這些數(shù)據(jù)也是通過字模軟件得出的讀者再與圖2 中的32 個數(shù)據(jù)相比較可以看出兩者在數(shù)值和排列順序上都是一致的,正是這種特性使得筆者選擇了內(nèi)置T6963C 的液晶顯示模塊作為論述開發(fā)硬件漢字庫的例子
二漢字庫的制作
在本節(jié)中筆者將論述將16 16 點(diǎn)陣的宋體漢字庫燒錄到256KB 的存儲器中的具體方法,這也是讀者比較關(guān)心的問題。本例中使用了AT29C020 該產(chǎn)品是ATMEL 公司生產(chǎn)的高達(dá)256KB 的FLASH ROM ,讀者也可以使用其它容量不小于256KB 的產(chǎn)品,但在具體電路設(shè)計(jì)時應(yīng)注意引腳定義和邏輯關(guān)系,并在燒錄時選擇相應(yīng)的型號UCDOS 軟件有一個名字為HZK16 的文件,這就是16 16 的國標(biāo)漢字點(diǎn)陣文件,在該文件中按漢字區(qū)位碼從小到大依次存有:國標(biāo)區(qū)位碼中的所有漢字,每個漢字占用32 格字節(jié),每個區(qū)為94 個漢字,如果顯示其屬性可以看出其大小為262KB 。當(dāng)寫入AT29C020A 時可以將多于256KB 的部分截去,實(shí)際上在國標(biāo)漢字點(diǎn)陣字庫中二級漢字排到第87 區(qū),從第88 區(qū)開始就是空白,所以將多余部分截去不會影響實(shí)際使用。在實(shí)際操作中硬件漢字庫的制作和普通的程序存儲器的編程沒什么不同,注意將HZK16 文件調(diào)入時要使用二進(jìn)制方式打開編程并校驗(yàn)成功后,即可將存儲器取下備用,這樣一個硬件漢字庫就制作好了。針對不同的應(yīng)用讀者也可以選用其它大容量甚至是串行數(shù)據(jù)存儲器從而可以擴(kuò)展硬件漢字庫的使用范圍。在此也一并向大家推薦容量為512KB 甚至更大的存儲器除了可以存儲全部的國標(biāo)漢字外還可以存儲8 16 的ASCII 碼點(diǎn)陣數(shù)據(jù)以及漢字語句編碼數(shù)據(jù),使用起來更加方便。串行數(shù)據(jù)存儲器如AT45DB041B 等特點(diǎn)是占用口線少體積小和成本低如果對于速度要求不是很高的場合非常適宜
三硬件漢字庫使用電路
在本節(jié)中筆者使用PHILIPS 公司的產(chǎn)品P89C51RD2 作為主控CPU ,使用內(nèi)置T6963 控制器的240x128 點(diǎn)陣圖形液晶顯示器并結(jié)合硬件漢字庫的使用,將一部3 萬多字的小說嵌入其中,開機(jī)后就可以閱讀小說。P89C51RD2 是PHILIPS 公司于2001 年發(fā)布的一款非常優(yōu)秀的單片機(jī),該單片機(jī)是基于8 位80C51單片機(jī)的派生產(chǎn)品,它在完全保留80C51 指令系統(tǒng)和硬件結(jié)構(gòu)的大框架外發(fā)生了多方面的加強(qiáng)擴(kuò)展翻新和創(chuàng)新,P89C51RD2 將原有的對外數(shù)據(jù)和程序存儲器的16 位尋址機(jī)制加以利用,把片上的RAM 擴(kuò)展到1K 字節(jié),片上的FLASH EPROM 擴(kuò)展到64K 字節(jié),由于一個漢字的內(nèi)碼占用兩個字節(jié),所以1024 字節(jié)可以存儲512 個漢字所以64KB 的閃存可以存儲3 萬多漢字。
本系統(tǒng)使用了Microtips Technology Inc.公司生產(chǎn)的內(nèi)置Toshiba 公司生產(chǎn)的T6963C 的液晶顯示器型號為MTG-F24128CMNHSCW 具有CCFL 背光相關(guān)接口信息如下
此主題相關(guān)圖片如下:
此主題相關(guān)圖片如下:
硬件設(shè)計(jì)說明
由于AT29C020 的容量為256KB 而80C51 系列微控制器只能管理64KB 的數(shù)據(jù)空間所以可以將
AT29C020 分成8 頁每頁32KB 占單片機(jī)系統(tǒng)數(shù)據(jù)空間的0000 7FFFH 剩余32KB 空間為單片機(jī)系統(tǒng)的其它存儲器和外設(shè)
A15 反相后作為液晶顯示器的片選LCD/CS P1.5 是控制液晶顯示器正顯和反顯的該液晶顯示器的
復(fù)位電平為低電平與P89C51RD2 正好相反
評論