专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

ASCII 8×8点阵字库生成器

作者:佚名   来源:本站原创   点击数:  更新时间:2012年09月05日   【字体:

这个是用来生成ASCII点阵字库给液晶用的,在12232上测试通过。不过本程序只有倒序输出这一种功能。

请自行下载好ASC16文件。或者发邮件到我的信箱:dv.xw@qq.com索取。BYET流量伤不起啊!

上代码(读取ASC16在别人的代码上改动完成):
 

/***************************************************
 * FILE qm.c
 * Write by 万致远 
 * 输出8x8字体
 * ************************************************/

#include<stdio.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>

#ifdef DEBUG
#define debug(fmt, ...) printf(fmt, #__VA_ARGS__)
#else
#define debug(fmt, ...)
#endif


void display_font_ascii(char *asc)
{
        int i, j,k=0;
	unsigned char outbuf[20];//8*8字体
        debug("=================\n");
	for(i=0;i<20;i++)
	{
		outbuf[i]=0x00;
	}
        for(i=2;i<12;i++)
        {
		if(i==9 || i == 10) continue;
                for(j=0;j<8;j++)
                {
                        /* 逐位相与,为1者打印“*”,否则打印空格 */
                        if(asc[i] & (0x80>>j))
			{
				if(i==11)
				{
					k=7;
				}
				else
				{
					k=i-2;
				}
				k=7-k;
				outbuf[j]=outbuf[j] | (0x80>>k);
				//printf("j=%d,value=0x%X,k=%d\n",j,0x80>>k,k);
			}
                        else
			{
                                //printf("0");
			}
                }
                //printf("\n");
        }
	printf("{");
	for(i=0;i<8;i++)
	{
		if(i!=7)
		{
		printf("0x%X,",outbuf[i]);
		}
		else
		{
		printf("0x%X}",outbuf[i]);
		}
	}
        debug("=================\n");
}

int main()
{
        int i;
        unsigned char *p;
        //unsigned char asciicode[] = "B";
        unsigned long offset;
        FILE *asc;
        char ascii[16];

        if((asc=fopen("ASC16","rb"))==NULL)
        {
                perror("Can't Open ASC16");
                exit(0);
        }
	printf("unsigned char __code ASCII[][8]={\n");
         /* ASCII字库文件 */
        for (i = 32; i < 127; i++)
        {
               // debug("%c %x\n", asciicode[i], asciicode[i]); /* 打印数值 */
                offset = i*16;
                debug("offset: %x\n", offset); /* 打印偏移量 */
                fseek(asc,offset,SEEK_SET);
                fread(ascii,16,1,asc);              /* 读取16字节 */
                display_font_ascii(ascii);        /* 显示 */
		if(i==126)
		{
		printf("\n};");
		}
		else
		{
		printf(",\n");
		}
        }
        fclose(asc);

        return 0;
}
关闭窗口

相关文章