匿名科创上位机之显示单片机数据波形

来源:互联网 发布:实木沙发 知乎 编辑:程序博客网 时间:2024/05/16 11:52

为了避免被认定为有推销之嫌,在此向诸位看客特别说明,选择匿明科创作为数据波形显示的软件,完全是出于个人喜好。因为当初在一个比赛中匿明科创在数据分析上帮了我不少忙。而且额,对于这么一款很实用的软件,迫不及待得想与大家一起分享。

废话不少说,在此只讲解匿名科创上位机——波形显示的原理。

首先,波形显示有什么用呢?假设你正在设计一款红外寻迹的智能车,那你肯定很想知道小车上的光电传感器采集到的数据变化吧!!注意是变化,单个数据说明不了什么,而一连串的数据,也即波形,就能使问题大大简化了,同时加上个蓝牙串口模块后,你就可以让小车在赛道上驰骋,而你,只需在电脑前盯着上位机中显示的数据波形想好下一步的算法书写了。

如果各位正是抱着这样目的来的话,那大可跳过前面的一大段废话。咱们直入主题:

从官方上就可以下载到匿名科创的安装包和通信协议,其中,协议中对于串口发送代码的书写很关键。根据“飞控-->上位机”(虽然软件为飞控而设计,但其波形显示部分却对于其他单片机等产品还是很有用的)的部分协议,在串口中发送的每一段数据(即一帧)的格式为:桢头--功能字--长度--数据(一个或多个,具体看协议说明)-校验

例如,当你要选择发送“SENSER“这一帧的数据后,发送的数据格式为“AAAA+02+18+int16 ACC_X,int16 ACC_Y,int16 ACC_Z,int16 GYRO_X,int16 GYRO_Y,int16 GYRO_Z,int16 MAG_X,int16 MAG_Y,int16 MAG_Z(即协议中说到的多个数据)+sum“。

其中SUM等于从该数据帧第一字节开始,也就是帧头开始,至该帧数据的最后一字节所有字节的和,只保留低八位,高位舍去。

协议中长度字节LEN表示该数据帧内包含数据的字节总长度,不包括帧头、功能字、长度字节和最后的校验位,只是数据的字节长度和。比如该帧数据内容为3个int16型数据,那么LEN等于6

以C51单片机为例,其相应代码(在官方代码上修改)如下:

void Uart_Put_Buf(unsigned char *Data_Send,unsigned char _cnt)   /./C51中通过SBUF寄存器向上位机发送数据,每次发送一个字节

    unsigned char i;
for(i=0;i<_cnt;i++){
    ES=0;
    SBUF=Data_Send;  
while(!TI);
TI=0;
ES=1;  
    }
}


void Data_Send_Senser(unsigned int pst)  //按照协议的要求处理数据,pst为包含多个数据的数组,但这里为一个数据
{
unsigned char  _cnt=0;
unsigned char  i=0;
unsigned int j=0,temp;
unsigned char sum = 0;

//char 类型为两个字节
data_to_send[_cnt++]=0xAA;  //桢头
data_to_send[_cnt++]=0xAA;
data_to_send[_cnt++]=0x02;  //功能字
data_to_send[_cnt++]=0;
data_to_send[_cnt++]=pst>>8;  //数据的高8位
data_to_send[_cnt++]=pst&0x00ff;  //数据的低8位


data_to_send[3] = _cnt-4;   //长度

for(i=0;i<_cnt;i++)
 sum =sum+ data_to_send[i];  //校验位
data_to_send[_cnt++] =sum;
Uart_Put_Buf(data_to_send,_cnt);  /./C51中通过SBUF寄存器向上位机发送数据,每次发送一个字节
}

同理,也可以以其他桢的格式发送数据,根据协议中的说明书写代码即可,其中有用户自定义的一个数据帧,可以发送整型,浮点型数据等,具体协议在文末贴出。

(新手写博客,如有纰漏还望斧正!!也请多多谅解)




1 1
原创粉丝点击