汉字显示时出错,不能显示汉字,显示类似乱码

2019-08-23 13:59发布

如题,想做一个简单的界面,用的是正点原子的方式,字库通过SD卡存储在外部FLASH。汉字的显示方式也是用的正点原子的方式。

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);//得到字体一个字符对应点阵集所占的字节数         
        qh=*code;
        ql=*(++code);
        if(qh<0x81||ql<0x40||ql==0xff||qh==0xff)//非 常用汉字
        {                       
            for(i=0;i<csize;i++)*mat++=0x00;//填充满格
            return; //结束访问
        }         
        if(ql<0x7f)ql-=0x40;//注意!
        else ql-=0x41;
        qh-=0x81;   
        foffset=((unsigned long)190*qh+ql)*csize;        //得到字库中的字节偏移量                    
        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;
                       
        }                                                                                                         
}  
   
void Show_Font(u16 x,u16 y,u8 *font,u8 size,u8 mode)
{
        u8 temp,t,t1;
        u16 y0=y;
        u8 dzk[72];   
        u8 csize=(size/8+((size%8)?1:0))*(size);//得到字体一个字符对应点阵集所占的字节数         
        if(size!=12&&size!=16&&size!=24)return;        //不支持的size
        Get_HzMat(font,dzk,size);        //得到相应大小的点阵数据
        for(t=0;t<csize;t++)
        {                                                                                                     
                temp=dzk[t];                        //得到点阵数据                          
                for(t1=0;t1<8;t1++)
                {
                        if(temp&0x80)LCD_Fast_DrawPoint(x,y,POINT_COLOR);
                        else if(mode==0)LCD_Fast_DrawPoint(x,y,BACK_COLOR);
                        temp<<=1;
                        y++;
                        if((y-y0)==size)
                        {
                                y=y0;
                                x++;
                                break;
                        }
                }           
        }  
}


e.jpg

在显示这个界面的时候,偶尔会出现这种情况,该显示汉字的时候,字都没了,像是画了一个16*16的点。但是显示数字和英文字符的时候,是正常的。

不知道为什么会有这情况?

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