搜索
bottom↓
回复: 41

常用的汉子字库

[复制链接]

出0入0汤圆

发表于 2010-7-17 11:36:22 | 显示全部楼层 |阅读模式
点击此处下载 ourdev_568350.zip(文件大小:2.33M) (原文件名:点阵字库C语言格式.zip)

以前写在彩屏上显示汉字(16*16)的驱动,用的是LPC2148。三种字体。
字库是经过转化过的,大概250K,可以全部放处理器。
字库调用的时候很方便,内附算法例子。


(原文件名:cp.jpg)


/*------------------------------------------------------------------------------------------------------

     HZK16字库是符合GB2312标准的16× 16点阵字库,HZK16的GB2312-80支持的汉字有6763个,
符号682个。其中一级汉字有3755个,按声序排列,二级汉字有3008个,按偏旁部首排列。
我们在一些应用场合根本用不到这么多汉字字模,所以在应用时就可以只提取部分字体作为己用。

HZK16字库里的16×16汉字一共需要256个点来显示,也就是说需要32个字节才能达到显示一个普通汉字的目的。
我们知道一个GB2312汉字是由两个字节编码的,范围为A1A1~FEFE。A1-A9为符号区,B0到F7为汉字区。每一个区
有94个字符(注意:这只是编码的许可范围,不一定都有字型对应,比如符号区就有很多编码空白区域)。
下面以汉字“我”为例,介绍如何在HZK16文件中找到它对应的32个字节的字模数据。
前面说到一个汉字占两个字节,这两个中前一个字节为该汉字的区号,后一个字节为该字的位号。其中,每个区
记录94个汉字,位号为该字在该区中的位置。所以要找到“我”在hzk16库中的位置就必须得到它的区码和位码。


区码:区号(汉字的第一个字节)-0xa0 (因为汉字编码是从0xa0区开始的,所以文件最前面就是从0xa0区开始,
      要算出相对区码)

位码:位号(汉字的第二个字节)-0xa0

这样我们就可以得到汉字在HZK16中的绝对偏移位置:

offset=(94*(区码-1)+(位码-1))*32

注解:1、区码减1是因为数组是以0为开始而区号位号是以1为开始的

      2、(94*(区号-1)+位号-1)是一个汉字字模占用的字节数

      3、最后乘以32是因为汉字库文应从该位置起的32字节信息记录该字的字模信息
          (前面提到一个汉字要有32个字节显示)

有了偏移地址就可以从HZK16中读取汉字编码了。



-------------------------------------------------------*/

#include"hzk16hei.h"
#define  hzkname hzk16hei //字库的文件名

unsigned char zm[32];//一个16*16汉字占用32字节

void get_zm(unsigned char *single_hz)
{
          unsigned char  qm,wm;
          unsigned long int OffSet;
          unsigned char  k;
      qm =  *single_hz-0xA0;//求出区码
      wm = *(single_hz + 1)-0xA0;//求出位码
          OffSet = ((qm - 1)*94 + (wm - 1))*32; //计算偏移量
          for (k=0;k<32;k++)//连续取32个,一个汉字32个字节                   
          zm[k] =*(hzkname + OffSet+k);      

}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-7-17 12:00:32 | 显示全部楼层
好资料,谢谢了

出0入0汤圆

发表于 2010-7-17 12:38:01 | 显示全部楼层
楼主的彩屏多少钱啊?

出0入0汤圆

发表于 2010-7-17 13:25:04 | 显示全部楼层
mark!~~

出0入0汤圆

发表于 2010-7-17 15:17:01 | 显示全部楼层
mark,会用稿

出0入0汤圆

发表于 2010-7-17 21:11:12 | 显示全部楼层
谢谢!

出0入0汤圆

发表于 2010-7-17 23:03:58 | 显示全部楼层
记号一下

出0入0汤圆

发表于 2010-7-18 03:44:44 | 显示全部楼层
不错,很有用,谢谢楼主

出0入0汤圆

发表于 2010-7-18 08:51:27 | 显示全部楼层
好东西,mark~

出0入0汤圆

发表于 2010-9-20 09:13:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-9-20 09:31:14 | 显示全部楼层
标记

出0入0汤圆

发表于 2010-9-20 14:07:33 | 显示全部楼层
记号

日后做打印用得着

出0入0汤圆

发表于 2010-9-20 21:50:26 | 显示全部楼层
记号

出0入0汤圆

发表于 2010-9-20 22:09:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-9-20 22:52:06 | 显示全部楼层
谢了

出0入0汤圆

发表于 2010-10-10 00:03:17 | 显示全部楼层
回复【楼主位】detector
-----------------------------------------------------------------------

mark 下, 好东西啊

出0入0汤圆

