dongfang 发表于 2026-2-24 14:27:59

浦江一水 发表于 2026-2-24 13:19
第一行理解为"设置显示区域是一条竖线"也是对的.
其实质是设置一个矩形区域,因为X水平方向的宽度是1, 那 ...

刚才我看了看问题找到了,我的TFT_SET_ADD(X,Y,X,Y+H)函数

void TFT_SET_ADD(unsigned int X,unsignedint Y,unsigned int X_END,unsigned int Y_END)
{      
                TFT_SEND_CMD(0x2A);   //窗口地址横向                        
    TFT_SEND_DATA16(X);//start column   
    TFT_SEND_DATA(X_END);//start column
                TFT_SEND_CMD(0x2B);   //窗口地址纵向                     
    TFT_SEND_DATA16(Y);                //start row   
    TFT_SEND_DATA16(Y_END);                //start row
    TFT_SEND_CMD(0x2C);   //写入数据   
}第三行TFT_SEND_DATA少写个16,变成只传送8位,非常感谢你的解答

dongfang 发表于 2026-2-26 13:41:50

浦江老师你好,我参照你的汉字显示函数编写的汉字显示函数,编译没有警告,但页面上出现了警告,我在显示变量数值,编译也出现警告,但也能正常显示,应该指针类型的问题,请帮忙分析分析,如何解决?
我把函数里的指针类型改成char,只在 if(*str>0x80)语句前面出现警告,我又加了个类型转换,警告没了,不知这样合适不合适,但现在显示正常,

void TFT_Str24(u16 X,u16 Y,char * str,u8 Fc,u8 Bc)//显示一个24*24点阵中西文字符串函数
{
      char ch;
while(*str)
{ if((u8)*str>0x80)
    { ch=*str;ch=*(str+1);
      TFT_HZ24(X,Y,ch,Fc,Bc);
      X+=24; str+=2;
    }
    else
    { TFT_A24(X,Y,*str,Fc,Bc); X+=12; str++; }
    if(X>LCD_W-12){ X=0;Y+=24; }
}
}


浦江一水 发表于 2026-2-26 19:23:59

dongfang 发表于 2026-2-26 13:41
浦江老师你好,我参照你的汉字显示函数编写的汉字显示函数,编译没有警告,但页面上出现了警告,我在显示变 ...

   这种现象我的理解是编译环境的版本较高,对语法检验较严格,认为不符合某种C标准,所以提出警告,大多为数据类型不明确. 但是这不是致命错误, 所以能通过编译,运行也正常. 基本可忽略不计. 但是在页面上出现警告,让人看着不舒服,是应该加以克服的.
   具体到上例而言,函数的形参中, char * str 是字符串, 类型是字符型的,每个字符取值范围是0..255. 而在语句调用时, if(*str>0x80)...这就是在比较大小了. 那么取值范围是无符号的0..255呢,还是有符号的-128到+127呢? 这就模糊了, 所以要警告一下. 你加上(u8)强制转换, 数据类型明确了,也就没有警告了.
   应对此类情况, 无非有两种方法, 一个是严格语法表达,二是改变Keil环境设置(比如取消同步语法检验,不警告,具体是要看keil版本在哪设置勾选的).
   不知我的理解是否正确, 仅供参考了.
页: 1 2 3 [4]
查看完整版本: 基于 32G12K128实验箱V9.62_实验之TFT彩屏驱动, ILI9341