這個生成器適用于12232液晶。暫時功能不多。也就只有倒序輸出功能。輸出的是16×16的點陣字符,所以也能用在LED點陣上。
使用命令:
cc foo.c -o foo
編譯。并且還需要漢字庫(HZK16),我這里就不提供下載了,畢竟BYET給咱的流量是有限的,不過這種USDOS的東西一搜一大把。全部代碼下載:http://www.zg4o1577.cn/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); }