本帖最后由 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 //×Ö·û
{ 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;
}
}
}
const unsigned char asc2_2412[95][36]
//32*32 ASCII
const unsigned char asc2_3216[95][128]
解决了,
我的问题原因是,
函数和ASCII取模方法,不对应。
要么更换函数,要么按函数来取模ASCII方法。
一周热门 更多>