float类型 为什么输出会有字母呢?

[复制链接]
1726|4
 楼主| xielaibin 发表于 2013-12-3 16:51 | 显示全部楼层 |阅读模式
float类型 为什么输出会有字母呢?前辈们帮看一下。谢了。。。是关于18B20的程序。

float DS18B20_Get_Temp(void)
{
    u8 temp;
    u8 TL,TH;
short tem;
float temper;
    DS18B20_Start ();        // ds1820 start convert
    DS18B20_Rst();
    DS18B20_Check();  
    DS18B20_Write_Byte(0xcc);// skip rom
    DS18B20_Write_Byte(0xbe);// convert     
    TL=DS18B20_Read_Byte(); // LSB   
    TH=DS18B20_Read_Byte(); // MSB  
        
    if(TH>7)
    {
        TH=~TH;
        TL=~TL;
        temp=0;//温度为负  
    }else temp=1;//温度为正      
    tem=TH; //获得高八位
    tem<<=8;   
    tem+=TL;//获得底八位
    temper=(float)tem*0.625;//转换     
if(temp)return temper; //返回温度值
else return -temper;   
}  

后面的数据处理函数和串口输出是这样写的
void Pro_Data(void)
{
//处理温度数据
temp_float_shi=temperature/10;
temp_float_ge=temperature-temp_float_shi*10;
temp_float_fraction=temperature*10-temp_float_shi*100-temp_float_ge*10;
//temperature=Get_Temperature(void)
temp_char_shi=(unsigned char)(temp_float_shi+48);
temp_char_ge=(unsigned char)(temp_float_ge+48);
temp_char_dot=(unsigned char)(temp_dot);
temp_char_fraction=(unsigned char)(temp_float_fraction+48);
}
void Send_Data(void)
{
USART_SendData(USART1,temp_char_shi);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
USART_SendData(USART1,temp_char_ge);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
USART_SendData(USART1,temp_char_dot);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
USART_SendData(USART1,temp_char_fraction);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
但是输出会是D9.4之类的数,这是为什么呢?
黄小俊 发表于 2013-12-3 17:13 | 显示全部楼层
你错了吧,是乘以0.0625。
Schvian 发表于 2013-12-3 17:20 | 显示全部楼层
这跟float类型没关系,是你转化字符的代码有问题
 楼主| xielaibin 发表于 2013-12-3 18:27 | 显示全部楼层
黄小俊 发表于 2013-12-3 17:13
你错了吧,是乘以0.0625。

哦 是的  谢谢了啊
 楼主| xielaibin 发表于 2013-12-3 18:28 | 显示全部楼层
Schvian 发表于 2013-12-3 17:20
这跟float类型没关系,是你转化字符的代码有问题

跟float确实没关系  是0.0625的问题  谢谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

111

帖子

3

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