機電之家資源網(wǎng)
單片機首頁|單片機基礎|單片機應用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
硬件漢字庫設計原理與應用
硬件漢字庫設計原理與應用
 更新時間:2008-7-26 20:48:26  點擊數(shù):5
【字體: 字體顏色

摘要:本文論述了硬件漢字庫的基本原理和具體制作步驟并利用P89C51RD2 作為主控CPU 240x128點陣的液晶和硬件漢字庫將一部科幻小說嵌入其中開機后即可閱讀文章中給出了具體的電路和相應的軟件
關鍵詞:硬件漢字庫 液晶顯示 P89C51RD2
_______________________
隨著液晶顯示技術的發(fā)展和應用 , 越來越多的開發(fā)人員希望在自己開發(fā)的儀器設備中使用液晶屏幕來顯示漢字,通常的漢字顯示方式是先根據(jù)所需要的漢字提取漢字點陣如16x16 點陣,將點陣文件存入ROM 形成新的漢字編碼,而在使用時則需要先根據(jù)新的漢字編碼組成語句再由MCU 根據(jù)新編碼提取相應的點陣進行漢字顯示,在這種顯示方式中如果使用的漢字數(shù)量較大或語句較多時,利用漢字的新編碼組成語句將是一件繁瑣而枯燥的工作。
如果有新的漢字加入那么漢字庫的維護也成問題,而我們?nèi)粘I畹囊恍┦殖止ぞ呱先缡謾C快譯通等等它們可以任意輸入漢字不僅靈活性大而且檢索速度快,這其中的主要原因就是在這些設備中固化了硬件漢字庫。而半導體技術的發(fā)展使得大容量FLASH ROM 的價格大大下降從而使用硬件漢字庫的儀器設備的成本大大下降,因此越來越多的技術開發(fā)人員開始關注起硬件漢字庫希望能在自己開發(fā)的設備中設計并使用硬件漢字庫,達到加快產(chǎn)品開發(fā)速度降低軟件成本的目的。

一硬件漢字庫相關知識

1 漢字機內(nèi)碼國標碼和區(qū)位碼
在PC 機的文本文件中,漢字是以機內(nèi)碼的形式存儲的。每個漢字占用兩個字節(jié)長度為了和ASCII碼區(qū)別,范圍從十六進制的0A1H 開始小于80H 的為ASCII 碼,將機內(nèi)碼每個字節(jié)的最高位屏蔽掉,再以十六進制的形式顯示出來則為國標碼。將機內(nèi)碼的每個字節(jié)各減去0A0H 再以十進制顯示出來,即為該漢字的區(qū)位碼。例如"國"字的機內(nèi)碼國標碼和區(qū)位碼如表1 所示
表1 國字的機內(nèi)碼國標碼和區(qū)位碼
類別數(shù)值高位字節(jié)低位字節(jié)
機內(nèi)碼B9FAH 1 0 1 1 1 0 0 1 1 1 1 1 1 0 1 0
國標碼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ū)位碼機內(nèi)碼0A0AOH 就國字而言其區(qū)位碼和機內(nèi)碼的關系為
195AH 區(qū)位碼0B9FAH 機內(nèi)碼0A0A0H
記住這個關系是我們理解下面有關程序的關鍵

2 國標漢字字符集與區(qū)位碼
根據(jù)對漢字使用頻率程度的研究可把漢字分成高頻字約100 個常用字約3000 個次常用
字約4000 字罕見字約8000 個和死字約45000 個即正常使用的漢字達15000 個。我國1981
年公布了通訊用漢字字符集基本集及其交換碼標準GB2312-80 方案,把高頻字常用字和次常用字集合成漢字基本字符集共6763 個,在該字符集中按漢字使用的頻度又將其分為一級漢字3755 個,按拼音排序二級漢字3008 個,按部首排序再加上西文字母數(shù)字圖形符號等700 個,國家標準的漢字字符集GB2312-80 在漢字操作系統(tǒng)中是以漢字庫的形式提供的漢字庫結構作了統(tǒng)一規(guī)定如圖1 所示

此主題相關圖片如下:

