微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 硬件汉字库设计原理与应用

硬件汉字库设计原理与应用

时间:07-04 来源:互联网 点击:

二汉字库的制作

在本节中笔者将论述将16 16 点阵的宋体汉字库烧录到256KB 的存储器中的具体方法,这也是读者比较关心的问题。本例中使用了AT29C020 该产品是ATMEL 公司生产的高达256KB 的FLASH ROM ,读者也可以使用其它容量不小于256KB 的产品,但在具体电路设计时应注意引脚定义和逻辑关系,并在烧录时选择相应的型号UCDOS 软件有一个名字为HZK16 的文件,这就是16 16 的国标汉字点阵文件,在该文件中按汉字区位码从小到大依次存有:国标区位码中的所有汉字,每个汉字占用32 格字节,每个区为94 个汉字,如果显示其属性可以看出其大小为262KB 。当写入AT29C020A 时可以将多于256KB 的部分截去,实际上在国标汉字点阵字库中二级汉字排到第87 区,从第88 区开始就是空白,所以将多余部分截去不会影响实际使用。在实际操作中硬件汉字库的制作和普通的程序存储器的编程没什么不同,注意将HZK16 文件调入时要使用二进制方式打开编程并校验成功后,即可将存储器取下备用,这样一个硬件汉字库就制作好了。针对不同的应用读者也可以选用其它大容量甚至是串行数据存储器从而可以扩展硬件汉字库的使用范围。在此也一并向大家推荐容量为512KB 甚至更大的存储器除了可以存储全部的国标汉字外还可以存储8 16 的ASCII 码点阵数据以及汉字语句编码数据,使用起来更加方便。串行数据存储器如AT45DB041B 等特点是占用口线少体积小和成本低如果对于速度要求不是很高的场合非常适宜

三硬件汉字库使用电路

在本节中笔者使用PHILIPS 公司的产品P89C51RD2 作为主控CPU ,使用内置T6963 控制器的240x128 点阵图形液晶显示器并结合硬件汉字库的使用,将一部3 万多字的小说嵌入其中,开机后就可以阅读小说。P89C51RD2 是PHILIPS 公司于2001 年发布的一款非常优秀的单片机,该单片机是基于8 位80C51单片机的派生产品,它在完全保留80C51 指令系统和硬件结构的大框架外发生了多方面的加强扩展翻新和创新,P89C51RD2 将原有的对外数据和程序存储器的16 位寻址机制加以利用,把片上的RAM 扩展到1K 字节,片上的FLASH EPROM 扩展到64K 字节,由于一个汉字的内码占用两个字节,所以1024 字节可以存储512 个汉字所以64KB 的闪存可以存储3 万多汉字。
本系统使用了Microtips Technology Inc.公司生产的内置Toshiba 公司生产的T6963C 的液晶显示器型号为MTG-F24128CMNHSCW 具有CCFL 背光相关接口信息如下

此主题相关图片如下:



此主题相关图片如下:

硬件设计说明
由于AT29C020 的容量为256KB 而80C51 系列微控制器只能管理64KB 的数据空间所以可以将
AT29C020 分成8 页每页32KB 占单片机系统数据空间的0000 7FFFH 剩余32KB 空间为单片机系统的其它存储器和外设
A15 反相后作为液晶显示器的片选LCD/CS P1.5 是控制液晶显示器正显和反显的该液晶显示器的
复位电平为低电平与P89C51RD2 正好相反

四显示原理与软件编制

在第一节中我们已经得出国字的区位码为195AH 换算成十进制为2590 ,即国字的点阵位
于第25 区的第90 个字的位置,相当于在文件HZK16 中的位置为32 [(25-1) 94 (90-1)] 75040B 以后的32 个字节为国的显示点阵。
在本系统中AT29C020 的A15 A17 分别连接到P1 口的P1.0 P1.1 和P1.2 作为页选择控制A0
A14 直接连接单片机的A0 A14 利用MOVX 指令连续取32 个字节送LCD 的相应位置就能实现正确的汉字显示。
由于240 128 点阵的LCD 显示器每行只能显示15 个汉字16 16 点阵汉字所以可以将需要显示的语句按15 个汉字为1 行进行编写标点符号要用全角不足15 个汉字的则补空格这就是下面软件中的MENG.ASM 中的内容
为方便读者将已经通过汇编的有关程序列出有关LCD 的具体使用方法请见文献[2]
主程序
C_ADD EQU 8001H 液晶命令地址
D_ADD EQU 8000H 液晶数据地址
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 访问外部数据存储器
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 字模数据暂存区
MOV R7, #30 每个汉字为2 字节每行15 个汉字需30 字节
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 为暂存缓冲存内码
INC R0
MOV 25H, @R0
INC R0
MOV A, 24H
CLR C
SUBB A, #0A1H 转换为区位码
MOV 24H, A
MOV A, 25H
CLR C
SUBB A, #0A1H
MOV 25H, A
MOV A, R0
PUSH ACC
LCALL DPONHZ 取字模数据并存入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 取字模数据至0C0H 开始的内部存储区
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 读状态
MOVX A, @DPTR
RET
ST01: LCALL R_ST 读写一数据前
JNB ACC.0, ST01
JNB ACC.1, ST01
RET
ST2: LCALL R_ST 连续读前
JNB ACC.2, ST2
RET
ST3: LCALL R_ST 连续写前
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 设置循环量8K 字节
MOV R4, #20H
MOV COM, #0B0H 设置自动写方式
LCALL PR12
CLEAR1: LCALL ST3 判状态位S2
MOV A, #00H 置数据0
LCALL PR13 写入数据
DJNZ R3, CLEAR1 循环
DJNZ R4, CLEAR1
MOV COM, #0B2H 设置自动写结束指令
LCALL PR12
RET
WRI_CC: PUSH O_X 将字模数据送出显示
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 '所有的民族由经济共同体发展至政'
DB '治大统一的国家代表中央权力核'
DB '心的联邦政府便在这从未有过的'
DB '宏伟都会里成立'
DB ' 邦托乌的存在代表了旧'
DB '有文明的消失再没有国界宗教'
DB ' 民族这类使人世纷争永无休止的'
DB '因素存在着'
DB ' 经过毁灭性的战争后联邦国'
DB '象浴火后的凤凰获得新的生命'
DB '在联邦政府强有力的统治下这饱'
DB '经劫难的星球终于出现了前所未'
DB '有的长治久安'
DB ' 邦托乌外还有四十八个大'
DB '城市全球二十多亿人便聚居在这'
DB '些城市里城市外是受到核污染和'
DB '宇宙射线侵袭的废墟据联邦政府'
DB '的宣告它们已不适合任何生命的'
DB '繁衍邦托乌里最著名的建筑物'
DB '是联邦政府元首和部长们办公的'
DB '三角大楼这与众不同的建筑物'
DB ' 是世界上最高的建筑物亦是人'
DB '类建筑技术的顶尖杰作联邦政府'
DB '的建筑法令内明文规定不准'
DB '建造比她更高的建筑物使她永背'
DB '着最伟大的美誉'
DB ' 人们都唤她作金字塔'
DB ' 她代表一个伟大时代的产生'
DB '象征古老智慧变成被嘲弄和讪笑对'
DB '象的年代君临大地'
只要遵守该格式将全部内容录入经汇编无误后,将生成的BIN 文件写入P89C51RD2 并保证整个硬件
电路正确那么上电复位后就请欣赏您的科幻小说吧

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top