单片机传输浮点数给android,单片机传递浮点数方法

突然用到了用单片机和上位机进行传递浮点数方法是这样的。

1.将浮点数转化为整数,然后传递整数的ascII码形式。

2.进行编码,这个暂时我是这样理解的,比方说a=7.345678这样的浮点数。

可以进行编码  成一个帧数据    帧头 +数据位+ 整数编码+加小数点+小数编码

具体的解码方法是:a/1取整,得到整数7,然后再添加一个小数点编码!(如0x55),然后再用a-7得到小数部分,然后将小数扩大10倍。再取整然后继续进行取整,以此类推将

小数都编码成功。然后发送过去就可以了。

3.第三种方法也是利用内存,不用知到浮点数的具体编码方式,因为在单片机中浮点数占4个字节,就知道这一点就可以了,我们可以采用联合体的方式,

float value=-17.484;

union                            //联合体定义

{

u8 a[4];

float b;

}temp;

void  Change_to_byte(void)

{

temp.b   = value;                //将数据存入联合休中

array[0] = temp.a[0];        //一个字节一个字节的取出来

array[1] = temp.a[1];

array[2] = temp.a[2];

array[3] = temp.a[3];

}

再用串口把array[0...4]发送出去就可以了,大功告成。

4.收到这种方法的启发,当然我们也可以使用指针来做。

float value=-9.4567;

float *p=&value;

unsigned char *q;

/*******************************************************************************

* 函数名   : main

* 函数描述     : 主函数

* 输入参数      : 无

* 输出结果     : 无

* 返回值        : 无

*******************************************************************************/

int main(void)

{

int j;

/*设置系统时钟 */

RCC_Configuration();

/* 设置GPIO端口 */

GPIO_Configuration();

/* 设置 USART */

USART_Configuration();

q=(unsigned char *)p;

while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) != SET);

for(j=0;j<4;j++)//发送四个字节,表示一个浮点数

{

USART_SendData(USART1,q[j]);

while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) != SET);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值