显示汉字,汉字处显示直线或黑块

2019-07-21 07:34发布

2个问题:

1.字库更新完成,汉字显示却是 黑 {MOD}块 和 白 {MOD}块,有时候还会是直线;
2.按复位键后,字库更新会中断,然后一直卡在 res=updata_fontx(x+20*size/2,y,size,pname,0);    //更新字库UNIGBK.BIN     这里。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
渡渡
2019-07-21 13:20
peng1554 发表于 2018-11-22 16:24
显示字符的函数是怎样的?贴出来

//显示字符
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{                                                            
    u8 temp,t1,t;
        u16 y0=y;
        u8 csize=(size/8+((size%8)?1:0))*(size/2);               
        num=num-' ';
        for(t=0;t<csize;t++)
        {   
                if(size==12)temp=asc2_1206[num][t];                 
                else if(size==16)temp=asc2_1608[num][t];       
                else if(size==24)temp=asc2_2412[num][t];       
                else return;                                                                     
                for(t1=0;t1<8;t1++)
                {                            
                        if(temp&0x80)       
                        {
                                DrawPixel(x,y,Black);//×&#212;&#188;&#186;&#208;&#180;&#181;&#196;&#195;è&#181;&#227;&#186;&#175;&#202;&#253;
                        }
                        else if(mode==0)
                        {
                                DrawPixel(x,y,BACK_COLOR);

                        }
                        temp<<=1;
                        y++;
                        lcddev.width = 10240;
                        lcddev.height = 10240;
                        if(y>=lcddev.height){
                                printf("  if : %d   ",lcddev.height);
                                return;               
                        }
                        if((y-y0)==size)
                        {
                                y=y0;
                                x++;
                                if(x>=lcddev.width){
                                        printf("%d   ",lcddev.width);
                                        return;       
                                }
                                break;
                        }
                }           
        }                                            
}

u32 LCD_Pow(u8 m,u8 n)
{
        u32 result=1;         
        while(n--)result*=m;   
        return result;
}                         

void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size)
{                
        u8 t,temp;
        u8 enshow=0;                                                  
        for(t=0;t<len;t++)
        {
                temp=(num/LCD_Pow(10,len-t-1))%10;
                if(enshow==0&&t<(len-1))
                {
                        if(temp==0)
                        {
                                LCD_ShowChar(x+(size/2)*t,y,' ',size,0);
                                continue;
                        }else enshow=1;
                          
                }
                 LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,0);
        }
}

void LCD_ShowxNum(u16 x,u16 y,u32 num,u8 len,u8 size,u8 mode)
{  
        u8 t,temp;
        u8 enshow=0;                                                  
        for(t=0;t<len;t++)
        {
                temp=(num/LCD_Pow(10,len-t-1))%10;
                if(enshow==0&&t<(len-1))
                {
                        if(temp==0)
                        {
                                if(mode&0X80)LCD_ShowChar(x+(size/2)*t,y,'0',size,mode&0X01);  
                                else LCD_ShowChar(x+(size/2)*t,y,' ',size,mode&0X01);  
                                continue;
                        }else enshow=1;
                          
                }
                 LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,mode&0X01);
        }
}

void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p)
{         
        u8 x0=x;
        width+=x;
        height+=y;
    while((*p<='~')&&(*p>=' '))
    {      
        if(x>=width){x=x0;y+=size;}
        if(y>=height)break;
        LCD_ShowChar(x,y,*p,size,0);
        x+=size/2;
        p++;
    }  
}

一周热门 更多>