OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2578|回复: 1

40*40字库问题

[复制链接]

2

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2014-3-27
在线时间
3 小时
发表于 2016-5-28 13:23:50 | 显示全部楼层 |阅读模式
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;//′ò&#191;a&#206;&#196;&#188;tê§°ü  
       
        strcpy((char*)pname,(char*)src);        //copy src&#196;úèYμ&#189;pname
        strcat((char*)pname,(char*)GBK12_PATH);
        res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
        if(res)rval|=1<<5;//′ò&#191;a&#206;&#196;&#188;tê§°ü  
       
        strcpy((char*)pname,(char*)src);        //copy src&#196;úèYμ&#189;pname
        strcat((char*)pname,(char*)GBK16_PATH);
        res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
        if(res)rval|=1<<6;//′ò&#191;a&#206;&#196;&#188;tê§°ü  
       
        strcpy((char*)pname,(char*)src);        //copy src&#196;úèYμ&#189;pname
        strcat((char*)pname,(char*)GBK24_PATH);
        res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
        if(res)rval|=1<<7;//′ò&#191;a&#206;&#196;&#188;tê§°ü   
       
        strcpy((char*)pname,(char*)src);        //copy src&#196;úèYμ&#189;pname
        strcat((char*)pname,(char*)GBK32_PATH);
        res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
        if(res)rval|=1<<8;//′ò&#191;a&#206;&#196;&#188;tê§°ü  
       
        strcpy((char*)pname,(char*)src);        //copy src&#196;úèYμ&#189;pname
        strcat((char*)pname,(char*)GBK40_PATH);
        res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
        if(res)rval|=1<<9;//′ò&#191;a&#206;&#196;&#188;tê§°ü

        myfree(SRAMIN,fftemp);//êí·&#197;&#196;ú′&#230;
        if(rval==0)//×&#214;&#191;a&#206;&#196;&#188;t&#182;&#188;′&#230;&#212;ú.
        {  
                LCD_ShowString(x,y,240,320,size,"Erasing sectors... ");//ìáê&#190;&#213;y&#212;ú2á3yéè&#199;&#248;       
                for(i=0;i<FONTSECSIZE;i++)        //&#207;è2á3y×&#214;&#191;a&#199;&#248;óò,ìá&#184;&#223;D′è&#235;&#203;ù&#182;è
                {
                        fupd_prog(x+20*size/2,y,size,FONTSECSIZE,i);//&#189;&#248;&#182;è&#207;&#212;ê&#190;
                        W25QXX_Read((u8*)buf,((FONTINFOADDR/4096)+i)*4096,4096);//&#182;á3&#246;&#213;&#251;&#184;&#246;éè&#199;&#248;μ&#196;&#196;úèY
                        for(j=0;j<1024;j++)//D£&#209;éêy&#190;Y
                        {
                                if(buf[j]!=0XFFFFFFFF)break;//Dèòa2á3y            
                        }
                        if(j!=1024)W25QXX_Erase_Sector((FONTINFOADDR/4096)+i);        //Dèòa2á3yμ&#196;éè&#199;&#248;
                }
                myfree(SRAMIN,buf);
                LCD_ShowString(x,y,240,320,size,"Updating UNIGBK.BIN");               
                strcpy((char*)pname,(char*)src);                                //copy src&#196;úèYμ&#189;pname
                strcat((char*)pname,(char*)UNIGBK_PATH);
                res=updata_fontx(x+20*size/2,y,size,pname,0);        //&#184;üD&#194;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&#196;úèYμ&#189;pname
                strcat((char*)pname,(char*)GBK12_PATH);
                res=updata_fontx(x+20*size/2,y,size,pname,1);        //&#184;üD&#194;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&#196;úèYμ&#189;pname
                strcat((char*)pname,(char*)GBK16_PATH);
                res=updata_fontx(x+20*size/2,y,size,pname,2);        //&#184;üD&#194;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&#196;úèYμ&#189;pname
                strcat((char*)pname,(char*)GBK24_PATH);
                res=updata_fontx(x+20*size/2,y,size,pname,3);        //&#184;üD&#194;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&#196;úèYμ&#189;pname
                strcat((char*)pname,(char*)GBK32_PATH);
                res=updata_fontx(x+20*size/2,y,size,pname,4);        //&#184;üD&#194;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&#196;úèYμ&#189;pname
                strcat((char*)pname,(char*)GBK40_PATH);
                res=updata_fontx(x+20*size/2,y,size,pname,5);        //&#184;üD&#194;GBK24.FON
                if(res){myfree(SRAMIN,pname);return 6;}
               
                //è&#171;2&#191;&#184;üD&#194;o&#195;á&#203;
                ftinfo.fontok=0XAA;
                W25QXX_Write((u8*)&ftinfo,FONTINFOADDR,sizeof(ftinfo));        //±£′&#230;×&#214;&#191;aD&#197;&#207;¢
        }
        myfree(SRAMIN,pname);//êí·&#197;&#196;ú′&#230;
        myfree(SRAMIN,buf);
        return rval;//&#206;T′í&#206;ó.                         
}



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);//μ&#195;μ&#189;×&#214;ì&#229;ò&#187;&#184;&#246;×&#214;·&#251;&#182;&#212;ó|μ&#227;&#213;ó&#188;ˉ&#203;ù&#213;&#188;μ&#196;×&#214;&#189;úêy         
        qh=*code;
        ql=*(++code);
        if(qh<0x81||ql<0x40||ql==0xff||qh==0xff)//·&#199; 3£ó&#195;oo×&#214;
        {                       
            for(i=0;i<csize;i++)*mat++=0x00;//ì&#238;3&#228;&#194;ú&#184;&#241;
            return; //&#189;áê&#248;·&#195;&#206;ê
        }         
        if(ql<0x7f)ql-=0x40;//×¢òa!
        else ql-=0x41;
        qh-=0x81;   
        foffset=((unsigned long)190*qh+ql)*csize;        //μ&#195;μ&#189;×&#214;&#191;a&#214;Dμ&#196;×&#214;&#189;ú&#198;&#171;ò&#198;á&#191;                    
        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】了。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-5-28 20:37:46 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-12 07:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表