金牌会员
 
- 积分
- 1790
- 金钱
- 1790
- 注册时间
- 2018-3-26
- 在线时间
- 294 小时
|
发表于 2019-12-5 08:56:46
|
显示全部楼层
接收到的数据是ascii码,可以把数据存到字符数组里面,再atoi转成整形变成数字。
比如这段程序就是简单的分离美元号之间的数字 A$1000$3000 就能分离出1000 和 3000
- void Analysis_data(u8 *USART_RX_BUF,u32 *freq, u16 *pulse)
- {
- u8 *p = USART_RX_BUF;
- u8 pos = 0, pos1 = 0;
- u8 len = 0;
- u8 *ff,*pp;
- u8 ff1[6] = {0};
-
- pos = NMEA_Comma_Pos(p,1);
- pos1 = NMEA_Comma_Pos(p,2);
- len = pos1 - pos - 1;
-
- ff = p+pos;
- pp = p+pos1;
- if(len>6)
- {
- printf("输入格式有误!!!\r\n");
- return ;
- }
- strncpy((char *)ff1,(char *)ff,len);
- *freq = atoi((char *)ff1);
- *pulse = atoi((char *)pp);
- }
- //m^n函数
- //返回值:m^n次方.
- u32 NMEA_Pow(u8 m,u8 n)
- {
- u32 result=1;
- while(n--)result*=m;
- return result;
- }
- u8 NMEA_Comma_Pos(u8 *buf,u8 cx)
- {
- u8 *p=buf;
- while(cx)
- {
- // if(*buf==''||*buf<' '||*buf>'z')
- // {
- // return 0XFF;//遇到'*'或者非法字符,则不存在第cx个逗号
- // }
- if(*buf==')cx--;
- buf++;
- }
- return buf-p;
- }
复制代码 |
|