tft显示汉字问题,菜鸟求助
时间:10-02
整理:3721RD
点击:
网上买的普中的51单片机板子,在学习tft触摸屏显示的时候,用自带的资料实验,显示的汉字总是两个重复的,不知道为什么,研究了一晚上也没想明白。求助帮忙分析下这是显示汉字的程序:
void GUI_Write32CnChar(uint x, uint y, uchar *cn, uint wordColor, uint backColor)
{
uchar i, j, wordNum;
uint color;
while (*cn != '\0')
{
TFT_SetWindow(x, y, x+31, y+28);
for (wordNum=0; wordNum<20; wordNum+2)
{ //wordNum扫描字库的字数
if ((CnChar32x29[wordNum].Index[0]==*cn)
&&(CnChar32x29[wordNum].Index[1]==*(cn+1)))
{
for(i=0; i<116; i++)
{ //MSK的位数
color=CnChar32x29[wordNum].Msk[i];
for(j=0;j<8;j++)
{
if((color&0x80)==0x80)
{
TFT_WriteData(wordColor);
}
else
{
TFT_WriteData(backColor);
}
color<<=1;
}//for(j=0;j<8;j++)结束
}
}
} //for (wordNum=0; wordNum<20; wordNum++)结束
cn += 2;
x += 32;
}
}
这是 字库里的第一个字,我就以第一个字为例子:
struct Cn32CharTypeDef // 汉字字模数据结构
{
unsigned char Index[2]; // 汉字内码索引,一个汉字占两个字节
unsigned char Msk[116]; // 点阵码数据(32*29/8)
};
/////////////////////////////////////////////////////////////////////////
// 汉字字模表,大小为:32*29 //
// 汉字库: 宋体二号,横向取模左高位,数据排列:从左到右从上到下 //
/////////////////////////////////////////////////////////////////////////
struct Cn32CharTypeDef code CnChar32x29[]=
{
/*-- 文字: 普 --*/
/*-- 宋体22; 此字体下对应的点阵为:宽x高=30x29 --*/
/*-- 宽度不是8的倍数,现调整为:宽度x高度=32x29 --*/
"普",0x00,0x00,0x00,0x00,0x00,0xE0,0x38,0x00,0x00,0x78,0x3C,0x00,0x00,0x3C,0x78,0x00,
0x00,0x3C,0x70,0xC0,0x00,0x1C,0xE1,0xE0,0x1F,0xFF,0xFF,0xF0,0x00,0x1C,0xE3,0x00,
0x0E,0x1C,0xE7,0xC0,0x07,0x9C,0xE7,0x80,0x03,0xDC,0xEF,0x00,0x03,0xDC,0xEE,0x00,
0x01,0xDC,0xFC,0x60,0x00,0x9C,0xF9,0xF0,0x7F,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,
0x01,0xC0,0x0E,0x00,0x01,0xFF,0xFF,0x00,0x01,0xC0,0x0E,0x00,0x01,0xC0,0x0E,0x00,
0x01,0xC0,0x0E,0x00,0x01,0xFF,0xFE,0x00,0x01,0xC0,0x0E,0x00,0x01,0xC0,0x0E,0x00,
0x01,0xC0,0x0E,0x00,0x01,0xFF,0xFE,0x00,0x01,0xC0,0x0E,0x00,0x01,0xC0,0x0E,0x00,
0x00,0x00,0x00,0x00,
烧程序进去后,显示的是“普普”两个字,是在不明白为何、、、
void GUI_Write32CnChar(uint x, uint y, uchar *cn, uint wordColor, uint backColor)
{
uchar i, j, wordNum;
uint color;
while (*cn != '\0')
{
TFT_SetWindow(x, y, x+31, y+28);
for (wordNum=0; wordNum<20; wordNum+2)
{ //wordNum扫描字库的字数
if ((CnChar32x29[wordNum].Index[0]==*cn)
&&(CnChar32x29[wordNum].Index[1]==*(cn+1)))
{
for(i=0; i<116; i++)
{ //MSK的位数
color=CnChar32x29[wordNum].Msk[i];
for(j=0;j<8;j++)
{
if((color&0x80)==0x80)
{
TFT_WriteData(wordColor);
}
else
{
TFT_WriteData(backColor);
}
color<<=1;
}//for(j=0;j<8;j++)结束
}
}
} //for (wordNum=0; wordNum<20; wordNum++)结束
cn += 2;
x += 32;
}
}
这是 字库里的第一个字,我就以第一个字为例子:
struct Cn32CharTypeDef // 汉字字模数据结构
{
unsigned char Index[2]; // 汉字内码索引,一个汉字占两个字节
unsigned char Msk[116]; // 点阵码数据(32*29/8)
};
/////////////////////////////////////////////////////////////////////////
// 汉字字模表,大小为:32*29 //
// 汉字库: 宋体二号,横向取模左高位,数据排列:从左到右从上到下 //
/////////////////////////////////////////////////////////////////////////
struct Cn32CharTypeDef code CnChar32x29[]=
{
/*-- 文字: 普 --*/
/*-- 宋体22; 此字体下对应的点阵为:宽x高=30x29 --*/
/*-- 宽度不是8的倍数,现调整为:宽度x高度=32x29 --*/
"普",0x00,0x00,0x00,0x00,0x00,0xE0,0x38,0x00,0x00,0x78,0x3C,0x00,0x00,0x3C,0x78,0x00,
0x00,0x3C,0x70,0xC0,0x00,0x1C,0xE1,0xE0,0x1F,0xFF,0xFF,0xF0,0x00,0x1C,0xE3,0x00,
0x0E,0x1C,0xE7,0xC0,0x07,0x9C,0xE7,0x80,0x03,0xDC,0xEF,0x00,0x03,0xDC,0xEE,0x00,
0x01,0xDC,0xFC,0x60,0x00,0x9C,0xF9,0xF0,0x7F,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,
0x01,0xC0,0x0E,0x00,0x01,0xFF,0xFF,0x00,0x01,0xC0,0x0E,0x00,0x01,0xC0,0x0E,0x00,
0x01,0xC0,0x0E,0x00,0x01,0xFF,0xFE,0x00,0x01,0xC0,0x0E,0x00,0x01,0xC0,0x0E,0x00,
0x01,0xC0,0x0E,0x00,0x01,0xFF,0xFE,0x00,0x01,0xC0,0x0E,0x00,0x01,0xC0,0x0E,0x00,
0x00,0x00,0x00,0x00,
烧程序进去后,显示的是“普普”两个字,是在不明白为何、、、
那个for (wordNum=0; wordNum<20; wordNum+2)这句,应该是for (wordNum=0; wordNum<20; wordNum++),但是随便改改试试的,忘了改回来了。
就没有人么。没人愿意指点指点么
不懂帮顶了~~~~~~
这么就肯定解决了 不过非常感谢你 if((color&0x80)==0x80){TFT_WriteData(wordColor); }
else {TFT_WriteData(backColor); } 这段代码给了灵感