1.1. 原因
原有的LCD显现汉字函数例程只能显现带布景的汉字,也就是说假如要在图片上显现一个汉字,那就会呈现一个矩形框,底色为咱们设定的色彩。而不能完成独自显现汉字,不显现布景的要求。
1.2. 代码
//x、y字符的一个字符的左上角的坐标
/***
pointColor: 要显现的字符的色彩
backColor: 字符的布景色彩
*pChineseData :字符取模数据
***/
//fontSize : 字体大小
void LCD_ShowChinese(u16 x,u16 y,u8 fontSize,u16 pointColor,u16 backColor,u8 *pChineseData)
{
u32 i;
u8 j =0;
/*****************************************************/
LCD_ILI9486_CMD(0x2A); //设置列地址的开始地址
LCD_ILI9486_Parameter(x>>8);
LCD_ILI9486_Parameter(x&(0xFF));
//设置列地址的完毕地址
LCD_ILI9486_Parameter((x+fontSize-1)>>8);
LCD_ILI9486_Parameter((x+fontSize-1)&(0xFF));
/*****************************************************/
LCD_ILI9486_CMD(0x2B); //设置行地址的开始地址
LCD_ILI9486_Parameter(y>>8);
LCD_ILI9486_Parameter(y&(0xFF));
//设置行地址的完毕地址
LCD_ILI9486_Parameter((y+fontSize-1)>>8);
LCD_ILI9486_Parameter((y+fontSize-1)&(0xFF));
LCD_ILI9486_CMD(0x2C); //写显存的指令
for(i=0;i<(fontSize*fontSize);i++)
{
if((*pChineseData)&(1<<(7-j)))
{
LCD_ILI9486_Parameter(pointColor);
}
else
{
LCD_ILI9486_Parameter(backColor);
}
j = j +1;
if(j ==8)
{
j =0;
pChineseData++;
}
}
}
1.3. 处理思路
参照LCD显现字符的函数,不运用一个个数据接连传输,而是运用一个一个画点的方法,这样,在不需要显现汉字的当地能够挑选不打点,这样就能完成镂空汉字的作用。
经过每进行一次循环处理一个字节的原理,核算出当时字节的每一个位对应的坐标,然后在相应的坐标挑选打点或许不打点即可。
1.4. 代码
//x、y字符的一个字符的左上角的坐标
/***
pointColor: 要显现的字符的色彩
backColor: 字符的布景色彩
*pChineseData :字符取模数据
***/
//fontSize : 字体大小:16表明 16*16的字体,32表明32*32的字体,64表明64*64的字体,
void LCD_ShowChinese_fill(u16 x,u16 y,u8 fontSize,u16 pointColor,u16 backColor,u8 *pChineseData)
{
u32 i;
u8 j =0;
u8 k =0; //核算当时字节处于该行的方位(第几个字节)
u8 d =0; //核算当时字节处于第几列
for(i=0;i<(fontSize*fontSize);i++)
{
if((*pChineseData)&(1<<(7-j)))
{
LCD_Draw_Point(x+j+k*8, y+d, pointColor);
}
else
{
LCD_Draw_Point(x+j+k*8, y+d, backColor);
}
j = j +1;
if(j ==8)
{
j =0;
pChineseData++;
k++; //核算当时字节处于该行的方位
if(k>=(fontSize/8))
{
k=0; //核算当时字节处于该行的方位
d++; //核算当时字节处于第几列的方位
}
}
}
}