即將字庫分成94 個區(qū)每個區(qū)有94 個漢字,以位作區(qū)別每一個漢字在漢字庫中有確定的區(qū)和位。編號用兩個字節(jié)這就是所謂的區(qū)位碼。區(qū)位碼的第一個字節(jié)表示區(qū)號,第二個字節(jié)表示位號,因而只要知道了區(qū)位碼就可知道該漢字在字庫中的地址。每個漢字在字庫中是以點陣字模形式存儲的,如一般采用16x16 點陣形式,每個點用一個二進制位表示,存1 的點當顯示時可以在屏上顯示一個亮點,存0 的點則在屏上不顯示,這樣就把存某字的16 16 點陣信息直接用來在顯示器上按上述原則顯示,則將出現(xiàn)對應的漢字如一個國字的16 16 點陣字模如圖2 所示。當用存儲單元存儲該字模信息時將需32 個字節(jié)地址在圖2 的右邊寫出了該字模對應的字節(jié)值

此主題相關圖片如下:

3 液晶顯示模塊特性與字模數(shù)據(jù)
漢字顯示是國內(nèi)應用圖形液晶顯示模塊的目的之一,目前對硬件漢字庫比較關心的技術人員大多是想將其應用到圖形點陣液晶顯示器中,但目前有關液晶顯示的資料大多數(shù)是介紹通過字模軟件取出的點陣數(shù)據(jù)是如何送往液晶顯示器的,因此作者在此作一下比較要在液晶屏幕上顯示出這個點陣圖形需要將相應的點陣數(shù)據(jù)送入液晶顯示驅動器,但對于不同的液晶顯示驅動器要顯示同一圖形所需要送入的數(shù)據(jù)排列順序可能不同,作者曾經(jīng)使用過內(nèi)置D61202U 液晶顯示驅動控制器和內(nèi)置T6963C 液晶顯示驅動控制器的液晶顯示模塊,同樣是顯示16 16 點陣的國
字則需要的點陣數(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 顯示存儲器的特性不能將計算機內(nèi)的漢字庫提出直接使用,需要將其旋轉90 度后再寫入,也就是有些字模軟件如zimo22.exe 可到www.c51bbs.com上免費下載設置為豎向倒序取模后所得的數(shù)據(jù)其生成字庫的格式是前16 個字節(jié)為上半部16 8 點陣字模數(shù)據(jù)后16 個字節(jié)為下半部16x8 點陣字模數(shù)據(jù),讀者如果與圖2 中的相應數(shù)據(jù)作比較可以看出如果僅僅從數(shù)據(jù)上是看不出兩者的聯(liá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 點陣的宋體漢字庫燒錄到256KB 的存儲器中的具體方法,這也是讀者比較關心的問題。本例中使用了AT29C020 該產(chǎn)品是ATMEL 公司生產(chǎn)的高達256KB 的FLASH ROM ,讀者也可以使用其它容量不小于256KB 的產(chǎn)品,但在具體電路設計時應注意引腳定義和邏輯關系,并在燒錄時選擇相應的型號UCDOS 軟件有一個名字為HZK16 的文件,這就是16 16 的國標漢字點陣文件,在該文件中按漢字區(qū)位碼從小到大依次存有:國標區(qū)位碼中的所有漢字,每個漢字占用32 格字節(jié),每個區(qū)為94 個漢字,如果顯示其屬性可以看出其大小為262KB 。當寫入AT29C020A 時可以將多于256KB 的部分截去,實際上在國標漢字點陣字庫中二級漢字排到第87 區(qū),從第88 區(qū)開始就是空白,所以將多余部分截去不會影響實際使用。在實際操作中硬件漢字庫的制作和普通的程序存儲器的編程沒什么不同,注意將HZK16 文件調入時要使用二進制方式打開編程并校驗成功后,即可將存儲器取下備用,這樣一個硬件漢字庫就制作好了。針對不同的應用讀者也可以選用其它大容量甚至是串行數(shù)據(jù)存儲器從而可以擴展硬件漢字庫的使用范圍。在此也一并向大家推薦容量為512KB 甚至更大的存儲器除了可以存儲全部的國標漢字外還可以存儲8 16 的ASCII 碼點陣數(shù)據(jù)以及漢字語句編碼數(shù)據(jù),使用起來更加方便。串行數(shù)據(jù)存儲器如AT45DB041B 等特點是占用口線少體積小和成本低如果對于速度要求不是很高的場合非常適宜

三硬件漢字庫使用電路

在本節(jié)中筆者使用PHILIPS 公司的產(chǎn)品P89C51RD2 作為主控CPU ,使用內(nèi)置T6963 控制器的240x128 點陣圖形液晶顯示器并結合硬件漢字庫的使用,將一部3 萬多字的小說嵌入其中,開機后就可以閱讀小說。P89C51RD2 是PHILIPS 公司于2001 年發(fā)布的一款非常優(yōu)秀的單片機,該單片機是基于8 位80C51單片機的派生產(chǎn)品,它在完全保留80C51 指令系統(tǒng)和硬件結構的大框架外發(fā)生了多方面的加強擴展翻新和創(chuàng)新,P89C51RD2 將原有的對外數(shù)據(jù)和程序存儲器的16 位尋址機制加以利用,把片上的RAM 擴展到1K 字節(jié),片上的FLASH EPROM 擴展到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 背光相關接口信息如下

此主題相關圖片如下:



此主題相關圖片如下:

硬件設計說明
由于AT29C020 的容量為256KB 而80C51 系列微控制器只能管理64KB 的數(shù)據(jù)空間所以可以將
AT29C020 分成8 頁每頁32KB 占單片機系統(tǒng)數(shù)據(jù)空間的0000 7FFFH 剩余32KB 空間為單片機系統(tǒng)的
其它存儲器和外設
A15 反相后作為液晶顯示器的片選LCD/CS P1.5 是控制液晶顯示器正顯和反顯的該液晶顯示器的
復位電平為低電平與P89C51RD2 正好相反

四顯示原理與軟件編制

在第一節(jié)中我們已經(jīng)得出國字的區(qū)位碼為195AH 換算成十進制為2590 ,即國字的點陣位
于第25 區(qū)的第90 個字的位置,相當于在文件HZK16 中的位置為32 [(25-1) 94 (90-1)] 75040B 以后的32 個字節(jié)為國的顯示點陣。
在本系統(tǒng)中AT29C020 的A15 A17 分別連接到P1 口的P1.0 P1.1 和P1.2 作為頁選擇控制A0
A14 直接連接單片機的A0 A14 利用MOVX 指令連續(xù)取32 個字節(jié)送LCD 的相應位置就能實現(xiàn)正確的漢字顯示。
由于240 128 點陣的LCD 顯示器每行只能顯示15 個漢字16 16 點陣漢字所以可以將需要顯示的語句按15 個漢字為1 行進行編寫標點符號要用全角不足15 個漢字的則補空格這就是下面軟件中的MENG.ASM 中的內(nèi)容
為方便讀者將已經(jīng)通過匯編的有關程序列出有關LCD 的具體使用方法請見文獻[2]
主程序
C_ADD EQU 8001H 液晶命令地址
D_ADD EQU 8000H 液晶數(shù)據(jù)地址
DAT1 EQU 30H
DAT2 EQU 31H
COM EQU 32H
CODE1 EQU 33H
COUNT EQU 34H
O_Y EQU 35H
O_X EQU 36H
COUNT_X EQU 37H
ORG 0000H
SJMP START
ORG 0030H
START: MOV SP, #60H
ORL AUXR, #02H EXTRAM 位1 訪問外部數(shù)據(jù)存儲器
ANL AUXR1, #0FH ENBOOT=0 訪問到FLASH
CLR P1.5 正顯
LCALL INT 初始化設置子程序
LCALL CLEAR 清屏
MOV DPTR, #TABLE 科幻小說的開頭
MOV O_Y, #00H
PUSH DPH
PUSH DPL
LOOP: POP DPL
POP DPH
MOV R0, #0E0H 字模數(shù)據(jù)暫存區(qū)
MOV R7, #30 每個漢字為2 字節(jié)每行15 個漢字需30 字節(jié)
PRHZ3: CLR A
MOVC A, @A+DPTR
MOV @R0,A
INC R0
INC DPTR
DJNZ R7, PRHZ3
PUSH DPH
PUSH DPL
MOV O_X, #00H
MOV R0, #0E0H
MOV COUNT_X, #15
LCD112: MOV 24H, @R0 24H 和25H 為暫存緩沖存內(nèi)碼
INC R0
MOV 25H, @R0
INC R0
MOV A, 24H
CLR C
SUBB A, #0A1H 轉換為區(qū)位碼
MOV 24H, A
MOV A, 25H
CLR C
SUBB A, #0A1H
MOV 25H, A
MOV A, R0
PUSH ACC
LCALL DPONHZ 取字模數(shù)據(jù)并存入0C0H 開始的寄存器
LCALL WRI_CC 送出顯示
POP ACC
MOV R0, A
INC O_X
INC O_X
DJNZ COUNT_X,LCD112 1 行漢字送完跳轉
MOV A, O_Y
ADD A, #10H
MOV O_Y, A
MOV A, O_Y
CJNE A, #80H,LOOP
MOV O_Y, #00H
LCALL DELAY 送完1 屏后延長時間以便于閱讀
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
POP DPL
POP DPH
PUSH DPH
PUSH DPL
MOV A, DPH
SUBB A, #0DFH 小說結尾地址如果是結尾則復位重新開始
JNC RST1
JMP LOOP
RST1: MOV A, DPL
SUBB A, #2AH
JNC RST
JMP LOOP
RST: JMP START
DPONHZ: MOV A, 24H 取字模數(shù)據(jù)至0C0H 開始的內(nèi)部存儲區(qū)
MOV B, #94
MUL AB
ADD A, 25H
MOV 25H, A
CLR A
ADDC A, B
MOV 24H, A
CLR C
RRC A
CLR C
RRC A
MOV P1, A
LCALL RL245
CLR 24H.7
MOV DPH, 24H
MOV DPL, 25H
MOV R2, #32
MOV R1, #0C0H
DPHZ2: MOVX A, @DPTR
INC DPTR
MOV @R1, A
INC R1
DJNZ R2, DPHZ2
RET
RL245: MOV R7, #05 24H25H 左移5 位
RLL1: CLR C
MOV A, 25H
RLC A
MOV 25H,A
MOV A, 24H
RLC A
MOV 24H, A
DJNZ R7, RLL1
RET
R_ST: MOV DPTR, #C_ADD 讀狀態(tài)
MOVX A, @DPTR
RET
ST01: LCALL R_ST 讀寫一數(shù)據(jù)前
JNB ACC.0, ST01
JNB ACC.1, ST01
RET
ST2: LCALL R_ST 連續(xù)讀前
JNB ACC.2, ST2
RET
ST3: LCALL R_ST 連續(xù)寫前
JNB ACC.3, ST3
RET
ST6: LCALL R_ST
JB ACC.6, ERR
RET
ERR: LJMP ST6
PR1: LCALL ST01
MOV A, DAT1
LCALL PR13
PR11: LCALL ST01
MOV A, DAT2
LCALL PR13
PR12: LCALL ST01
MOV A, COM
LJMP PR14
PR13: MOV DPTR, #D_ADD
PR14: MOVX @DPTR, A
RET
PR2: LCALL ST01
MOV DPTR, #D_ADD
MOVX A, @DPTR
MOV DAT2, A
RET
INT: MOV DAT1, #00H 初始化設置子程序
MOV DAT2, #00H
MOV COM, #40H
LCALL PR1
MOV DAT1, #20H
MOV DAT2, #00H
MOV COM, #41H
LCALL PR1
MOV DAT1, #00H
MOV DAT2, #08H
MOV COM, #42H
LCALL PR1
MOV DAT1, #20H
MOV DAT2, #00H
MOV COM, #43H
LCALL PR1
MOV COM, #0A7H
LCALL PR12
MOV COM, #80H
LCALL PR12
MOV COM, #9CH
LCALL PR12
RET
CLEAR: MOV DAT1, #00H 設置顯示存儲器首地址
MOV DAT2, #00H
MOV COM, #24H
LCALL PR1
MOV R3, #00H 設置循環(huán)量8K 字節(jié)
MOV R4, #20H
MOV COM, #0B0H 設置自動寫方式
LCALL PR12
CLEAR1: LCALL ST3 判狀態(tài)位S2
MOV A, #00H 置數(shù)據(jù)0
LCALL PR13 寫入數(shù)據(jù)
DJNZ R3, CLEAR1 循環(huán)
DJNZ R4, CLEAR1
MOV COM, #0B2H 設置自動寫結束指令
LCALL PR12
RET
WRI_CC: PUSH O_X 將字模數(shù)據(jù)送出顯示
PUSH O_Y
MOV A, O_Y
MOV B, #20H
MUL AB
ADD A, O_X
MOV O_X, A
MOV A, B
ADDC A, #08H
MOV O_Y, A
MOV R0, #0C0H
MOV COUNT, #10H
WRI_CC1:MOV DAT1, O_X
MOV DAT2, O_Y
MOV COM, #24H
LCALL PR1
MOV A, @R0
MOV DAT2,A
INC R0
MOV A, @R0
INC R0
MOV DAT1, A
MOV COM, #0C0H
LCALL PR11
MOV DAT2, DAT1
LCALL PR11
MOV A, #20H
ADD A, O_X
MOV O_X, A
CLR A
ADDC A, O_Y
MOV O_Y, A
DJNZ COUNT, WRI_CC1
POP O_Y
POP O_X
RET
DL1MS: MOV R4,#0C0H
DLY1: NOP
DJNZ R4,DLY1
RET
DL10MS: CALL DL1MS
CALL DL1MS
CALL DL1MS
CALL DL1MS
CALL DL1MS
CALL DL1MS
CALL DL1MS
CALL DL1MS
CALL DL1MS
CALL DL1MS
RET
DELAY: MOV R5,#0C8H ;延時1 秒
DL5MS: MOV R4,#0FAH
DLY: NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R4,DLY
DJNZ R5,DL5MS
RET
INCLUDE 'MENG.ASM'
END
MENG.ASM 的開頭部分如下所示由于該篇科幻小說太長故只列出了開頭每行為15 個漢字標點
符號全部采用全角
TABLE: DB ' 第一章單杰圣士'
DB ' 邦托烏是矗立大地的最偉'
DB '大的都會地球上歷史最悠久的城'
DB '市自三千二百五十年前地球上'
DB '所有的民族由經(jīng)濟共同體發(fā)展至政'
DB '治大統(tǒng)一的國家代表中央權力核'
DB '心的聯(lián)邦政府便在這從未有過的'
DB '宏偉都會里成立'
DB ' 邦托烏的存在代表了舊'
DB '有文明的消失再沒有國界宗教'
DB ' 民族這類使人世紛爭永無休止的'
DB '因素存在著'
DB ' 經(jīng)過毀滅性的戰(zhàn)爭后聯(lián)邦國'
DB '象浴火后的鳳凰獲得新的生命'
DB '在聯(lián)邦政府強有力的統(tǒng)治下這飽'
DB '經(jīng)劫難的星球終于出現(xiàn)了前所未'
DB '有的長治久安'
DB ' 邦托烏外還有四十八個大'
DB '城市全球二十多億人便聚居在這'
DB '些城市里城市外是受到核污染和'
DB '宇宙射線侵襲的廢墟據(jù)聯(lián)邦政府'
DB '的宣告它們已不適合任何生命的'
DB '繁衍邦托烏里最著名的建筑物'
DB '是聯(lián)邦政府元首和部長們辦公的'
DB '三角大樓這與眾不同的建筑物'
DB ' 是世界上最高的建筑物亦是人'
DB '類建筑技術的頂尖杰作聯(lián)邦政府'
DB '的建筑法令內(nèi)明文規(guī)定不準'
DB '建造比她更高的建筑物使她永背'
DB '著最偉大的美譽'
DB ' 人們都喚她作金字塔'
DB ' 她代表一個偉大時代的產(chǎn)生'
DB '象征古老智慧變成被嘲弄和訕笑對'
DB '象的年代君臨大地'
只要遵守該格式將全部內(nèi)容錄入經(jīng)匯編無誤后,將生成的BIN 文件寫入P89C51RD2 并保證整個硬件
電路正確那么上電復位后就請欣賞您的科幻小說吧

參考文獻
[1]徐卓農(nóng),張永忠.單片機系統(tǒng)中的漢字顯示.單片機與嵌入式系統(tǒng)應用.2001(7):31 34
[2]李維提,郭強.液晶顯示應用技術.第1 版.北京:電子工業(yè)出版社.2000.3
[3]王士元.C 高級實用程序設計.第1 版.北京清華大學出版社.1996.6
[4]P89C51RX2 DATA SHEET. Philips Semiconductors. 2001.
[5]MTG-F24128CMNHSCW, LCD MODULE SPECIFICATION FOR CUSTOMER S APPROVAL. Microtips Technology
Inc. 1999.

 

  • 上一篇: 8 位微控制器在SoC 的應用
  • 下一篇: 拉幕式數(shù)碼顯示技術
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網(wǎng)友評論:(只顯示最新5條。)
    關于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責信息內(nèi)容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1