发表于 2010-11-15 17:45:44 | 显示全部楼层
楼主,你的字库是放在哪里的?如果是放在外部flash里面,flash的大小肯定得大于262k,那就需要用19跟地址线来进行寻址,那么如何根据偏移地址来计算这个字模在flash中的实际地址呢,我手上有一个程序,但是我看不懂是如何进行寻址的,硬件电路时这样连接的点击此处下载 ourdev_598133FJ74RS.pdf(文件大小:43K) (原文件名:Protel Schematic.pdf)
字库文件是放在u25rom中,u25一共有19跟地址线,需要分开寻址,a0-a12,q0-q5,一共19跟地址线寻址
显示 汉字程序时这样的:
#define B377        XBYTE[0xd800]   //原理图中的u4芯片
/*-----------------------------------------------------------------------------------------
**函数名:hzdisplay()
**功能:显示一个汉字
**参数:x-列,y-行,party-汉字内码区号,addr-汉字内码位码,style-反显正常显示
**返回:void
------------------------------------------------------------------------------------------*/
void hzdisplay(uchar x, uchar y, uchar party, uchar addr,uchar style)    //显示一个汉字
{
        uchar i;
        uint realaddr,ttp,temp;
        uchar xdata *hz;

        ttp=party*94+addr-95;   //计算汉字在GB 2312-80区中的位置 index = (94*(region-1)+location-1)*32;//数组内地址

        temp=ttp<<5;                    //每个字模有32个字节,所以计算得到的地址需要乘以32
        temp&=0x1fff;
        temp|=0xa000;                        //取低13位,此时temp为此字字模的首地址

        B377=ttp>>8;                        //取高6位,并用74hc377锁存送出,共19位地址,采用040做字库

        ttp=x+y*30;

        for(i=0;i<16;i++)
        {
                   realaddr=ttp+i*30;
                   addrset(realaddr);
                   hz=temp;
                hz+=i<<1;
            data1w((style)?~(*hz):*hz);
                   addrset(realaddr+1);
                   hz++;
                   data1w((style)?~(*hz):*hz);
        }
}
我想问一下,确定字在字库中的位置后,如何去rom寻址,如何确定a0-a12,q0-q5的取值?
这几句不明白
temp=ttp<<5;                    //每个字模有32个字节,所以计算得到的地址需要乘以32
temp&=0x1fff;
temp|=0xa000;                        //取低13位,此时temp为此字字模的首地址
B377=ttp>>8;                        //取高6位,并用74hc377锁存送出,共19位地址,采用040做字库

出0入0汤圆

发表于 2010-12-14 13:28:55 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-29 19:36:12 | 显示全部楼层
mark,备用

出0入0汤圆

发表于 2010-12-29 19:49:56 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-3 09:36:56 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-15 09:27:53 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-13 22:16:56 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-14 00:08:22 | 显示全部楼层
mark

出0入4汤圆

发表于 2011-12-14 05:03:09 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-14 08:27:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-29 21:40:20 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-29 21:44:49 | 显示全部楼层
好东西

出0入0汤圆

发表于 2011-12-30 16:17:50 | 显示全部楼层
好资料啊

出0入0汤圆

发表于 2012-2-28 21:16:49 | 显示全部楼层
顶顶更健康

出0入0汤圆

发表于 2012-2-29 18:28:10 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-3-1 09:58:46 | 显示全部楼层
留住先

出0入0汤圆

发表于 2012-3-1 21:48:45 | 显示全部楼层
24c?

出0入0汤圆

发表于 2012-3-2 18:28:17 | 显示全部楼层
MARK

出0入0汤圆

发表于 2012-8-6 20:57:09 | 显示全部楼层
看了你这篇文字,我有思路了, 我的想法是
1:搞个字库到芯片里面
2:调用字库用点阵屏显示汉子,动态移动(上下左右)
我手头上面有STM32开发板,里面有SST25VF016B存储器,  还有块点阵屏,公司的,现在没没有原理图,
但是看了你这篇文字之后,改思路了,现在你的思路调用字库,在TFT上面显示汉子在说,

出0入0汤圆

发表于 2012-8-7 00:49:48 来自手机 | 显示全部楼层
好贴子,正在进行彩屏的字符显示工作,谢谢了!

出0入0汤圆

发表于 2012-9-4 17:24:26 | 显示全部楼层
MARK!~~

THANKS!~

出0入0汤圆

发表于 2012-9-4 21:56:12 来自手机 | 显示全部楼层
感谢分享!!!!!!!!

出0入0汤圆

发表于 2012-9-4 22:09:36 | 显示全部楼层
mark 中  顶起

出0入0汤圆

发表于 2012-11-28 16:39:44 | 显示全部楼层
汉子库16*16

出0入0汤圆

发表于 2012-11-29 22:06:14 | 显示全部楼层

出0入0汤圆

发表于 2012-12-1 16:29:33 | 显示全部楼层
你的字体怎么前面32个都是0x00啊,第一个字 “啊” 怎么也不是0x00,求解答啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 05:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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