用STM32控制液晶屏显示电流、电压参数。
我希望的结果是这样的:
可是,实际写出来的效果是这样的。
可以看出,电流参数那一行后面多出了几个字符“Volta”,刚好是要下一行需要显示内容的前面一部分。
试着把电流参数值得位数改短一些,比如把前面的20.54改为2.54。显示出来就是正常的。由此想到这个问题的产生可能和要显示的字符串的长度有关。所以就把跟电流显示的相关的代码都看了看,从定义到调用液晶模块的API。
char Current_display[15];// 定义一个与电流参数显示相关的字符串
sprintf(Current_display,"Current=%.3fA",Current); //向Current_display中写需要显示的电流参数字符串
Current_len = strlen(Current_display);//计算Current_display的长度
ili9320_line(160, (u8*)Current_display,Current_len,charColor, bkColor);
//调用液晶屏API向液晶屏写显示内容
既然问题与 要显示的字符串的长度有关,那也与第一行定义的Current_display的长度有关。于是修改其长度(当前是15)。 发现只要该长度大于等于16就正常了。16正是“Current=20.540A”的长度。
也就是说,第一定义的数组,他的长度若不大于需要显示的字符串(Current_display)的实际长度,则会出现上面说的问题。
但是为什么会这样呢?
看第二行代码,执行该行代码后得到的Current_display是后面字符串的实际长度加上1(因为还有一个结束符)
而第三行strlen函数得到的长度是字符串的实际长度。
所以第四行调用API写屏幕的时候,如果Current_display数组定义的长度不大于需要显示的字符(Current_display)的实际长度,当写到第Current_len个字符的时候,还没遇到字符串的结束符,所以就接着写后面的字符串。直到遇到结束符或者把那一行屏幕占满。