STM32 液晶屏 显示字符串 中遇到的一个问题

用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个字符的时候,还没遇到字符串的结束符,所以就接着写后面的字符串。直到遇到结束符或者把那一行屏幕占满。

STM32 液晶屏 显示字符串 中遇到的一个问题

时间: 2024-11-03 23:07:05

STM32 液晶屏 显示字符串 中遇到的一个问题的相关文章

图形化编程娱乐于教,Kittenblock arduino实例,液晶屏显示

跟很多学生聊过,很多学生不是不努力,只是找不到感觉.有一点不可否认,同样在一个教室上课,同样是一个老师讲授,学习效果迥然不同.关键的问题在于,带入感,我能给出的建议,就是咬咬牙,坚持住,没有学不会的知识.会陆续分享图形化编程的经验,希望能够做成一个专题.如果您觉得有用,就给点个赞吧.涉及的软件包括Kittenblock.arduino. 程序解读:数码管计时器,通过延迟时间为一秒,变量加1,完成记录时间 知识点:液晶屏显示,arduino,执行器,结构 重点:液晶屏显示 涉及的软件:Kitten

java集合TreeMap应用---求一个字符串中,每一个字母出现的次数

package cn.itcast.p1.map.test; import java.util.Iterator; import java.util.Map; import java.util.TreeMap; public class TestMap { /** * 练习: * "fdgavcbsacdfs+++AA&&BBB" 获取该字符串中,每一个字母出现的次数. * 要求打印结果是:a(2)b(1)...; * 思路: * 对于结果的分析发现,字母和次数之间存在

请实现一个函数,把字符串中的每一个空格替换成“%20”,比如输入 “We are Happly。” 则输出“we%20are%20happy。”

请实现一个函数,把字符串中的每一个空格替换成"%20",比如输入 "We are Happly."  则输出"we%20are%20happy. " void ReplaceBlank(char String[],int length) { //originalLength 为字符串string的实际长度 //length字符串的总容量 int originalLength  = 0; int numberOfBlank = 0; int i =

51单片机实现SMC1602液晶屏显示实例

-------------------------------------------- LCD1602 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1602的意思是每行显示16个字符,一共可以显示两行.如果是12232液晶(图形型液晶)则表示由1

从一个字符串中删除另一个字符串中出现过的字符

定义一个函数,输入两个字符串,从第一个字符串中删除在第二个中出现过的所偶字符串.例如从第一个字符串"We are students."中删除第二个字符中"auiou"中出现过的字符得到的结果是"W r stdnts" 解题思路:利用哈希查找. #include <stdio.h> void deleteStr2FromStr1(char* str1, char* str2) { if(str1 == NULL || str2 == N

OC-在一个字符串中查找另一个字符串的范围;从一个字符串中提取子串

/* 从字符串@"Welcome to Bejing!",中查找 Beijing的范围. */ #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSString * str1 = @"Welcom to Beijing"; NSString * str2 = @"Beijing"; NSRang

JavaScript将字符串中的每一个单词的第一个字母变为大写其余均为小写

要求: 确保字符串的每个单词首字母都大写,其余部分小写. 这里我自己写了两种方法,或者说是一种方法,另一个是该方法的变种. 第一种: function titleCase(str) { var newarr,newarr1=[]; newarr = str . toLowerCase() . split(" "); for(var i = 0 ; i < newarr . length ; i++){ newarr1 . push(newarr[i][0] . toUpperCa

Python3基础 for循环示例 输出一个字符串中的每一个字符

镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.------------------------------------------ code: word='helloworld' for character in word: print(character,end=' ') #每个字母后加上一个空格 result: ============= RESTART: C:/Users/Administrator/Deskto

一个字符串中查找另一个字符串出现的次数

#include<stdio.h> #include <string.h> int strstrcount( char *str1, char *str2 ) { char *str = str1; int c = 0; while( (str = strstr( str, str2 )) != NULL ) { c++; str++; } return c; } int main() { char str1[20]; char str2[20]; gets(str1); gets