单片机/MCUwilliam hill官网
直播中

dangzhongyuan

11年用户 102经验值
擅长:电源/新能源 嵌入式技术 光电显示
私信 关注
[问答]

tft显示汉字问题,菜鸟求助

网上买的普中的51单片机板子,在学习tft触摸屏显示的时候,用自带的资料实验,显示的汉字总是两个重复的,不知道为什么,研究了一晚上也没想明白。。。求助帮忙分析下这是显示汉字的程序:

void GUI_Write32CnChar(uint x, uint y, uchar *cn, uint wordColor, uint backColor)         
{  
        uchar i, j, wordNum;
        uint color;
        while (*cn != '')
        {
                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,

烧程序进去后,显示的是“普普”两个字,是在不明白为何、、、

回帖(5)

dangzhongyuan

2014-3-25 15:23:09
那个for (wordNum=0; wordNum<20; wordNum+2)这句,应该是for (wordNum=0; wordNum<20; wordNum++),但是随便改改试试的,忘了改回来了。
举报

dangzhongyuan

2014-3-25 16:41:57
就没有人么。。。。。。。。。。。。没人愿意指点指点么
举报

ling_long007

2015-3-29 15:45:30
不懂帮顶了~~~~~~
举报

嵌入式狂热青年

2015-4-20 05:53:25
这么就肯定解决了   不过非常感谢你        if((color&0x80)==0x80){TFT_WriteData(wordColor); }                                                
else {TFT_WriteData(backColor); }   这段代码给了灵感
举报

h1654156057.3873

2021-7-30 20:36:59
受到警告
提示: 作者被禁止或删除 内容自动屏蔽
举报

更多回帖

发帖
×
20
完善资料,
赚取积分