硬件漢字庫設(shè)計原理與應(yīng)用_第1頁
硬件漢字庫設(shè)計原理與應(yīng)用_第2頁
硬件漢字庫設(shè)計原理與應(yīng)用_第3頁
硬件漢字庫設(shè)計原理與應(yīng)用_第4頁
硬件漢字庫設(shè)計原理與應(yīng)用_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、硬件漢字庫設(shè)計原理與應(yīng)用          摘要:本文論述了硬件漢字庫的基本原理和具體制作步驟并利用P89C51RD2 作為主控CPU 240x128點(diǎn)陣的液晶和硬件漢字庫將一部科幻小說嵌入其中開機(jī)后即可閱讀文章中給出了具體的電路和相應(yīng)的軟件關(guān)鍵詞:硬件漢字庫 液晶顯示 P89C51RD2隨著液晶顯示技術(shù)的發(fā)展和應(yīng)用,越來越多的開發(fā)人員希望在自己開發(fā)的儀器設(shè)備中使用液晶屏幕來顯示漢字,通常的漢字顯示方式是先根據(jù)所需要的漢字提取漢字點(diǎn)陣如16x16 點(diǎn)陣,將點(diǎn)陣文件存入ROM 形成新的漢字編碼,而在使用時則

2、需要先根據(jù)新的漢字編碼組成語句再由MCU 根據(jù)新編碼提取相應(yīng)的點(diǎn)陣進(jìn)行漢字顯示,在這種顯示方式中如果使用的漢字?jǐn)?shù)量較大或語句較多時,利用漢字的新編碼組成語句將是一件繁瑣而枯燥的工作。如果有新的漢字加入那么漢字庫的維護(hù)也成問題,而我們?nèi)粘I畹囊恍┦殖止ぞ呱先缡謾C(jī)快譯通等等它們可以任意輸入漢字不僅靈活性大而且檢索速度快,這其中的主要原因就是在這些設(shè)備中固化了硬件漢字庫。而半導(dǎo)體技術(shù)的發(fā)展使得大容量FLASH ROM 的價格大大下降從而使用硬件漢字庫的儀器設(shè)備的成本大大下降,因此越來越多的技術(shù)開發(fā)人員開始關(guān)注起硬件漢字庫希望能在自己開發(fā)的設(shè)備中設(shè)計并使用硬件漢字庫,達(dá)到加快產(chǎn)品開發(fā)速度降低軟件成本

3、的目的。一硬件漢字庫相關(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

4、 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 方案,把高頻字常用字和次常用字集合成漢字基本字

5、符集共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)用一個

6、二進(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ù)是如何送往液晶顯示器的,因此作者在此作一下比較要在液晶屏幕上顯示出

7、這個點(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ù)如下HD61202UDB 000H,0FEH,002H,00AH,08AH,08AH,08AH,0FAHDB 08AH,08AH,08AH,00AH,002H,0FEH,000H,000HDB 000H,0FFH,040H,048H,048H,048H,048H,04FHDB 048H,049H,04EH,048H,0

8、40H,0FFH,000H,000H由于HD61202U 顯示存儲器的特性不能將計算機(jī)內(nèi)的漢字庫提出直接使用,需要將其旋轉(zhuǎn)90 度后再寫入,也就是有些字模軟件如zimo22.exe 可到上免費(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)過處理方可送出顯示增加了使用難度T6963CDB 000H,000H,07FH,0FCH,040H,004H,05FH,0F4

9、HDB 041H,004H,041H,004H,041H,004H,04FH,0E4HDB 041H,044H,041H,024H,041H,024H,05FH,0F4HDB 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)心的問題。本例中使用了AT29C0

