OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3545|回复: 0

[miniF103] 分享:mini板子DS18B20数字温度的三种方法显示温度值到串口

[复制链接]

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2018-10-1 10:44:42 | 显示全部楼层 |阅读模式
本帖最后由 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]

ALIENTEK MINISTM32 实验23 DS18B20数字温度传感器实验.zip

3.02 MB, 下载次数: 172

业精于勤荒于嬉;行成于思毁于随!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 22:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表