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之类的数,这是为什么呢? |