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

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);
    } 


关键字:单片机  传递浮点数 引用地址:单片机传递浮点数方法

上一篇:单片机上操作系统的好处
下一篇:stm8f103调试问题

推荐阅读

LG本周三对外宣称,在柏林IFA展会上,公司将会推出世界首款8K OLED电视。IFA为期6天,周五开幕。到时,LG将会展示88英寸8K OLED电视,屏幕有3300万个自发光像素,对比度无与伦比,黑色极为纯正,它会将OLED电视的画质提升到新等级。 所谓8K,就是说屏幕的水平分辨率达到7680个像素,约等于8K。在目前的数字电视中,这种分辨率算是最高的。单从分辨率看...
机器人,已经渐渐地进入到了我们的生活,虽说机器人在我国的很多行业中都有着应用,但大多数都是大型企业,很多的中小型企业都没有使用工业机器人进行生产。为了解决人工缺失的问题,有些工厂将生产线搬到了不发达的国家,来减低生产成本。造成这种局面的主要有这几个方面。 首先是工业机器人的成本高。现在应用的这些工业机器人,基本属于精密器件,需...
据财联社8月31日报道,对于外界传出断供华为OLED显示屏的消息,京东方在财报会谈纪要中指出,“我们与华为合作很顺畅,没有听说关于断供的事情,我们会根据华为的政策策略相应的提供服务。”搭载京东方第六代柔性AMOLED显示屏的华为Mate X手机 京东方目前是全球第一大LCD面板供应商,在手机OLED领域也仅次于三星,正在快速提升产能。京东方也是华为重要的...
本节主要内容:完成Lora模块单片机STM8L101F3标准库的移植STM8l101F3单片机属于是8位单片机,但和传统的51有很大的区别:1.STM8的内核不一样: 51单片机的内核是传统的8051,STM8是ST独有的8位单片机内核。2.STM8单片机内部的寄存器更多,资源更丰富,功能更强大,价格相比8051更贵一点。3.ST公司提供了STM8单片机对应的标准库,程序开发一般基于标准库来开...

史海拾趣

问答坊 | AI 解惑

高速电子设备硬件设计及电路板的故障分析

高速电子设备硬件设计及电路板的故障分析 主办单位:北京昂讯科技有限公司 培训时间: 2007年9月7—8日 培训地点:北京-------北邮科技大厦 联系电话:010-62247628 010-62254817 联系人: 王先生 培训费用:2200元/人(包括:授课费、 ...…

查看全部问答∨

求MAX3232中文资料

求MAX3232中文资料…

查看全部问答∨

马达控制应用笔记和参考代码

搅得不错,与大家分享下,来源:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=597439&bbs_page_no=1&bbs_id=9999 最近发现突然出现很多人问起如何使用MCU来控制马达,由于工作的原因,最近一直在搞ST7MC和dsPIC30F的BLDC变频控制,手上到 ...…

查看全部问答∨

基于Windows CENET的嵌入式PC视频监控系统.pdf

基于Windows CENET的嵌入式PC视频监控系统.pdf…

查看全部问答∨

大家用的液晶屏有对比度调节的功能吗?

我想让我的液晶屏加上这个功能,请大家出出主意!…

查看全部问答∨

急求通过u盘盘符获取u盘的设备信息

急求通过u盘盘符获取u盘的设备信息pid,vid,serialnumber(USB_DEVICE_DESCRIPTOR结构体中的数据)的方法. 此USB_DEVICE_DESCRIPTOR 数据结构获得的设备pid,vid,serialnumber escriptor.typedef struct _USB_DEVICE_DESCRIPTOR {   UCHAR& ...…

查看全部问答∨

怎么样能把一个26V的电压拉成TTL电平,使用什么芯片?

信号的高电平是26V,低电平是0V,想用单片机检测信号的高低,所以得拉到5V,应该怎么做呢?…

查看全部问答∨

#define ADC2 ((ADC_TypeDef *) ADC2_BASE)

#define ADC2 ((ADC_TypeDef *) ADC2_BASE) 中(ADC_TypeDef *) ADC2_BASE是什么啊定义一指针变量吗求解…

查看全部问答∨

人人都爱易电源——转发有礼!

人人都爱易电源——转发有礼! 活动主题:人人都爱易电源——转发有礼! 活动时间:10月11日—28日 活动链接:https://bbs.eeworld.com.cn/thread-352431-1-1.html …

查看全部问答∨

漏电怎样预防

  静电电压虽高,但电流很小,人触到它后一般情况下没什么感觉。用手摸显示器就是一个例子,虽然显示器表面静电很大,用手触摸甚至有“啪啪”的微小放电声,手却没感觉。所以,如果出现外壳带电,摸到有明显的刺痛感,这种情况就有可能属 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved