1,串口触摸屏存在的问题
串口触摸屏,一般就是用串口指令控制触摸屏的显示,指令的形式一般是字符串,不容易变化。那么,假如想在触屏上显示变化的参数怎么办?例如是采集到的仪表的变化的数值等。
2,怎么解决
先从串口数据的格式说起,实际来说字符串也是由一个个字符组成的,在发送的时候一个一个发送字符到串口,按照一定的形式编码成字符串。
假如想要在触屏上的某个文本控件t1上显示温度数据,举个例子,假如指令的格式是:t1.txt=”温度:123℃”,那么其实首尾的“t1.txt=”温度:”和“℃””是固定的,我们可以继续用字符串形式发送,只有中间的“123”这个实际的温度值是变化的,需要做一下处理。
一个思路是这样的:串口分段发送指令字符串,分为:指令头、变量部分、指令尾。其中变量部分需要将变量的每一位提取出来,转换为字符,并按照顺序存入数组中,然后逐位发送到串口。一般先发送的那一位会先显示在文本控件的最左边。流程如下:
![8623bc05ab7417d5c52f3d1d680b0131.png](https://i-blog.csdnimg.cn/blog_migrate/fcea070fb918cad1cdf212fc9bf24912.jpeg)
根据上面的例子用一个半完整的实操具体说说:
定义一个温度变量,例如unsigned int temp;
定义一个用于显示的字符数组,例如我们只想显示3位数据,那就定义为unsigned char dis[3];
将温度变量的每一位存入显示数组:
dis[2]=(temp/100)%10+’0’;//将温度变量temp的百位存入数组的dis[2]
dis[1]=(temp/10)%10+’0’; //将温度变量temp的十位存入数组的dis[1]
dis[0]=(temp/1)%10+’0’; //将温度变量temp的个位存入数组的dis[0]
注:最后的“+’0’”是将实际的数据位转换为ASCII码,因为触屏不是只能识别字符串吗,那么英文和数字一般都需要转换为ASCII码的。
用几条串口发送语句进行分别发送:
(1) 先发送指令字符串的头部:“t1.txt=”温度:”;
(2) 再用单字节语句发送温度变量部分,先高位后低位:依次为先dis[2]、dis[1]、dis[0];
(3) 再发送单位的字符串:“℃””;
最后发送结束符。
一般这样处理之后,温度变量temp是根据仪表的信号随时变化的,字符数组dis[]紧接着根据temp的变化而改变。虽然是分为了几条发送语句进行的,但是最终另外的设备从串口接收到的数据与用一条语句发送的结果是一样的。
这样一来,就能顺利地将变量嵌入到字符串指令之中,实现触屏的变量显示。
当然,方法千万种,这只是其中一个方法,可能不是最优,但是比较简单。本文也不是什么高深的技术,一点分享而已,希望有帮助。
全文完,但是分享并没有结束。