这个生成器适用于12232液晶。暂时功能不多。也就只有倒序输出功能。输出的是16×16的点阵字符,所以也能用在LED点阵上。
使用命令:
cc foo.c -o foo
编译。并且还需要汉字库(HZK16),我这里就不提供下载了,毕竟BYET给咱的流量是有限的,不过这种USDOS的东西一搜一大把。全部代码下载:http://www.51hei.com/f/ddcd2.rar
上代码:
/****************************************** * FILE disp.c * @ Ubuntu Linux GCC * Need HZK16 * Write By 万致远@rzy.co.cc ******************************************/ #include<stdio.h> #include <iconv.h> #include <memory.h> #include <string.h> #include <stdlib.h> FILE *fp; unsigned char vb; //转换成单片机的格式 void hanzi16(char *s) { char buffer[32]; register i,j,k; unsigned char x,y,z; unsigned char qh,wh; unsigned long location; unsigned int st_len; unsigned char outbuf[32]; st_len=strlen(s); while(*s) { qh=*s-0xa0; wh=*(s+1)-0xa0; location=(94*(qh-1)+(wh-1))*32L; fseek(fp,location,SEEK_SET); fread(buffer,32,1,fp); for(i=0;i<32;i++) { outbuf[i]=0x00; } if(vb==1) printf("/******点阵*******\n"); for(i=0;i<16;i++) { for(j=0;j<2;j++) { for(k=0;k<8;k++) { if(((buffer[i*2+j]>>(7-k))&0x1)!=0) { x=8*j+k; y=i; //printf("X=%d\n",x); //printf("Y=%d\n",y); if(y>7) { x=x+16; //printf("Y[FIX]=%d\n",y); y=(y-8); } y=7-y; outbuf[x]=outbuf[x] | (0x80>>y); if(vb==1) printf("1"); } else { if(vb==1) printf("0"); } } } if(vb==1) printf("\n"); } if(vb==1) printf("*******点阵结束********/\n"); printf("{"); for(i=0;i<32;i++) { if(i!=31) { printf("0x%X,",outbuf[i]); } else { printf("0x%X}",outbuf[i]); } } s+=2; if(*s!='\0') { printf(",\n"); } else { printf("\n};\n"); } } } int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen) { iconv_t cd; int rc; char **pin = &inbuf; char **pout = &outbuf; cd = iconv_open(to_charset,from_charset); if (cd==0) return -1; memset(outbuf,(size_t)0,(size_t)outlen); if (iconv(cd,pin,&inlen,pout,&outlen) == -1) return -1; iconv_close(cd); return 0; } int u2g(char *inbuf,int inlen,char *outbuf,int outlen) { return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen); } int main(int argc,char *argv[]) { char* str=0; if(argv[1]==NULL) { printf("//请输入字符串!\n"); return; } if(strcmp(argv[1],"-help")==0) { printf("用法:%s <-help> <文字> <-v> > foo.c\n",argv[0]); printf("本软件支持16*16的中文字符输出,不支持英文。\n"); printf("-v 控制是否在C程序中输出点阵字\n"); printf("-help 用于显示本帮助信息\n"); printf("本软件运行需要HZK16的支持.\n"); printf("BUG反馈:http://www.rwzy.co.cc\n"); printf(" dv.xw@qq.com\n"); printf("万致远 2012.8.5\n"); return; } vb=0; if((fp=fopen("HZK16","rb"))==NULL) { printf("//无法打开HZK16文件,请检查!\n"); return; } printf("/*---------------------\n"); printf("生成的以下字的字库:%s\n",argv[1]); str=(char*)realloc(str,strlen(argv[1])+1); printf("字库由万致远HZK软件建立。"); if(argv[2]!=NULL) { if(strcmp(argv[2],"-v")==0) { printf("使用点阵显示模式\n"); vb=1; } } printf("HZ就是您需要的汉字库\n----------------*/\n"); printf("unsigned char __code HZ[][32]={\n");//一个汉字32字节 u2g(argv[1],strlen(argv[1])+1,str,strlen(argv[1])+1);//strlen(argv[1])+1 hanzi16(str);//转换格式 fclose(fp); }