取模显示汉字

2019-10-14 23:53发布

不用字库,用取取模方式在7寸TFTLCD上显示汉字请问下面的函数怎么修改,谢谢。哪位高手可以帮忙修改下,谢谢。
//code ×Ö·ûÖ¸Õë¿aê¼
//′ó×Ö¿aÖD2éÕò3ö×ÖÄ£
//code ×Ö·û′®μÄ¿aê¼μØÖ·,GBKÂë
//mat  êy¾Y′æ·ÅμØÖ· size*2 bytes′óD¡         
void Get_HzMat(unsigned char *code,unsigned char *mat,u8 size)
{                    
        unsigned char qh,ql;
        unsigned char i;                                          
        unsigned long foffset;
        qh=*code;
        ql=*(++code);
        if(qh<0x81||ql<0x40||ql==0xff||qh==0xff)//·&#199; 3£ó&#195;oo×&#214;
        {                       
            for(i=0;i<(size*2);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)*(size*2);//μ&#195;μ&#189;×&#214;&#191;a&#214;Dμ&#196;×&#214;&#189;ú&#198;&#171;ò&#198;á&#191;                    

        if(size==16)SPI_Flash_Read(mat,foffset+ftinfo.f16addr,32);
        else SPI_Flash_Read(mat,foffset+ftinfo.f12addr,24);                                                                                                         
}  
//&#207;&#212;ê&#190;ò&#187;&#184;&#246;&#214;&#184;&#182;¨′óD&#161;μ&#196;oo×&#214;
//x,y o×&#214;μ&#196;×&#248;±ê
//fonto×&#214;GBK&#194;&#235;
//size:×&#214;ì&#229;′óD&#161;
//mode:0,&#213;y3£&#207;&#212;ê&#190;,1,μt&#188;ó&#207;&#212;ê&#190;          
void Show_Font(u16 x,u16 y,u8 *font,u8 size,u8 mode)
{
        u8 temp,t,t1;
        u16 y0=y;
        u8 dzk[32];
        u16 tempcolor;          
        if(size!=12&&size!=16)return;//2&#187;&#214;§3&#214;μ&#196;size
        Get_HzMat(font,dzk,size);//μ&#195;μ&#189;&#207;àó|′óD&#161;μ&#196;μ&#227;&#213;óêy&#190;Y
        if(mode==0)//&#213;y3£&#207;&#212;ê&#190;
        {         
            for(t=0;t<size*2;t++)
            {                                                                                                     
                    temp=dzk[t];//μ&#195;μ&#189;12êy&#190;Y                          
                for(t1=0;t1<8;t1++)
                        {
                                if(temp&0x80)LCD_DrawPoint(x,y);
                                 else
                                {
                                        tempcolor=POINT_COLOR;
                                        POINT_COLOR=BACK_COLOR;
                                        LCD_DrawPoint(x,y);
                                        POINT_COLOR=tempcolor;//&#187;1&#212;-
                                }
                                temp<<=1;
                                y++;
                                if((y-y0)==size)
                                {
                                        y=y0;
                                        x++;
                                        break;
                                }
                        }           
            }
        }else//μt&#188;ó&#207;&#212;ê&#190;
        {
            for(t=0;t<size*2;t++)
            {                                                                                                     
                    temp=dzk[t];//μ&#195;μ&#189;12êy&#190;Y                          
                for(t1=0;t1<8;t1++)
                        {
                                if(temp&0x80)LCD_DrawPoint(x,y);   
                                temp<<=1;
                                y++;
                                if((y-y0)==size)
                                {
                                        y=y0;
                                        x++;
                                        break;
                                }
                        }           
            }
        }   
}
//&#212;ú&#214;&#184;&#182;¨&#206;&#187;&#214;&#195;&#191;aê&#188;&#207;&#212;ê&#190;ò&#187;&#184;&#246;×&#214;·&#251;′&#174;            
//&#214;§3&#214;×&#212;&#182;ˉ&#187;&#187;DD
//(x,y):&#198;eê&#188;×&#248;±ê
//width,height:&#199;&#248;óò
//str  :×&#214;·&#251;′&#174;
//size :×&#214;ì&#229;′óD&#161;
//mode:0,·&#199;μt&#188;ó·&#189;ê&#189;;1,μt&#188;ó·&#189;ê&#189;                                 
void Show_Str(u16 x,u16 y,u16 width,u16 height,u8*str,u8 size,u8 mode)
{                                       
        u16 x0=x;
        u16 y0=y;                                                                    
    u8 bHz=0;     //×&#214;·&#251;&#187;ò&#213;&#223;&#214;D&#206;&#196;                                                                                              
    while(*str!=0)//êy&#190;Y&#206;′&#189;áê&#248;
    {
        if(!bHz)
        {
                if(*str>0x80)bHz=1;//&#214;D&#206;&#196;
                else              //×&#214;·&#251;
                {      
                if(x>(x0+width-size/2))//&#187;&#187;DD
                                {                                  
                                        y+=size;
                                        x=x0;          
                                }                                                            
                        if(y>(y0+height-size))break;//&#212;&#189;&#189;&#231;·μ&#187;&#216;      
                        if(*str==13)//&#187;&#187;DD·&#251;o&#197;
                        {         
                            y+=size;
                                        x=x0;
                            str++;
                        }  
                        else LCD_ShowChar(x,y,*str,size,mode);//óDD§2&#191;·&#214;D′è&#235;
                                str++;
                        x+=size/2; //×&#214;·&#251;,&#206;aè&#171;×&#214;μ&#196;ò&#187;°&#235;
                }
        }else//&#214;D&#206;&#196;
        {     
            bHz=0;//óDoo×&#214;&#191;a   
            if(x>(x0+width-size))//&#187;&#187;DD
                        {            
                                y+=size;
                                x=x0;                  
                        }
                if(y>(y0+height-size))break;//&#212;&#189;&#189;&#231;·μ&#187;&#216;                                                       
                Show_Font(x,y,str,size,mode); //&#207;&#212;ê&#190;&#213;a&#184;&#246;oo×&#214;,&#191;&#213;D&#196;&#207;&#212;ê&#190;
                str+=2;
                x+=size;//&#207;&#194;ò&#187;&#184;&#246;oo×&#214;&#198;&#171;ò&#198;            
        }                                                 
    }   
}                                            
//&#212;ú&#214;&#184;&#182;¨&#191;í&#182;èμ&#196;&#214;D&#188;&#228;&#207;&#212;ê&#190;×&#214;·&#251;′&#174;
//è&#231;1&#251;×&#214;·&#251;3¤&#182;è3&#172;1yá&#203;len,&#212;òó&#195;Show_Str&#207;&#212;ê&#190;
//len:&#214;&#184;&#182;¨òa&#207;&#212;ê&#190;μ&#196;&#191;í&#182;è                          
void Show_Str_Mid(u16 x,u16 y,u8*str,u8 size,u8 len)
{
        u16 strlenth=0;
           strlenth=strlen((const char*)str);
        strlenth*=size/2;
        if(strlenth>len)Show_Str(x,y,240,320,str,size,1);
        else
        {
                strlenth=(len-strlenth)/2;
            Show_Str(strlenth+x,y,240,320,str,size,1);
        }
}   

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。