這個是用來生成ASCII點陣字庫給液晶用的,在12232上測試通過。不過本程序只有倒序輸出這一種功能。
請自行下載好ASC16文件。或者發(fā)郵件到我的信箱:dv.xw@qq.com索取。BYET流量傷不起啊!
上代碼(讀取ASC16在別人的代碼上改動完成):
/***************************************************
* FILE qm.c
* Write by 萬致遠(yuǎn)
* 輸出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]); /* 打印數(shù)值 */
offset = i*16;
debug("offset: %x\n", offset); /* 打印偏移量 */
fseek(asc,offset,SEEK_SET);
fread(ascii,16,1,asc); /* 讀取16字節(jié) */
display_font_ascii(ascii); /* 顯示 */
if(i==126)
{
printf("\n};");
}
else
{
printf(",\n");
}
}
fclose(asc);
return 0;
}
