液晶屏显示ASCII乱码问题--跪求赐教

2019-07-21 00:26发布

本帖最后由 xianglongjudz 于 2019-5-28 15:42 编辑

STM32F103配TFT-LCD液晶屏显示ASCII(24*12    32*16)乱码问题
12*06   16*08  两种ASCII显示正常(用如下函数:void Show_Str(u16 x, u16 y, u16 fc, u16 bc, u8 *str,u8 size,u8 mode),此函数显示文字正常)
24*12    32*16)显示乱码
请大家多多指点,问题 出在哪里!

程序如下:
void LCD_ShowChar(u16 x,u16 y,u16 fc, u16 bc, u8 num,u8 size,u8 mode)
{  
  u16 temp;
  u16 pos,t;
        u16 colortemp=POINT_COLOR;                        
        num=num-' ';                                 
        LCD_SetWindows(x,y,x+size/2-1,y+size-1);  
        if(!mode)                              
         {for(pos=0;pos<size;pos++)
                { if            (size==12)temp=asc2_1206[num][pos];
                        else if(size==16)temp=asc2_1608[num][pos];
                        else if(size==24)temp=asc2_2412[num][pos];
                        else if(size==32)temp=asc2_3216[num][pos];
                        else return;
                        for(t=0;t<size/2;t++){if(temp&0x01)LCD_DrawPoint_16Bit(fc);else LCD_DrawPoint_16Bit(bc);temp>>=1;}                        
                }        
         }
        else                                         
        { for(pos=0;pos<size;pos++)
                { if     (size==12)temp=asc2_1206[num][pos];
                        else if(size==16)temp=asc2_1608[num][pos];
                        else if(size==24)temp=asc2_2412[num][pos];
                        else if(size==32)temp=asc2_3216[num][pos];
                        for(t=0;t<size/2;t++){POINT_COLOR=fc;if(temp&0x01)LCD_DrawPoint(x+t,y+pos);temp>>=1;}
                }
        }
        POINT_COLOR=colortemp;        
        LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);
}


void Show_Str(u16 x, u16 y, u16 fc, u16 bc, u8 *str,u8 size,u8 mode)
{                                       
        u16 x0=x;                                                                    
          u8 bHz=0;
    while(*str!=0)
    { if(!bHz)
        {if(x>(lcddev.width-size/2)||y>(lcddev.height-size))
                           return;
                if(*str>0x80)bHz=1;
                else              //×&#214;·&#251;
                { if(*str==0x0D){y+=size;x=x0;str++;}
                        else{if(size>32)
                                {LCD_ShowChar(x,y,fc,bc,*str,32,mode);x+=size/2;}
                               else
                                {LCD_ShowChar(x,y,fc,bc,*str,size,mode);x+=size/2;}
                             }
                                     str++;                        
                }
        }
                                else
        {if(x>(lcddev.width-size)||y>(lcddev.height-size))
                           return;  
         bHz=0;
                           if            (size==40)GUI_DrawFont40(x,y,fc,bc,str,mode);
                           else if       (size==32)GUI_DrawFont32(x,y,fc,bc,str,mode);                 
                                else if  (size==24)GUI_DrawFont24(x,y,fc,bc,str,mode);        
                                     else          GUI_DrawFont16(x,y,fc,bc,str,mode);                                
                 str+=2;
                 x+=size;
        }                                                
    }   
}



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