维修网

 找回密码
 注册

QQ登录

只需一步,快速开始

微信扫码 , 快速开始

查看: 510|回复: 8

[资料共享]汉字库HZK16的使用,强烈推荐

[复制链接]

classn_11

发表于 2009-10-20 20:46:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
因为压缩包你有个.DLL文件要1,356K,即使压缩也要583K,我传不上来( l. O& j6 }' U2 i9 {2 v; q  ~0 C
       
/ f% A, n: j& P1 c8 X; G所以本人决定给需要的朋友发E_mail,
; M4 W3 J" l& K" e3 @* H. g1 ?6 K       
. T4 D0 b2 p( X0 o9 @7 ?压缩包内文件列表:8 H( o9 i* l8 D3 ?$ |7 k$ t( S
       
4 K4 M6 U6 p) P( t* A7 ?9 \- h1.Readme文件8 m7 c, o: [6 W$ Q& e" H
        : e5 `; l" K7 q$ I2 j7 U
2.HZK16字库文件
; L7 @3 N  y9 S0 J) r0 p5 v       
: a. a: k' `; l- a* o3.网友Carbon编写的汉字字库演示程序,文件名HZ.exe3 F3 A9 E. v9 d2 N' C6 m3 s/ f
       
- u# _' b2 c, R2 B" c1 B4.动态链接库文件Msvbvm60.dll; D9 I) a/ T" |5 @7 x$ A
       
: R! S" H  e. V6 L& `* `6 O1 _压缩包统计:727K; L8 U$ }1 _+ ^- |" s
        1 _& N" A5 V, C2 i* M
Readme文件内容:
: X4 \! B' o2 A. [' j7 ^       
& O+ F8 T' ?7 P5 l# P1 C3 j  c对于16*16 汉字字模:在HZK16中的偏移地址计算公式为:
6 F: m/ y9 W, h% n3 V0 j       
; ^7 q. h, b5 [( L# I- w! t( HADDRESS=[(AB-0xa1)*94(十进制)+(CD-0xa1)]*32(十进制)其中ABCD为16进制的汉字内码,AB为区码,CD为位码  m* j7 l, h4 N& [, f( A5 \' ^; s
       
: b8 @/ P. [) y) d对于16*16汉字字模需要占用16*16/8=32字节编码字模的排列顺序为从左到右、从上到下:
2 Y4 ], j8 Q6 Y" `1 @$ B        0 X6 s  H" m, z: }* `9 h2 R# a( F
高------低 高------低 第1字节 第2字节 第3字节 第3字节 。。。 。。。5 X- A4 x4 T& b% o  D- z1 T
       
2 H5 ]3 @- [$ P& g3 m9 b1 E 。。。 。。。 第31字节 第32字节
6 `! }$ j9 U8 X9 n/ L" M/ J        8 Q3 N# B% V( m. _3 b9 \
糊涂虫子整理
. ]" u. m2 Q+ p       
& Q9 L- s. P$ o  ~( w: ?7 r/ Z! k/ Q资料来自网络,最终目的为资源共享
( q/ g: _1 R5 _) Z       
. g# P3 K+ V1 v6 i6 q, Y7 L( v有需要的朋友请留下E_mail地址,本人将尽快回复

手机扫码浏览

classn_11

 楼主| 发表于 2009-10-20 20:46:58 | 显示全部楼层
再贴一张实例:
( ~/ m8 Y3 L7 _! o6 ]  t单片机系统中的汉字显示
/ J5 Y' m8 e. a3 z- H! {0 u
7 o0 F" T, |: p& _3 a4 Q% J关键词:单片机 液晶显示器 29F040 汉字显示引言在现代工业控制和一些智能化仪器仪表中,越来越多的场所需要用点阵图形显示器显示汉字。通常的汉字显示方式是先根据所需要的汉字提取汉字点阵(如16×16点阵),将点阵文件存入ROM,形成新的汉字编码;而在使用时刚需要先根据新的汉字编码组成语句,再由MCU根据新编码提取相应的点阵进行汉字显示。在这种显示方式中,如果使用的流字数量较大或语句较多时,利用汉字的新编码组成语句将是一件十分繁琐而枯燥的工作。针对这种情况,本文提出了一种十分简单的方式——直接利用PC机的汉字内码作为单片机系统的编码。下面以8031单片机系统为例阐述如下:一、硬件组成本系统中采用内置T6963控制器的240128T点阵图形液晶显示器。该显示器1行为240点,能容纳16×16点阵的汉字15个,总列数为128点,能显示8行汉字。为了使用MCU操作可使用1片512KB的存储器(如本系统中的29F040)用来存储全部的国标16×16点阵汉辽、8×16的ASCII码点阵数据以及汉字语句编码数据。为了降低成本和减小体积,对于速度要求不是很高的场合也可采用大容量的串行数据存储器,如AT45DB041B。具体的硬件控制电路如图1所示(与汉字显示无关的电路略)。由于29F040的容量为512KB,而5031微控制器只能管理64KB的数据间,所以可将29F040分成16页,每页32KB,占单片机系统数据空间的8000H~0FFFFH(剩余32KB为单片机系统的其他存储器和外设)。页码由单片机的P1.0~P1.3选择。液晶显示器的地址为7FF8H~7FF9H。
7 e. F4 L7 N3 |
# T5 m# g+ o4 G0 c4 j) ` 9 }+ }" l8 d1 G# |
* x0 ~. q% T, t3 T* Z
. E, p8 I- S4 a3 `: M

1 n$ e/ q! E& `4 w/ j0 y/ ]- r9 ]/ N 991b8391.gif
# `; t  X0 _7 c; B8 u% P' M7 L4 W" c% d3 |: z- ?* G7 H

