如何实现用串口助手实时绘制16位数据波形图

先和大家kuan两句,哈哈。因为之前参加智能车想用波形显示来调节PID,找了很多工具也没有成功,心里也知道串口一次就是只能发送八位数据,很多时候可以用字符显示16位的,但是就不是数据,而是字符串,字符串和数据最大的不同应该在于是否能计算的差别吧,所以字符串肯定是不能用图形表示的。之后看到山外这款串口助手虚拟示波器“类型”中明明有无符号16位的,但是查了很多资料都没有发送16位数据的代码,也在其中放弃过找寻其他的软件,但是心里又一直坚信着这款软件的功能应该不会骗我的,哈哈,就试了几次代码,发现终于成功了。哈哈,挺开心的吧,自己一直相信的事情实现了,好啦不多说上正题!

1.工具:山外多功能调试助手

软件界面如图:
(软件非原创,下文的代码只能说是对于这个软件功能的扩展和补充)
(界面直观,非常友好~,哈哈)
在这里插入图片描述

2.代码:

这里用虚拟示波器画出图形是有协议的,如代码中一样,先发送前命令{0x03,0xFC};之后即发送对应的数据,以无符号 16 位为例,是先发送低八位,再发送高八位,其他的数据类型也是如此,由低八位到高八位发送数据,如 virtual_Osc_send_data 函数,当然,同时绘制多条波形图也是在这里,即用循环控制发送不同数组就 OK,如 virtual_Osc_send_array 函数;最后发送后命令{0xFC,0x03},代表数据发送完成。
即发送格式:
前命令{0x03,0xFC}+由低 8 位依次到高 8 位的数据+后命令{0xFC,0x03}。
(供大家参考,拿走不谢噢~)

/*
功能:串口值用山外虚拟示波器绘图出来,支持16位数据等
说明:串口发送函数依照不同的单片机而定;
      数据类型由自己宏定义,包括无符号整型和无符号字符型
*/
#define uint  unsigned int
#define uchar unsigned char

/**********************************************
函数功能:串口发送单个字节函数
函数参数:value:发送的单字节数据
注意:需要自己填充使用的串口发送函数以及串口号
**********************************************/
void  UART_PutChar(uchar value)
{
   //留给各位程序员们自己的操作空间。这里由于每个芯片封装的库函数名以及串口号不一样,我这里就不写了,大家自己根据实际情况移植过来就好
}

/**************************************
函数功能:将数据用虚拟示波器表示出来
函数参数:所要发送的值
**************************************/
void virtual_osc_send_data(uint value)
{
   uchar value_h,value_l;
   uchar cmdf[2] = {0x03,0xFC};    //串口调试 使用的前命令
   uchar cmdr[2] = {0xFC,0x03};    //串口调试 使用的后命令
   UART_PutChar(cmdf[0]);		 //发送前命令,代表开始虚拟示波器的数据
   UART_PutChar(cmdf[1]);  
   
   value_l=value%256;  //低八位
   value_h=value/256;  //高八位
   UART_PutChar(value_l);      //发送低八位
   UART_PutChar(value_h);      //发送高八位
   
   UART_PutChar(cmdr[0]);		//发送后命令,代表结束虚拟示波器的数据
   UART_PutChar(cmdr[1]);
}

/**************************************************
函数功能:将多个数组数据同时用虚拟示波器的图形表示出来
函数参数:array:所要发送的数组,最多支持8个数组
            len: 所发数组的长度,不得大于8
**************************************************/
void virtual_osc_send_array(uint *array,uchar len)
{
   uchar value_h[8],value_l[8],i;
   uchar cmdf[2] = {0x03,0xFC};    //串口调试 使用的前命令
   uchar cmdr[2] = {0xFC,0x03};    //串口调试 使用的后命令
   UART_PutChar(cmdf[0]);
   UART_PutChar(cmdf[1]);
   for(i=0;i<len;i++)
   {
      value_l[i]=array[i]%256;  //低八位
   	  value_h[i]=array[i]/256;  //高八位
      UART_PutChar(value_l[i]);      //发送低八位
      UART_PutChar(value_h[i]);      //发送高八位
   }
   UART_PutChar(cmdr[0]);		//发送后命令
   UART_PutChar(cmdr[1]);
}

/*************************************
函数功能:一个简单的调用函数测试用
*************************************/
void virtual_Osc_Test(void)
{
    unsigned int MICVmin[8];           
	while(1)
	{
		MICVmin[0]=ADC_Read(ADC0);
		MICVmin[1]=ADC_Read(ADC1);
		MICVmin[2]=ADC_Read(ADC2);
		MICVmin[3]=ADC_Read(ADC3);
		MICVmin[4]=ADC_Read(ADC4);
		MICVmin[5]=ADC_Read(ADC5);
		MICVmin[6]=ADC_Read(ADC6);
		MICVmin[7]=ADC_Read(ADC7);
		virtual_osc_send_array(MICVmin,8);
	}
}

3.说明:

(这里也要细心噢~)
定义了同时发送的数组个数以及数据类型要和软件对应,比如同时发送8个数组,发送的数据类型为无符号16位数,即如图设置:
在这里插入图片描述

4.运行效果:

(当当当 当~,这不就出来啦)
在这里插入图片描述

5.现在我们就可以愉快地用串口发送数据用图形表示出来啦~

软件获取:
1.关注公众号“脑补空间”发送“山外助手”即可获取网盘链接~
2.直接下载我的资源:https://download.csdn.net/download/weixin_46582567/76124961?spm=1001.2014.3001.5503
在这里插入图片描述

  • 48
    点赞
  • 149
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT狼~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值