搜索
bottom↓
回复: 85

好东西:点阵字库读取显示程序

[复制链接]

出0入0汤圆

发表于 2005-5-30 09:26:34 | 显示全部楼层 |阅读模式
发现这个不错的程序,可以读取显示汉字点阵字库,如果想做个电子书之类的东东,很有参考价值,程序虽然是用TC20写的,但是DOS时代的C和单片机的很相似的,主要的公式部分看明白就行了





/******************************************************

文件名   :All.c

描  述   :12,14,16点阵汉字显示文件

语  言   :TC2.0

作  者   :刘利国

修  改   :

日  期   :2002-11-5

说  明   :需要12,14,16点阵汉字字库的支持

******************************************************/

#include <stdio.h>

#include <graphics.h>

#include <fcntl.h>

#include <io.h>

int hzk_p,asc_p;

void open_hzk(char filename[]);

void open_asc(char filename[]);

void get_hz(char incode[],char bytes[],unsigned long uiSize );

void get_asc(char incode[],char bytes[],unsigned long uiSize );

void disasc(int x,int y,char code[],int color,

                                                unsigned int uiDianZhenSize);

void dishz(int x0,int y0,char code[],int color,

                                         unsigned int uiDianZhenSize,

                                         unsigned int uiDuoYuBit);

/*字模的大小

16*16点阵   ZI_MO_SIZE=32

14*14点阵   ZI_MO_SIZE=28

12*12点阵   ZI_MO_SIZE=24

//该变量一定为long,否则出错

*/

unsigned long  ZI_MO_SIZE[3]={32,28,24};

/*汉字点阵

16*16点阵   ZI_MO_SIZE=16

14*14点阵   ZI_MO_SIZE=14

12*12点阵   ZI_MO_SIZE=12

*/

unsigned int  DIAN_ZHEN_SIZE[3]={16,14,12};

/*多余位数(对于12*12和14*14点阵字库,该位有意义)

16*16点阵   ZI_MO_SIZE=0

14*14点阵   ZI_MO_SIZE=2

12*12点阵   ZI_MO_SIZE=4

*/

unsigned int  DUO_YU_BIT[3]={0,2,4};

#define ZOOMX    1  /*X方向的放大倍数,1为原始尺寸*/

#define ZOOMY    1  /*Y方向的放大倍数,1为原始尺寸*/



main()