9 h- d7 R6 U, N% c' ~9 n; a6 l& f8 P( |
二、汉字显示原理及软件设计UCDOS软件中的文件HZK16和文件ASC16分别为16×16的国标汉字点阵文件和8×16的ASCII码点阵文件,以二进制格式存储。在文件HZK16中,按汉字区位码从小到大依次存有国标区位码表中的所有汉字,每个汉字占用32个字节,每个区为94个汉字。在文件ASC16中按ASCII码从小到大依次存有8×16的ASCII码点阵,每个ASCII码占用16个字节。在PC机的文本文件中,汉字是以机内码的形式存储的,每个汉字占用两个字节:第一个字节为区码,为了与ASCII码区别,范围从十六进制的0A1H开始(小于80H的为ASCII码字符),对应区位码中区码的第一区;第二个字节为位码,范围也是从0A1H开始,对应某区中的第一个位码。这样,将汉字机内码减去0A0AH就得该汉字的区位码。例如汉字“房”的机内码为十六进制的“B7BF”,其中“B7”表示区码,“BF”表示位码。所以“房”的区位码为0B7BFH-0A0A0H=171FH。将区码和位码分别转换为十进制得汉字“房”的区位码为“2331”,即“房”的点阵位于第23区的第31个字的位置,相当于在文件HZK16中的位置为第32×[(23-1) ×94+(31-1)]=67136B以后的32个字节为“房”的显示点阵。在本单片机系统中,起始地址的高4位为页号,送P1口,低15位为数据区地址,送指针DPTR。利用“MOVX”指令连续取32个字节送LCD的相应位置,就能实现正确的汉字显示。ASCII码的显示与汉字的显示基本原理相同。在文件ASC16中不存在机内码的问题,其显示点阵直接按ASCII码从小到大依次排列,只是每个ASCII码在文本文件中只占1个字节且小于80H,而且ASCII码为8×16点阵,所以在ASCII16文件中,每个ASCII码的点阵也只占16个字节。首先提取16×16的国标汉字点阵和8×16的ASCII码点阵(如UCDOS软件中的HZK16和ASC16)并将其直接写入29F040。其中HZK16(共256KB)点0~7页。为了便于编程,ASC16虽然只有4KB,也单独占用第8页。其余剩下的空间用来存储汉字语句的编码。由于240×128点阵的LED显示器每个只能显示15个汉字(16×16点阵汉字),即30个字节。所以可将需要显示的语句按30个字节为1行进行编写,不足30个字符的则补空格。在PC机上进行录入时,每行30个字符再加上回车键和换行符,实占32个字符。所录入的语句以纯文本形式存盘,再将该文本文件以二进制的形式写入29F040的第9页。那么,以后根据需要显示的语句行号便可以进行正确的显示。此,作者推出荐使用DOS版本的WPS软件的“编辑非文收文件”功能,它能清楚地显示每行是否有30个字符。根据以上原则,显示1行汉字的具体程序框图如图2所示。
( W) R" A0 `) X" Q7 M9 j
9 Q7 }5 J. |$ t! x( `* F' J) [7 [# P. o- c% `  g& V

6 z% P  i- _- L! d6 `* T' R8 p' ?; u. f4 G; p9 o( Q0 q" e+ p, i8 d
8bea501a.gif ! m: d8 q- F2 p2 _/ z. G
% X' \: l, @* F+ a8 {/ K
为方便读者,将已经在实际应用中中通过的汇编子程序列出如下(关于LCD控制器T6963的用户法请见参考有关文献)。LCDCOM EQU 7FF9HLCDDAT EQU 7FF8H;显示1行汉字子程序;汉字语句位置编号DPTR;行号:R6 PRHZ:MOV 24H,DPHMOV 25H,DPLPUSH DPHPUSH DPLMOV A,DPH 计算页号RR ARR AADD A,#9;从第9区开始存放每行字符的机内码ORL A,#0F0HMOV P1,ALCALL RL245 行号乘以32(每行32个字符)SETB 24H,7 数据地址位于8000H~0FFFFHMOV DPH,24HMOV DPL,25HMOV R0,#0E0HMOV R7,#30 连续取出30个字符至0E0H内部数据存储器PRHZ3:MOVX A,@DPTRMOV @R0,AINC R0INC DPTRDJNZ R7,PRHZ3MOV 1DH,#30 显示0E0H后的一行字符(共30个)MOV R5,#0 当前列R5MOV R0,#0E0HMOV A,#7FH 是否为ASCII码?CLR CSUBB A,@R0JC DPHZ1MOV 26H,@R0INC R0MOV 24H,R6 ASCII码显示MOV 25H,R5LCALL PRASCIISJMP PRHZ4DPHZ1:MOV 24H,@R0 是汉字则将机内码送24H25HINC R0MOV 25H,@R0INC R0MOV A,25HCLR CSUBB A,#0A1H 机内码转换为二进制的区码和位码MOV 25H,AMOV A,24HCLR CSUBB A,#0A1HLCALLDPONHZ 显示1个汉字DEC 1DHINC R5PRHZ4:INC R5DJNZ 1DH,PRHZ5POP DPLPOP DPHRETPR0:MOV DPTR,#LCDCOM 读状态MOVX A,@DPTRRETPR01:LCALLPR0 读、写一数据前JNB ACC.0,PR01JNB ACC.1,PR01RETPR02:LCALL PR0 连续读前JNB ACC.2,PR02RETPR03:LCALL PR0 连续写前JNB ACC.3,PR02RETPR1:LCALL PR01 双字节参数R2,R3MOV A,R2LCALL PR14PR11:LCALL PR01 单字节参数R3MOV A,R3LCALL PR14PR12:LCALL PR01 无参数指令R4MOV A,R4SJMP PR15PR14:MOV DPTR,#LCDDATPR15:MOVX @DPTR,ARETRL245:MOV R7,#5 24H25H左移5RLL1:CLR CMOV A,25HRLC AMOV 25H,AMOV A,24HRLC AMOV 24H,ADJNZ R7,RLL1RET;行位置R6(0~7),列位置R5(0~29),汉字区别24H,位码25HDPONHZ:MOV A,24H 显示1个汉字MOV B,#94 每区94个汉字MUL ABADD A,25HMOV 25H,ACLR AADDC A,BMOV

classn_11

 楼主| 发表于 2009-10-20 20:46:59 | 显示全部楼层
24H,ARR A 获得32KB为1页的页号RR AORL A,#0F0HMOV P1,A 页号送P1口LCALL RL245 汉字序号乘以32SETB 24H,7 因为存储器位于单片机系统的7FFFH~0FFFFHMOV DPH,24HMOV DPL,25HMOV R2,#32 在该位置连续取出32个字节MOV R1,#0C0HDPHZ2:MOVX A,@DPTRINC DPTRMOV @R1,AINC R1DJNZ R2,DPHZ2MOV R1,#0C0HMOV A,R6 根据行列位置计算LCD指针MOV B,#16MUL ABMUL B,#30MUL ABADD A,R5MOV 25H,AMOV R2,ACLR AADDC A,BMOV 24H,AMOV R3,AMOV 26H,#16 将取出的点阵送LCD显示PRHZ6:MOV R4,#24HLCALL PR1 双字节参数R2,R3MOV A,@R1MOV R3,AINC R1MOV R4,#0C0HLCALL PR11 单字节参数R3MOV A,@R1MOV R3,AINC R1MOV R4,#0C0HLCALL PR11MOV A,#30ADD A,25HMOV R2,ACLR AADDC A,24HMOV R3,AMOV 24H,ADJNZ 26H,PRHZ6RET

classn_11

发表于 2009-10-20 20:47:00 | 显示全部楼层
希望 能给我寄一份。哦,它是什么字体的?还有其它字体吗?

classn_11

发表于 2009-10-20 20:47:01 | 显示全部楼层
www.google.com ,选择“所有简体中文”输入“HZK16”进行搜索,第一条信息就是,大家可以到那里去下载糊涂虫子所提供的资料。另外还有一点需要补充说明的,HZK16、ASC16的那两个在单片机里的计算公式,只是针对该字库相对地址偏移量为0的计算公式,如果真的用在单片机里,各位朋友最好是编辑一下这两个字库文件,按照自己的存放位置来放,这样有助于各厂家进行技术保密。

classn_11

 楼主| 发表于 2009-10-20 20:47:01 | 显示全部楼层
本人不倡导为提高积分而发贴,# U+ i& l" `* i6 U6 a6 Q

* e: i/ z) y# |2 `/ {+ `7 a  J糊涂了,居然忘了给大家一个最初的资料来源URL了,$ D3 m; H% W- w0 n" Z

  E# k( |8 H. q( p$ M8 ^资料下载地址为老古开发网,请大家下载; }% ^6 `' U" y2 ^% v