10、20 該產(chǎn)品是ATMEL 公司生產(chǎn)的高達(dá)256KB 的FLASH ROM ,讀者也可以使用其它容量不小于256KB 的產(chǎn)品,但在具體電路設(shè)計時應(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 的部分截去,實際上在國標(biāo)漢字點(diǎn)陣字庫中二級漢字排到第87 區(qū),從第88 區(qū)開始就是空白,所以將多余部分截去不會影響實

11、際使用。在實際操作中硬件漢字庫的制作和普通的程序存儲器的編程沒什么不同,注意將HZK16 文件調(diào)入時要使用二進(jìn)制方式打開編程并校驗成功后,即可將存儲器取下備用,這樣一個硬件漢字庫就制作好了。針對不同的應(yīng)用讀者也可以選用其它大容量甚至是串行數(shù)據(jù)存儲器從而可以擴(kuò)展硬件漢字庫的使用范圍。在此也一并向大家推薦容量為512KB 甚至更大的存儲器除了可以存儲全部的國標(biāo)漢字外還可以存儲8 16 的ASCII 碼點(diǎn)陣數(shù)據(jù)以及漢字語句編碼數(shù)據(jù),使用起來更加方便。串行數(shù)據(jù)存儲器如AT45DB041B 等特點(diǎn)是占用口線少體積小和成本低如果對于速度要求不是很高的場合非常適宜三硬件漢字庫使用電路在本節(jié)中筆者使用PHIL

12、IPS 公司的產(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)碼占用兩個

13、字節(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è)計說明由于AT29C020 的容量為256KB 而80C51 系列微控制器只能>' target='_blank' class='infotextkey'>管理64KB 的數(shù)據(jù)空間所以可以將AT29C020 分

14、成8 頁每頁32KB 占單片機(jī)系統(tǒng)數(shù)據(jù)空間的0000 7FFFH 剩余32KB 空間為單片機(jī)系統(tǒng)的其它存儲器和外設(shè)A15 反相后作為液晶顯示器的片選LCD/CS P1.5 是控制液晶顯示器正顯和反顯的該液晶顯示器的復(fù)位電平為低電平與P89C51RD2 正好相反四顯示原理與軟件編制在第一節(jié)中我們已經(jīng)得出國字的區(qū)位碼為195AH 換算成十進(jìn)制為2590 ,即國字的點(diǎn)陣位于第25 區(qū)的第90 個字的位置,相當(dāng)于在文件HZK16 中的位置為32 (25-1) 94 (90-1) 75040B 以后的32 個字節(jié)為國的顯示點(diǎn)陣。在本系統(tǒng)中AT29C020 的A15 A17 分別連接到P1 口的P1.0

15、P1.1 和P1.2 作為頁選擇控制A0A14 直接連接單片機(jī)的A0 A14 利用MOVX 指令連續(xù)取32 個字節(jié)送LCD 的相應(yīng)位置就能實現(xiàn)正確的漢字顯示。由于240 128 點(diǎn)陣的LCD 顯示器每行只能顯示15 個漢字16 16 點(diǎn)陣漢字所以可以將需要顯示的語句按15 個漢字為1 行進(jìn)行編寫標(biāo)點(diǎn)符號要用全角不足15 個漢字的則補(bǔ)空格這就是下面軟件中的MENG.ASM 中的內(nèi)容為方便讀者將已經(jīng)通過匯編的有關(guān)程序列出有關(guān)LCD 的具體使用方法請見文獻(xiàn)2主程序C_ADD EQU 8001H 液晶命令地址D_ADD EQU 8000H 液晶數(shù)據(jù)地址DAT1 EQU 30HDAT2 EQU 31HC

16、OM EQU 32HCODE1 EQU 33HCOUNT EQU 34HO_Y EQU 35HO_X EQU 36HCOUNT_X EQU 37HORG 0000HSJMP STARTORG 0030HSTART: MOV SP, #60HORL AUXR, #02H EXTRAM 位1 訪問外部數(shù)據(jù)存儲器ANL AUXR1, #0FH ENBOOT=0 訪問到FLASHCLR P1.5 正顯LCALL INT 初始化設(shè)置子程序LCALL CLEAR 清屏MOV DPTR, #TABLE 科幻小說的開頭MOV O_Y, #00HPUSH DPHPUSH DPLLOOP: POP DPLPOP

17、DPHMOV R0, #0E0H 字模數(shù)據(jù)暫存區(qū)MOV R7, #30 每個漢字為2 字節(jié)每行15 個漢字需30 字節(jié)PRHZ3: CLR AMOVC A, A+DPTRMOV R0,AINC R0INC DPTRDJNZ R7, PRHZ3PUSH DPHPUSH DPLMOV O_X, #00HMOV R0, #0E0HMOV COUNT_X, #15LCD112: MOV 24H, R0 24H 和25H 為暫存緩沖存內(nèi)碼INC R0MOV 25H, R0INC R0MOV A, 24HCLR CSUBB A, #0A1H 轉(zhuǎn)換為區(qū)位碼MOV 24H, AMOV A, 25HCLR CS

18、UBB A, #0A1HMOV 25H, AMOV A, R0PUSH ACCLCALL DPONHZ 取字模數(shù)據(jù)并存入0C0H 開始的寄存器LCALL WRI_CC 送出顯示POP ACCMOV R0, AINC O_XINC O_XDJNZ COUNT_X,LCD112 1 行漢字送完跳轉(zhuǎn)MOV A, O_YADD A, #10HMOV O_Y, AMOV A, O_YCJNE A, #80H,LOOPMOV O_Y, #00HLCALL DELAY 送完1 屏后延長時間以便于閱讀LCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAY

19、POP DPLPOP DPHPUSH DPHPUSH DPLMOV A, DPHSUBB A, #0DFH 小說結(jié)尾地址如果是結(jié)尾則復(fù)位重新開始JNC RST1JMP LOOPRST1: MOV A, DPLSUBB A, #2AHJNC RSTJMP LOOPRST: JMP STARTDPONHZ: MOV A, 24H 取字模數(shù)據(jù)至0C0H 開始的內(nèi)部存儲區(qū)MOV B, #94MUL ABADD A, 25HMOV 25H, ACLR AADDC A, BMOV 24H, ACLR CRRC ACLR CRRC AMOV P1, ALCALL RL245CLR 24H.7MOV DPH,

20、 24HMOV DPL, 25HMOV R2, #32MOV R1, #0C0HDPHZ2: MOVX A, DPTRINC DPTRMOV R1, AINC R1DJNZ R2, DPHZ2RETRL245: MOV R7, #05 24H25H 左移5 位RLL1: CLR CMOV A, 25HRLC AMOV 25H,AMOV A, 24HRLC AMOV 24H, ADJNZ R7, RLL1RETR_ST: MOV DPTR, #C_ADD 讀狀態(tài)MOVX A, DPTRRETST01: LCALL R_ST 讀寫一數(shù)據(jù)前JNB ACC.0, ST01JNB ACC.1, ST01

21、RETST2: LCALL R_ST 連續(xù)讀前JNB ACC.2, ST2RETST3: LCALL R_ST 連續(xù)寫前JNB ACC.3, ST3RETST6: LCALL R_STJB ACC.6, ERRRETERR: LJMP ST6PR1: LCALL ST01MOV A, DAT1LCALL PR13PR11: LCALL ST01MOV A, DAT2LCALL PR13PR12: LCALL ST01MOV A, COMLJMP PR14PR13: MOV DPTR, #D_ADDPR14: MOVX DPTR, ARETPR2: LCALL ST01MOV DPTR, #D_

22、ADDMOVX A, DPTRMOV DAT2, ARETINT: MOV DAT1, #00H 初始化設(shè)置子程序MOV DAT2, #00HMOV COM, #40HLCALL PR1MOV DAT1, #20HMOV DAT2, #00HMOV COM, #41HLCALL PR1MOV DAT1, #00HMOV DAT2, #08HMOV COM, #42HLCALL PR1MOV DAT1, #20HMOV DAT2, #00HMOV COM, #43HLCALL PR1MOV COM, #0A7HLCALL PR12MOV COM, #80HLCALL PR12MOV COM, #

23、9CHLCALL PR12RETCLEAR: MOV DAT1, #00H 設(shè)置顯示存儲器首地址MOV DAT2, #00HMOV COM, #24HLCALL PR1MOV R3, #00H 設(shè)置循環(huán)量8K 字節(jié)MOV R4, #20HMOV COM, #0B0H 設(shè)置自動寫方式LCALL PR12CLEAR1: LCALL ST3 判狀態(tài)位S2MOV A, #00H 置數(shù)據(jù)0LCALL PR13 寫入數(shù)據(jù)DJNZ R3, CLEAR1 循環(huán)DJNZ R4, CLEAR1MOV COM, #0B2H 設(shè)置自動寫結(jié)束指令LCALL PR12RETWRI_CC: PUSH O_X 將字模數(shù)據(jù)送出

24、顯示PUSH O_YMOV A, O_YMOV B, #20HMUL ABADD A, O_XMOV O_X, AMOV A, BADDC A, #08HMOV O_Y, AMOV R0, #0C0HMOV COUNT, #10HWRI_CC1:MOV DAT1, O_XMOV DAT2, O_YMOV COM, #24HLCALL PR1MOV A, R0MOV DAT2,AINC R0MOV A, R0INC R0MOV DAT1, AMOV COM, #0C0HLCALL PR11MOV DAT2, DAT1LCALL PR11MOV A, #20HADD A, O_XMOV O_X,

25、ACLR AADDC A, O_YMOV O_Y, ADJNZ COUNT, WRI_CC1POP O_YPOP O_XRETDL1MS: MOV R4,#0C0HDLY1: NOPDJNZ R4,DLY1RETDL10MS: CALL DL1MSCALL DL1MSCALL DL1MSCALL DL1MSCALL DL1MSCALL DL1MSCALL DL1MSCALL DL1MSCALL DL1MSCALL DL1MSRETDELAY: MOV R5,#0C8H ;延時1 秒DL5MS: MOV R4,#0FAHDLY: NOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOP

26、DJNZ R4,DLYDJNZ R5,DL5MSRETINCLUDE 'MENG.ASM'ENDMENG.ASM 的開頭部分如下所示由于該篇科幻小說太長故只列出了開頭每行為15 個漢字標(biāo)點(diǎn)符號全部采用全角TABLE: DB ' 第一章單杰圣士'DB ' 邦托烏是矗立大地的最偉'DB '大的都會地球上>' target='_blank' class='infotextkey'>歷史最悠久的城'DB '市自三千二百五十年前地球上'DB '所有的民族由>' target='_blank' class='infotextkey'>經(jīng)濟(jì)共同體發(fā)展至政'DB '治大統(tǒng)一的國家代表中央權(quán)力核'DB '心的聯(lián)邦政府便在這從未有過的'DB '宏偉都會里成立'DB ' 邦托烏的存在代表了舊'DB '有文明的消失再沒有國界宗教'DB ' 民族這類使人世紛爭永無休止的'DB '因素存在著'DB ' 經(jīng)過毀滅性的戰(zhàn)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論