新手入门
- 积分
- 16
- 金钱
- 16
- 注册时间
- 2014-3-27
- 在线时间
- 3 小时
|
5金钱
在汉字显示实验中,我制作了32*32和40*40字库,有关的参数我也改了
__packed typedef struct
{
u8 fontok; //×Ö¿a′æÔú±êÖ¾£¬0XAA£¬×Ö¿aÕy3££»ÆäËû£¬×Ö¿a2»′æÔú
u32 ugbkaddr; //unigbkμÄμØÖ·
u32 ugbksize; //unigbkμÄ′óD¡
u32 f12addr; //gbk12μØÖ·
u32 gbk12size; //gbk12μÄ′óD¡
u32 f16addr; //gbk16μØÖ·
u32 gbk16size; //gbk16μÄ′óD¡
u32 f24addr; //gbk24μØÖ·
u32 gkb24size; //gbk24μÄ′óD¡
u32 f32addr; //gbk24μØÖ·
u32 gkb32size; //gbk24μÄ′óD¡
u32 f40addr; //gbk24μØÖ·
u32 gkb40size; //gbk24μÄ′óD¡
}_font_info;
u8 updata_fontx(u16 x,u16 y,u8 size,u8 *fxpath,u8 fx)
{
u32 flashaddr=0;
FIL * fftemp;
u8 *tempbuf;
u8 res;
u16 bread;
u32 offx=0;
u8 rval=0;
fftemp=(FIL*)mymalloc(SRAMIN,sizeof(FIL)); //·ÖÅäÄú′æ
if(fftemp==NULL)rval=1;
tempbuf=mymalloc(SRAMIN,4096); //·ÖÅä4096¸ö×Ö½ú¿Õ¼ä
if(tempbuf==NULL)rval=1;
res=f_open(fftemp,(const TCHAR*)fxpath,FA_READ);
if(res)rval=2;//′ò¿aÎļtê§°ü
if(rval==0)
{
switch(fx)
{
case 0: //¸üDÂUNIGBK.BIN
ftinfo.ugbkaddr=FONTINFOADDR+sizeof(ftinfo); //DÅÏ¢í·Ö®o󣬽ô¸úUNIGBK×a»»Âë±í
ftinfo.ugbksize=fftemp->fsize; //UNIGBK′óD¡
flashaddr=ftinfo.ugbkaddr;
break;
case 1:
ftinfo.f12addr=ftinfo.ugbkaddr+ftinfo.ugbksize; //UNIGBKÖ®o󣬽ô¸úGBK12×Ö¿a
ftinfo.gbk12size=fftemp->fsize; //GBK12×Ö¿a′óD¡
flashaddr=ftinfo.f12addr; //GBK12μÄÆeê¼μØÖ·
break;
case 2:
ftinfo.f16addr=ftinfo.f12addr+ftinfo.gbk12size; //GBK12Ö®o󣬽ô¸úGBK16×Ö¿a
ftinfo.gbk16size=fftemp->fsize; //GBK16×Ö¿a′óD¡
flashaddr=ftinfo.f16addr; //GBK16μÄÆeê¼μØÖ·
break;
case 3:
ftinfo.f24addr=ftinfo.f16addr+ftinfo.gbk16size; //GBK16Ö®o󣬽ô¸úGBK24×Ö¿a
ftinfo.gkb24size=fftemp->fsize; //GBK24×Ö¿a′óD¡
flashaddr=ftinfo.f24addr; //GBK24μÄÆeê¼μØÖ·
break;
case 4:
ftinfo.f32addr=ftinfo.f24addr+ftinfo.gkb24size; //GBK16Ö®o󣬽ô¸úGBK24×Ö¿a
ftinfo.gkb32size=fftemp->fsize; //GBK24×Ö¿a′óD¡
flashaddr=ftinfo.f32addr; //GBK24μÄÆeê¼μØÖ·
break;
case 5:
ftinfo.f40addr=ftinfo.f32addr+ftinfo.gkb32size; //GBK16Ö®o󣬽ô¸úGBK24×Ö¿a
ftinfo.gkb40size=fftemp->fsize; //GBK24×Ö¿a′óD¡
flashaddr=ftinfo.f40addr; //GBK24μÄÆeê¼μØÖ·
break;
}
while(res==FR_OK)//ËàÑ-»·Ö′DD
{
res=f_read(fftemp,tempbuf,4096,(UINT *)&bread); //¶áè¡êy¾Y
if(res!=FR_OK)break; //Ö′DD′íÎó
W25QXX_Write(tempbuf,offx+flashaddr,4096); //′ó0¿aê¼D′èë4096¸öêy¾Y
offx+=bread;
fupd_prog(x,y,size,fftemp->fsize,offx); //½ø¶èÏÔê¾
if(bread!=4096)break; //¶áíêáË.
}
f_close(fftemp);
}
myfree(SRAMIN,fftemp); //êí·ÅÄú′æ
myfree(SRAMIN,tempbuf); //êí·ÅÄú′æ
return res;
}
//¸üDÂ×ÖìåÎļt,UNIGBK,GBK12,GBK16,GBK24ò»Æe¸üDÂ
//x,y:ìáê¾DÅÏ¢μÄÏÔê¾μØÖ·
//size:×Öìå′óD¡
//src:×Ö¿aà′Ô′′ÅÅì."0:",SD¿¨;"1:",FLASHÅì,"2:",UÅì.
//ìáê¾DÅÏ¢×Öìå′óD¡
//·μ»ØÖμ:0,¸üDÂ3é1|;
// ÆäËû,′íÎó′úÂë.
u8 update_font(u16 x,u16 y,u8 size,u8* src)
{
u8 *pname;
u32 *buf;
u8 res=0;
u16 i,j;
FIL *fftemp;
u8 rval=0;
res=0XFF;
ftinfo.fontok=0XFF;
pname=mymalloc(SRAMIN,100); //éêÇë100×Ö½úÄú′æ
buf=mymalloc(SRAMIN,4096); //éêÇë4K×Ö½úÄú′æ
fftemp=(FIL*)mymalloc(SRAMIN,sizeof(FIL)); //·ÖÅäÄú′æ
if(buf==NULL||pname==NULL||fftemp==NULL)
{
myfree(SRAMIN,fftemp);
myfree(SRAMIN,pname);
myfree(SRAMIN,buf);
return 5; //Äú′æéêÇëê§°ü
}
//Ïè2éÕòÎļtêÇ·ñÕy3£
strcpy((char*)pname,(char*)src); //copy srcÄúèYμ½pname
strcat((char*)pname,(char*)UNIGBK_PATH);
res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
if(res)rval|=1<<4;//′ò¿aÎļtê§°ü
strcpy((char*)pname,(char*)src); //copy srcÄúèYμ½pname
strcat((char*)pname,(char*)GBK12_PATH);
res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
if(res)rval|=1<<5;//′ò¿aÎļtê§°ü
strcpy((char*)pname,(char*)src); //copy srcÄúèYμ½pname
strcat((char*)pname,(char*)GBK16_PATH);
res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
if(res)rval|=1<<6;//′ò¿aÎļtê§°ü
strcpy((char*)pname,(char*)src); //copy srcÄúèYμ½pname
strcat((char*)pname,(char*)GBK24_PATH);
res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
if(res)rval|=1<<7;//′ò¿aÎļtê§°ü
strcpy((char*)pname,(char*)src); //copy srcÄúèYμ½pname
strcat((char*)pname,(char*)GBK32_PATH);
res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
if(res)rval|=1<<8;//′ò¿aÎļtê§°ü
strcpy((char*)pname,(char*)src); //copy srcÄúèYμ½pname
strcat((char*)pname,(char*)GBK40_PATH);
res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
if(res)rval|=1<<9;//′ò¿aÎļtê§°ü
myfree(SRAMIN,fftemp);//êí·ÅÄú′æ
if(rval==0)//×Ö¿aÎļt¶¼′æÔú.
{
LCD_ShowString(x,y,240,320,size,"Erasing sectors... ");//ìáê¾ÕyÔú2á3yéèÇø
for(i=0;i<FONTSECSIZE;i++) //Ïè2á3y×Ö¿aÇøóò,ìá¸ßD′èëËù¶è
{
fupd_prog(x+20*size/2,y,size,FONTSECSIZE,i);//½ø¶èÏÔê¾
W25QXX_Read((u8*)buf,((FONTINFOADDR/4096)+i)*4096,4096);//¶á3öÕû¸öéèÇøμÄÄúèY
for(j=0;j<1024;j++)//D£Ñéêy¾Y
{
if(buf[j]!=0XFFFFFFFF)break;//Dèòa2á3y
}
if(j!=1024)W25QXX_Erase_Sector((FONTINFOADDR/4096)+i); //Dèòa2á3yμÄéèÇø
}
myfree(SRAMIN,buf);
LCD_ShowString(x,y,240,320,size,"Updating UNIGBK.BIN");
strcpy((char*)pname,(char*)src); //copy srcÄúèYμ½pname
strcat((char*)pname,(char*)UNIGBK_PATH);
res=updata_fontx(x+20*size/2,y,size,pname,0); //¸üDÂUNIGBK.BIN
if(res){myfree(SRAMIN,pname);return 1;}
LCD_ShowString(x,y,240,320,size,"Updating GBK12.BIN ");
strcpy((char*)pname,(char*)src); //copy srcÄúèYμ½pname
strcat((char*)pname,(char*)GBK12_PATH);
res=updata_fontx(x+20*size/2,y,size,pname,1); //¸üDÂGBK12.FON
if(res){myfree(SRAMIN,pname);return 2;}
LCD_ShowString(x,y,240,320,size,"Updating GBK16.BIN ");
strcpy((char*)pname,(char*)src); //copy srcÄúèYμ½pname
strcat((char*)pname,(char*)GBK16_PATH);
res=updata_fontx(x+20*size/2,y,size,pname,2); //¸üDÂGBK16.FON
if(res){myfree(SRAMIN,pname);return 3;}
LCD_ShowString(x,y,240,320,size,"Updating GBK24.BIN ");
strcpy((char*)pname,(char*)src); //copy srcÄúèYμ½pname
strcat((char*)pname,(char*)GBK24_PATH);
res=updata_fontx(x+20*size/2,y,size,pname,3); //¸üDÂGBK24.FON
if(res){myfree(SRAMIN,pname);return 4;}
LCD_ShowString(x,y,240,320,size,"Updating GBK32.BIN ");
strcpy((char*)pname,(char*)src); //copy srcÄúèYμ½pname
strcat((char*)pname,(char*)GBK32_PATH);
res=updata_fontx(x+20*size/2,y,size,pname,4); //¸üDÂGBK24.FON
if(res){myfree(SRAMIN,pname);return 5;}
LCD_ShowString(x,y,240,320,size,"Updating GBK40.BIN ");
strcpy((char*)pname,(char*)src); //copy srcÄúèYμ½pname
strcat((char*)pname,(char*)GBK40_PATH);
res=updata_fontx(x+20*size/2,y,size,pname,5); //¸üDÂGBK24.FON
if(res){myfree(SRAMIN,pname);return 6;}
//è«2¿¸üDÂoÃáË
ftinfo.fontok=0XAA;
W25QXX_Write((u8*)&ftinfo,FONTINFOADDR,sizeof(ftinfo)); //±£′æ×Ö¿aDÅÏ¢
}
myfree(SRAMIN,pname);//êí·ÅÄú′æ
myfree(SRAMIN,buf);
return rval;//ÎT′íÎó.
}
void Get_HzMat(unsigned char *code,unsigned char *mat,u8 size)
{
unsigned char qh,ql;
unsigned char i;
unsigned long foffset;
u8 csize=(size/8+((size%8)?1:0))*(size);//μÃμ½×Öìåò»¸ö×Ö·û¶Ôó|μãÕó¼ˉËùÕ¼μÄ×Ö½úêy
qh=*code;
ql=*(++code);
if(qh<0x81||ql<0x40||ql==0xff||qh==0xff)//·Ç 3£óÃoo×Ö
{
for(i=0;i<csize;i++)*mat++=0x00;//ìî3äÂú¸ñ
return; //½áêø·ÃÎê
}
if(ql<0x7f)ql-=0x40;//×¢òa!
else ql-=0x41;
qh-=0x81;
foffset=((unsigned long)190*qh+ql)*csize; //μÃμ½×Ö¿aÖDμÄ×Ö½úÆ«òÆá¿
switch(size)
{
case 12:
W25QXX_Read(mat,foffset+ftinfo.f12addr,csize);
break;
case 16:
W25QXX_Read(mat,foffset+ftinfo.f16addr,csize);
break;
case 24:
W25QXX_Read(mat,foffset+ftinfo.f24addr,csize);
break;
case 32:
W25QXX_Read(mat,foffset+ftinfo.f32addr,csize);
break;
case 40:
W25QXX_Read(mat,foffset+ftinfo.f40addr,csize);
break;
}
还在那里需要改动?求指教。dzk我也改为【256】了。
|
|