9 G( s' v) N1 r+ i( J" f 下载地址:http://www.laogu.com/download/hzk16.zip

classn_11

发表于 2009-10-20 20:47:02 | 显示全部楼层
你有QQ没,是多少?我的是41542106,可以加我吧?

classn_11

 楼主| 发表于 2009-10-20 20:47:03 | 显示全部楼层
本人QQ为:1781769,你先加入我,认证为小其吧,希望我们成为好朋友

classn_11

 楼主| 发表于 2009-10-20 20:47:04 | 显示全部楼层
再上传几个字库文件$ p) i) `5 A: p) G
       
7 y+ y# `2 Z* y+ x& \# @后缀为S的是宋体
3 i& D6 L, T4 M. j" D3 K' h        3 g0 {$ e5 z% c) e9 J+ s
F的是繁体$ p0 A4 ]7 Q; h9 t# `$ T' v
        $ B7 K2 O# x* @& w0 {& \
H的黑体
% R9 _- H1 F5 u0 S/ r, Z( ^       
' Y, K& _& R8 Z" d  NK为楷体2 o1 ?, ~6 Y; G8 ^8 G0 v# E, I; h
       
& v! m0 |: t- w" l: j8 M5 y3 y 12^点阵宋体:
+ K2 S) v$ z0 E; p3 d/ l' m! F        3 }. V* X5 m/ a) N/ X! f$ o
    N) s- b9 R9 Y- W' ^* \, h) l, X
2 \( l% o' V9 ?  h2 n# C- m6 S
3 X7 {! [( Y* v) P5 ~
486959c6.rar (101.66 KB, 下载次数: 1)
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|手机版|小黑屋|最新贴|维修网 ( 粤ICP备09047344号

GMT+8, 2024-6-5 12:12 , Processed in 0.422728 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表