本帖最后由 1208 于 2018-10-26 17:41 编辑
第一种方法:通过将温度值取整取余的模式,输出温度值
第二种方法:强制整形转换为浮点型转换,输出温度值
第三种方法:通过串口发送函数将温度值数据到串口
[mw_shl_code=c,true]#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "ds18b20.h"
//ALIENTEK Mini STM32开发板范例代码23
//DS18B20数字温度传感器实验
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司
void send_tep(u16 buf);
extern u8 tmp[4];
int main(void)
{
u8 t=0;
short temperature;
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为9600
LED_Init(); //初始化与LED连接的硬件接口
LCD_Init();
POINT_COLOR=RED;//设置字体为红色
LCD_ShowString(60,50,200,16,16,"Mini STM32");
LCD_ShowString(60,70,200,16,16,"DS18B20 TEST");
LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(60,110,200,16,16,"2014/3/12");
while(DS18B20_Init()) //DS18B20初始化
{
LCD_ShowString(60,130,200,16,16,"DS18B20 Error");
delay_ms(200);
LCD_Fill(60,130,239,130+16,WHITE);
delay_ms(200);
}
LCD_ShowString(60,130,200,16,16,"DS18B20 OK");
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(60,150,200,16,16,"Temp: . C");
while(1)
{
// static double tmp=0;
if(t%10==0)//每100ms读取一次
{
temperature=DS18B20_Get_Temp();
if(temperature<0)
{
LCD_ShowChar(60+40,150,'-',16,0); //显示负号
temperature=-temperature; //转为正数
}else LCD_ShowChar(60+40,150,' ',16,0); //去掉负号
LCD_ShowNum(60+40+8,150,temperature/10,2,16); //显示正数部分
LCD_ShowNum(60+40+32,150,temperature%10,1,16); //显示小数部分
delay_ms(100);
send_tep(temperature); //第三种方法
// if(USART_RX_STA&0x8000) //通过点击发送,来发送温度数据
// {
// send_tep(temperature);
// USART_RX_STA=0;
// }
// tmp=(double)(temperature/10)+(double)(temperature%10)/10; //强制整形转换为浮点型转换
// printf("%.2lf \r\n",tmp); //第二种方法
// printf("%d.%d\n",temperature/10.temperature%10); //整型输出 第一种方法
}
delay_ms(10);
t++;
if(t==20)
{
t=0;
LED0=!LED0;
}
}
}
void send_tep(u16 buf)
{
int r=0;
u8 tmp[4];
tmp[0]=buf/100+'0';
tmp[1]=(buf%100)/10+'0';
tmp[2]='.';
tmp[3]=buf%10+'0';
USART_SendData(USART1,'\r');while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
for(r=0;r<4;r++)
{
USART_SendData(USART1,tmp[r]);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
}
USART_SendData(USART1,'\n');while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
}
[/mw_shl_code] |