发新帖我要提问
12
返回列表
打印
[其他ST产品]

基于STM32和Zigbee的电力表数据采集

[复制链接]
手机看帖
扫描二维码
随时随地手机跟帖
21
float浮点型数据转化成char字符型数据输出
通常我们发送数据的模式有两种,一种16进制,一种是ASCII码。16进制的经常会用来和仪器PLC等设备通讯。ACSII码是一种文本模式。当我们不点选16进制时,按文本模式发送。这时我们输入的文本区的内容是一个个字符。比如输入50 ,这时50为‘5’和‘0’两个字符。发送的时候会将字符‘5’的ASCII码和字符‘0’的ASCII码发送出去,即是0x35,0x30 。当我们按16进制发送50 时,这时50为一个数即0x50。

使用特权

评论回复
22
结合国际经验|  楼主 | 2023-5-30 16:26 | 只看该作者
//============================================================
//函数名称 :Turn_Float_to_str
//函数功能 :将浮点型数据转换成字符串数组输出给串口调试助手
//输入变量 :要转化的数据date 。       
//返 回 值 :字符串的数组str[]
//============================================================
void Turn_Float_to_str(float date)
{
        u8 len1,len2,i;//len1是整数部分的位数,len2是小数部分的位数
        //【!】字符串类型的数据定义的时候需要初始化,发送完成之后需要复位,因为
        u8 str1[5],str2[5],str[10];//str1[],str2[5]分别存放整数部分 小数部分的每一位数字(肯定是从个位开始倒序存的)str[10]把他们正过来再添加小数点
        u16 zhengshu,xiaoshu;
        u16 a1;//a1做中间变量,防止提取整数部分时zhengshu的值改变 影响下面xiaoshu计算,
       
        //test by zzz 20201101【!】
        //经测试,若使用强制数据类型转换在某些情况下会出现数据异常,但是问题并没能复现,所以将代码改了回来,如果后续测试出现问题可以考虑修改此处,下面小数部分同
        zhengshu=(u16)date;//把浮点数的整数部分提取出来
       
        a1=zhengshu;
        len1=number_figure(zhengshu);//调用函数number_figure()计算整数部分的长度
       
        //把整数部分每位提取出来
        //如果整数部分是零
        if(len1==0)
        {
                str[0]=0x30;
                len1=1;
        }
        else
        {
                for(i=0;i<len1;i++)
        {
                str1[i]=(u8)(a1%10);
                a1 /=10;
                str[len1-1-i]=str1[i]+0x30;//十进制数与其对应的字符他们的ASCLL码相差0x30
        }
       
        }
                                                                               
       
        xiaoshu=(u16)((date-zhengshu)*100);//保留两位小数
        len2=number_figure(xiaoshu);
        for(i=0;i<len2;i++)
        {
                str2[i]=(u8)(xiaoshu%10);
                xiaoshu /=10;
                str[len1+len2-i]=str2[i]+0x30;
        }
        str[len1]=0x2E;
       
        sendArry(USART2,str,(len1+len2+1));
        a1 = 0;
       
}

如果要通过串口调试助手显示浮点型数据,就要把浮点型数据每一位对应的ASCLL码发送给串口。
具体程序如下:

使用特权

评论回复
23
结合国际经验|  楼主 | 2023-5-30 16:27 | 只看该作者
这样就可以将浮点型数转化成字符串通过串口输出。
附上成果图:

至此,第一阶段的任务基本完成,下面就该写上位机程序了。先暂时拜拜了,我去学上位机了!!!

使用特权

评论回复
24
结合国际经验|  楼主 | 2023-5-30 16:27 | 只看该作者
这样就可以将浮点型数转化成字符串通过串口输出。
附上成果图:

至此,第一阶段的任务基本完成,下面就该写上位机程序了。先暂时拜拜了,我去学上位机了!!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则