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

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

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

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

下载地址:链接:https://pan.baidu.com/s/1m6wiImY1vgCWpbr1RvHGtg
提取码:9bvd
(免安装,打开就能用啦~)
软件界面如图:
(界面直观,非常友好~,哈哈)
如何实现用串口助手实时绘制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 ucahr unsigned char
/**************************************
函数功能:将数据用虚拟示波器表示出来
函数参数:所要发送的值
**************************************/
void virtual_Osc_send_data(uint value)
{
   uchar value_h,value_l;
   uint8_t cmdf[2] = {0x03,0xFC};    //串口调试 使用的前命令
   uint8_t cmdr[2] = {0xFC,0x03};    //串口调试 使用的后命令
   UART_PutBuff(UART0,cmdf,sizeof(cmdf));     //发送前命令
   value_h=value/256;  //高八位
   value_l=value%256;  //低八位
   UART_PutChar(UART0,value_l);      //发送低八位
   UART_PutChar(UART0,value_h);      //发送高八位
   UART_PutBuff(UART0,cmdr,sizeof(cmdr));    //发送数组函数;发送后命令
}
/**************************************************
函数功能:将多个数组数据同时用虚拟示波器的图形表示出来
函数参数:array:所要发送的数组,最多支持8个数组
            len: 所发数组的长度,不得大于8
**************************************************/
void virtual_Osc_send_array(uint *array,uchar len)
{
   uchar value_h[8],value_l[8],i;
   uint8_t cmdf[2] = {0x03,0xFC};    //串口调试 使用的前命令
   uint8_t cmdr[2] = {0xFC,0x03};    //串口调试 使用的后命令
   UART_PutBuff(UART0,cmdf,sizeof(cmdf));     //发送前命令
   for(i=0;i<len;i++)
   {
      value_h[i]=array[i]/256;   //高八位
      value_l[i]=array[i]%256;   //低八位
      UART_PutChar(UART0,value_l[i]);      //发送低八位
      UART_PutChar(UART0,value_h[i]);      //发送高八位
   }
   UART_PutBuff(UART0,cmdr,sizeof(cmdr));    //发送数组函数;发送后命令
}
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位数,即如图设置:
如何实现用串口助手实时绘制16位数据波形图_第2张图片

4.运行效果:

(当当当 当~,这不就出来啦)
如何实现用串口助手实时绘制16位数据波形图_第3张图片

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

如何实现用串口助手实时绘制16位数据波形图_第4张图片

你可能感兴趣的:(单片机,单片机,编程语言,开发工具)