{

        int x=10,i;

        int y=10;

        char *s;

        char *filename[3]={"e:\\hzk\\hzk16","e:\\hzk\\hzk14","e:\\hzk\\hzk12"};

        char *fileasc[3]={"e:\\hzk\\asc16","e:\\hzk\\asc14","e:\\hzk\\asc12"};

        char code[32];/*因为不能动态定位,所以取最大值32*/

        char tmpcode[3]={0};

        unsigned char mask=0x80;

        int driver=DETECT,errorcode;

        int mode;

        int iOffset;

        initgraph(&driver,&mode,"");

        errorcode=graphresult();

        if(errorcode!=0)

        {

                printf("error
");

                getch();

                exit(1);

        }

        for(i=0;i<3;i++)

        {

                open_hzk(filename);

                open_asc(fileasc);

                s="北京惠234悦12通234电s子技术有限234公司";

                while(*s!=NULL)

                {

                        while(x<600 && (*s!=NULL))

                        {

                                tmpcode[0]=*s;

                                tmpcode[1]=*(s+1);

                                if(tmpcode[0] & mask)

                                {

                                        get_hz(s,code,ZI_MO_SIZE);

                                        dishz(x,y,code,GREEN,DIAN_ZHEN_SIZE,DUO_YU_BIT);

                                  x+=20*ZOOMX;

                                  s+=2;

                                }

                                else

                                {

                                  disasc(x,y,s,LIGHTGREEN,DIAN_ZHEN_SIZE);

                                  x+=10*ZOOMX;

                                  s+=1;

                                }                               

                        }

                        x=10;

                        y+=20*ZOOMY;

                }

                y+=20;/*换行*/

                close(hzk_p);

                close(asc_p);

        }

        getch();

        closegraph();

}

/******************************************************

函数名称:open_hzk

函数功能:打开字库文件

传入参数:无

返 回 值:无

建立时间:

修改时间:

建 立 人:

修 改 人:

其它说明:如果失败,则直接退出程序

******************************************************/

void open_hzk(char filename[])

{

        hzk_p=open(filename,O_BINARY|O_RDONLY);

        if(hzk_p==-1)

        {

                printf("The file HZK not exits!
");

                getch();

                closegraph();

                exit(1);

        }

}

/******************************************************

函数名称:open_asc

函数功能:打开字库文件

传入参数:无

返 回 值:无

建立时间:

修改时间:

建 立 人:

修 改 人:

其它说明:如果失败,则直接退出程序

******************************************************/

void open_asc(char filename[])

{

        asc_p=open(filename,O_BINARY|O_RDONLY);

        if(asc_p==-1)

        {

                printf("The file asc not exits!
");

                getch();

                closegraph();

                exit(1);

        }

}

/******************************************************

函数名称:

函数功能:

传入参数:

返 回 值:

建立时间:

修改时间:

建 立 人:

修 改 人:

其它说明:

******************************************************/

void get_hz(char incode[],char bytes[],unsigned long uiSize )

{

        unsigned char qh,wh;

        unsigned long offset;

        qh=incode[0]-0xa0;

        wh=incode[1]-0xa0;

        offset=(94*(qh-1)+(wh-1))*uiSize;

        lseek(hzk_p,offset,SEEK_SET);

        read(hzk_p,bytes,uiSize);

}

/******************************************************

函数名称:

函数功能:

传入参数:

返 回 值:

建立时间:

修改时间:

建 立 人:

修 改 人:

其它说明:

******************************************************/

void get_asc(char incode[],char bytes[],unsigned long uiSize )

{

        unsigned char qh,wh;

        unsigned long offset;

        offset=incode[0]*uiSize;

        lseek(asc_p,offset,SEEK_SET);

        read(asc_p,bytes,uiSize);

}

/******************************************************

函数名称:

函数功能:

传入参数:

返 回 值:

建立时间:

修改时间:

建 立 人:

修 改 人:

其它说明:对于24*24的点阵字库,存放格式如下:

          纵向存放3个字节(24位),横向存放24个字节,每个字模占72个字节

          字符排列顺序如下:

          1   4   7   10   ......

          2   5   8   11   ......

          3   6   9   12   ......

                                       

                                        对于16*16的点阵字库,存放格式如下:

          横向存放2个字节(16位),其中第二个字节没有多余的数据

          纵向存放16个字节,每个字模占32个字节

          字符排列顺序如下:

                                        1    2

                                        3    4

                                        5    6

                                        ......

                                       

                                        对于14*14的点阵字库,存放格式如下:

          横向存放2个字节(16位),其中第二个字节的后2位是多余的数据

          纵向存放14个字节,每个字模占28个字节

          字符排列顺序如下:

                                        1    2

                                        3    4

                                        5    6

                                        ......

         

                                        对于12*12的点阵字库,存放格式如下:

          横向存放2个字节(16位),其中第二个字节的后4位是多余的数据

          纵向存放12个字节,每个字模占24个字节

          字符排列顺序如下:

                                        1    2

                                        3    4

                                        5    6

                                        ......

******************************************************/

void dishz(int x0,int y0,char mat[],int color,

           unsigned int uiDianZhenSize,

                                    unsigned int uiDuoYuBit

           )

{

        unsigned char mask[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

        register int x,y,row,col;

        register int byte;

        int zoomX,zoomY;/*x,y方向*/

        x=x0;y=y0;

        byte=0;

        for(col=0;col<uiDianZhenSize;col++) /*列*/

        {

                for(zoomY=0;zoomY<ZOOMY;zoomY++)  /*纵向放大*/

                {

                        for(row=0;row<uiDianZhenSize;row++) /*16行(2个8位)*/

                        {

                                for(zoomX=0;zoomX<ZOOMX;zoomX++) /*横向放大*/

                                {

                                        if((mask[byte%8]& mat[byte/8])!=NULL)

                                        {

                                                putpixel(x,y,color);

                                        }

                                        x++; /*x位置加一*/

                                }

                                byte++;

                        }

                        byte+=uiDuoYuBit; /*去掉多余位,对于16*16点阵来说,该位为0*/

                        x=x0;

                        y++;/*y坐标加1*/

                        byte-=16; /*重新修正byte,重复绘制y像点*/

                }

                byte+=16; /*每次写完1行(2个字节,16位),修正byte*/

        }

}



void disasc(int x0,int y0,char code[],int color,

                                          unsigned int uiDianZhenSize

                                          )

{

        unsigned char mask[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

        register int x,y,row,col;

        register int byte;

        int zoomX,zoomY;/*x,y方向*/

        char mat[16]={0};/*因为不能动态定位,所以取最大值16*/

        get_asc(code,mat,uiDianZhenSize);

        x=x0;y=y0;

        byte=0;

        for(col=0;col<uiDianZhenSize;col++) /*列*/

        {

                for(zoomY=0;zoomY<ZOOMY;zoomY++)  /*纵向放大*/

                {

                        for(row=0;row<8;row++)

                        {

                                for(zoomX=0;zoomX<ZOOMX;zoomX++) /*横向放大*/

                                {

                                        if((mask[byte%8]& mat[byte/8])!=NULL)

                                        {

                                                putpixel(x,y,color);

                                        }

                                        x++; /*x位置加一*/

                                }

                                byte++;

                        }

                        x=x0;

                        y++;/*y坐标加1*/

                        byte-=8; /*重新修正byte,重复绘制y像点*/

                }

                byte+=8; /*每次写完1行(2个字节,16位),修正byte*/

        }

}

出0入0汤圆

 楼主| 发表于 2005-5-30 09:35:43 | 显示全部楼层
对小液晶最有用的12点阵字库文件



点击此处下载armok0151025.rar

出0入0汤圆

发表于 2008-2-26 16:20:06 | 显示全部楼层
请问有可以用在液晶12232上的程序及字库吗?谢谢各位行家

出0入0汤圆

发表于 2008-2-28 00:20:45 | 显示全部楼层
好东东!


专业无线,欢迎交流!
联系方式:
QQ:35625400
MSN:ll88mm88@hotmail.com
PHONE:13704018223 024-24686897
公司网站:www.newmsg.com
http://shop35079098.taobao.com

出0入0汤圆

发表于 2008-2-28 08:15:50 | 显示全部楼层
做个标记吧,呵呵

出0入0汤圆

发表于 2008-2-28 08:51:37 | 显示全部楼层
记号

出0入0汤圆

发表于 2008-2-28 10:10:15 | 显示全部楼层
记号

出0入0汤圆

发表于 2008-2-28 11:23:30 | 显示全部楼层
记号下 呵呵  以后用的到

出0入0汤圆

发表于 2008-2-28 23:19:13 | 显示全部楼层

出0入0汤圆

发表于 2008-2-28 23:25:55 | 显示全部楼层
看了!

出0入0汤圆

发表于 2008-2-29 09:36:21 | 显示全部楼层
好东西

出0入0汤圆

发表于 2008-3-1 08:38:50 | 显示全部楼层
SHOW一下业余制作无线温度采集加点阵显示!线上传原理图,欢迎交流!

点击此处下载ourdev_222198.rar(文件大小:8K)
显示部分原理图

控制部分原理图
点击此处下载ourdev_222199.rar(文件大小:9K)

出0入0汤圆

发表于 2008-3-1 08:57:21 | 显示全部楼层
先用DS18B20采集温度后用NRF905发采集到的温度发给接收端点阵显示!

无线采集部分
1

点阵显示效果
1

出0入0汤圆

发表于 2008-3-5 11:00:14 | 显示全部楼层
请问一下,你们有没有人用595连接16*16点阵的阿,怎样连接阿,
是将两个595串上作为行输入,另外的两个串上作为列输入数据端口
么,那么空下的595的脚怎么处理阿,有没有人给出一个完整的原
理图阿,在此谢谢!

出0入0汤圆

发表于 2008-3-6 22:29:26 | 显示全部楼层
好东西,收藏起来

出0入0汤圆

发表于 2008-6-12 09:28:48 | 显示全部楼层
cc

出0入0汤圆

发表于 2008-6-24 20:02:45 | 显示全部楼层
标记

出0入0汤圆

发表于 2008-8-13 21:10:29 | 显示全部楼层
标记

出0入70汤圆

发表于 2008-8-13 22:24:23 | 显示全部楼层
标但不记

出0入0汤圆

发表于 2008-8-20 16:36:32 | 显示全部楼层
你的原理图P1、P2、P3、P4是什么芯片啊

出0入0汤圆

发表于 2008-8-21 09:38:19 | 显示全部楼层
记号一下。嘻嘻

出0入0汤圆

发表于 2009-3-12 10:14:47 | 显示全部楼层
俺都做个记号

出0入0汤圆

发表于 2009-3-12 11:38:32 | 显示全部楼层
我也记下

出0入0汤圆

发表于 2009-3-12 12:10:44 | 显示全部楼层
mark 。

出0入0汤圆

发表于 2009-3-12 13:19:32 | 显示全部楼层
cool

出0入42汤圆

发表于 2009-3-12 18:55:35 | 显示全部楼层
mark 。

出0入0汤圆

发表于 2009-4-11 17:03:45 | 显示全部楼层
对小液晶最有用的12点阵字库文件点阵字库读取显示程序

出0入0汤圆

发表于 2009-4-11 20:35:26 | 显示全部楼层
记号

出0入0汤圆

发表于 2009-4-11 21:48:49 | 显示全部楼层
做个记号备用

出0入0汤圆

发表于 2009-4-12 09:11:37 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-4-13 15:58:11 | 显示全部楼层
好东西!

出330入0汤圆

发表于 2009-4-13 16:24:50 | 显示全部楼层
/******************************************************
函数名称:
函数功能:
传入参数:
返 回 值:
建立时间:
修改时间:
建 立 人:
修 改 人:
其它说明:
******************************************************/

=================================================================
coder们的楷模!

出0入0汤圆

发表于 2009-4-14 17:06:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-4-14 21:57:34 | 显示全部楼层
mark!

出0入0汤圆

发表于 2009-5-5 15:34:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-5-6 08:44:22 | 显示全部楼层
记号

出0入0汤圆

发表于 2009-5-6 09:57:44 | 显示全部楼层
记下来,手里有两个12232,正想办法用它

出0入0汤圆

发表于 2009-5-31 20:52:01 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-5-31 21:48:02 | 显示全部楼层
记下先.

出0入0汤圆

发表于 2009-6-1 14:57:04 | 显示全部楼层
记号

出0入4汤圆

发表于 2009-6-2 22:52:34 | 显示全部楼层
记号。

出0入0汤圆

发表于 2009-6-5 09:50:50 | 显示全部楼层
要是传上原理图就更好了.

出0入0汤圆

发表于 2009-7-9 15:04:31 | 显示全部楼层
mark!

出0入0汤圆

发表于 2009-8-25 21:35:08 | 显示全部楼层
不错,谢谢

出0入0汤圆

发表于 2009-8-25 23:47:16 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-9-7 13:09:59 | 显示全部楼层
点击此处下载 ourdev_478604.pdf(文件大小:517K) (原文件名:无线数据通信汇总和选型参考.pdf)

出0入0汤圆

发表于 2009-9-7 14:25:48 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-8 12:09:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-16 11:11:35 | 显示全部楼层
灰常好

出0入0汤圆

发表于 2010-1-25 13:47:32 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-25 17:11:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-25 17:24:56 | 显示全部楼层
有用

出0入0汤圆

发表于 2010-1-27 11:06:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-27 18:55:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-27 19:05:02 | 显示全部楼层
回复【53楼】sniperlee
-----------------------------------------------------------------------

收藏,谢谢

出0入0汤圆

发表于 2010-1-28 23:07:36 | 显示全部楼层
mark!!
supermark!!

出0入0汤圆

发表于 2010-1-31 14:17:30 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2010-2-24 19:43:04 | 显示全部楼层
好东西!!!

出0入0汤圆

发表于 2010-2-25 08:21:36 | 显示全部楼层
mark!

出0入0汤圆

发表于 2010-2-25 14:26:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-2-25 14:31:34 | 显示全部楼层
路过顶顶楼主

出0入0汤圆

发表于 2010-4-9 10:40:50 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-30 15:53:48 | 显示全部楼层
不错

出0入0汤圆

发表于 2010-5-31 08:34:12 | 显示全部楼层
占位

出0入0汤圆

发表于 2010-5-31 09:19:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-1 09:48:50 | 显示全部楼层
标记回复【11楼】chj_006  乐乐
-----------------------------------------------------------------------

出0入0汤圆

发表于 2010-6-1 10:34:24 | 显示全部楼层
记号

出0入0汤圆

发表于 2010-6-4 10:40:12 | 显示全部楼层
呵呵,可以!谢了!

出0入0汤圆

发表于 2010-7-17 13:52:10 | 显示全部楼层
24*24该怎么写!有哪位大哥知道么?

出0入0汤圆

发表于 2010-7-17 13:59:27 | 显示全部楼层
好东西,此程序的用处是在研究透FAT或者FAT32文件系统以后,便于单片机直接从FAT32磁盘读取字库文件然后显示在单片机的LCD上面。
呵呵,从此单片机也可以显示自己需要的字体了!

出0入0汤圆

发表于 2010-7-17 14:03:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-15 02:32:16 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-9-29 21:47:56 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-17 23:31:03 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-26 09:33:16 | 显示全部楼层
强悍!!!!!!!!!!!!!!!

出0入0汤圆

发表于 2010-10-26 13:01:31 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-23 17:21:09 | 显示全部楼层
Mark!

出0入0汤圆

发表于 2011-2-24 00:01:59 | 显示全部楼层
好东西,回复收藏一下。

出0入0汤圆

发表于 2011-2-24 21:44:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-24 22:32:42 | 显示全部楼层
标记一下

出0入0汤圆

发表于 2011-2-24 22:36:12 | 显示全部楼层
good~cool~

出0入0汤圆

发表于 2011-8-29 10:35:40 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-8-31 06:01:39 | 显示全部楼层
标记

出0入0汤圆

发表于 2011-11-8 13:10:59 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-8 13:39:54 | 显示全部楼层
mark!~

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-7 22:28

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

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