先和大家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.直接下载我的资源:/download/weixin_46582567/76124961?spm=1001..3001.5503