[其他ST产品] 基于STM32和Zigbee的电力表数据采集

[复制链接]
2025|23
 楼主| 结合国际经验 发表于 2023-5-30 16:26 | 显示全部楼层
float浮点型数据转化成char字符型数据输出
通常我们发送数据的模式有两种,一种16进制,一种是ASCII码。16进制的经常会用来和仪器PLC等设备通讯。ACSII码是一种文本模式。当我们不点选16进制时,按文本模式发送。这时我们输入的文本区的内容是一个个字符。比如输入50 ,这时50为‘5’和‘0’两个字符。发送的时候会将字符‘5’的ASCII码和字符‘0’的ASCII码发送出去,即是0x35,0x30 。当我们按16进制发送50 时,这时50为一个数即0x50。
 楼主| 结合国际经验 发表于 2023-5-30 16:26 | 显示全部楼层
  1. //============================================================
  2. //函数名称 :Turn_Float_to_str
  3. //函数功能 :将浮点型数据转换成字符串数组输出给串口调试助手
  4. //输入变量 :要转化的数据date 。       
  5. //返 回 值 :字符串的数组str[]
  6. //============================================================
  7. void Turn_Float_to_str(float date)
  8. {
  9.         u8 len1,len2,i;//len1是整数部分的位数,len2是小数部分的位数
  10.         //【!】字符串类型的数据定义的时候需要初始化,发送完成之后需要复位,因为
  11.         u8 str1[5],str2[5],str[10];//str1[],str2[5]分别存放整数部分 小数部分的每一位数字(肯定是从个位开始倒序存的)str[10]把他们正过来再添加小数点
  12.         u16 zhengshu,xiaoshu;
  13.         u16 a1;//a1做中间变量,防止提取整数部分时zhengshu的值改变 影响下面xiaoshu计算,
  14.        
  15.         //test by zzz 20201101【!】
  16.         //经测试,若使用强制数据类型转换在某些情况下会出现数据异常,但是问题并没能复现,所以将代码改了回来,如果后续测试出现问题可以考虑修改此处,下面小数部分同
  17.         zhengshu=(u16)date;//把浮点数的整数部分提取出来
  18.        
  19.         a1=zhengshu;
  20.         len1=number_figure(zhengshu);//调用函数number_figure()计算整数部分的长度
  21.        
  22.         //把整数部分每位提取出来
  23.         //如果整数部分是零
  24.         if(len1==0)
  25.         {
  26.                 str[0]=0x30;
  27.                 len1=1;
  28.         }
  29.         else
  30.         {
  31.                 for(i=0;i<len1;i++)
  32.         {
  33.                 str1[i]=(u8)(a1%10);
  34.                 a1 /=10;
  35.                 str[len1-1-i]=str1[i]+0x30;//十进制数与其对应的字符他们的ASCLL码相差0x30
  36.         }
  37.        
  38.         }
  39.                                                                                
  40.        
  41.         xiaoshu=(u16)((date-zhengshu)*100);//保留两位小数
  42.         len2=number_figure(xiaoshu);
  43.         for(i=0;i<len2;i++)
  44.         {
  45.                 str2[i]=(u8)(xiaoshu%10);
  46.                 xiaoshu /=10;
  47.                 str[len1+len2-i]=str2[i]+0x30;
  48.         }
  49.         str[len1]=0x2E;
  50.        
  51.         sendArry(USART2,str,(len1+len2+1));
  52.         a1 = 0;
  53.        
  54. }

如果要通过串口调试助手显示浮点型数据,就要把浮点型数据每一位对应的ASCLL码发送给串口。
具体程序如下:
 楼主| 结合国际经验 发表于 2023-5-30 16:27 | 显示全部楼层
这样就可以将浮点型数转化成字符串通过串口输出。
附上成果图:
930806475b35ba1fb7.png
至此,第一阶段的任务基本完成,下面就该写上位机程序了。先暂时拜拜了,我去学上位机了!!!
 楼主| 结合国际经验 发表于 2023-5-30 16:27 | 显示全部楼层
这样就可以将浮点型数转化成字符串通过串口输出。
附上成果图:

至此,第一阶段的任务基本完成,下面就该写上位机程序了。先暂时拜拜了,我去学上位机了!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部