浦江一水 发表于 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位,非常感谢你的解答
浦江老师你好,我参照你的汉字显示函数编写的汉字显示函数,编译没有警告,但页面上出现了警告,我在显示变量数值,编译也出现警告,但也能正常显示,应该指针类型的问题,请帮忙分析分析,如何解决?
我把函数里的指针类型改成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; }
}
}
dongfang 发表于 2026-2-26 13:41
浦江老师你好,我参照你的汉字显示函数编写的汉字显示函数,编译没有警告,但页面上出现了警告,我在显示变 ...
这种现象我的理解是编译环境的版本较高,对语法检验较严格,认为不符合某种C标准,所以提出警告,大多为数据类型不明确. 但是这不是致命错误, 所以能通过编译,运行也正常. 基本可忽略不计. 但是在页面上出现警告,让人看着不舒服,是应该加以克服的.
具体到上例而言,函数的形参中, char * str 是字符串, 类型是字符型的,每个字符取值范围是0..255. 而在语句调用时, if(*str>0x80)...这就是在比较大小了. 那么取值范围是无符号的0..255呢,还是有符号的-128到+127呢? 这就模糊了, 所以要警告一下. 你加上(u8)强制转换, 数据类型明确了,也就没有警告了.
应对此类情况, 无非有两种方法, 一个是严格语法表达,二是改变Keil环境设置(比如取消同步语法检验,不警告,具体是要看keil版本在哪设置勾选的).
不知我的理解是否正确, 仅供参考了.