通过stm32读取DS18B20并在显示屏上显示温度值(附源码)

您所在的位置:网站首页 ds18b20数码管显示温度 通过stm32读取DS18B20并在显示屏上显示温度值(附源码)

通过stm32读取DS18B20并在显示屏上显示温度值(附源码)

2024-07-17 21:56| 来源: 网络整理| 查看: 265

目录

一、前言

二、传感器概述

2.1 传感器简介

2.2 引脚说明

 2.3 读时序

2.4 写时序

2.5 DS18B20的特性

2.6 相关电气特性

三、接线说明

四、程序编写

4.1 DS18B20.C

4.2 DS18B20.H

4.3 读取DS8B20温度值并显示在OLED显示屏上

4.4 main函数代码

五、最终效果

 

 

一、前言

使用stm32f103c8t6的芯片,在OLED显示屏上显示DS18B20的温度值。

二、传感器概述 2.1 传感器简介 DS18B20 数字温度计提供 9 位温度读数,指示器件的温度信息经过单线接口送入 DS18B20 或从 DS18B20 送出, 因此从中央处理器到 DS18B20 仅需连接一条线。 读、写和完成温度变换所需的电源可以由数据线本身提供而不需要外部电源。 19f3201199724f5a8207c070200f1651.png 2.2 引脚说明 ca7374ee744049caa8cfe616e7c51713.png

 

 2.3 读时序

0211fd1044fb4fc2b9025def91870933.png

2.4 写时序

4abd49952bb14bdfa51d6af7a763521c.png

2.5 DS18B20的特性

1.独特的单线接口 ,只需 1 个接口引脚即可通信。 2.每个设备的内部ROM上都烧写了一个独一无二的64位序列号。 3无需外部元件。 4.能够采用数据线供电,供电范围为3.0V至5.5V。 5.温度可测量范围为:-55℃至+125℃(-67℉至+257℉)。 6.温度范围超过-10℃至85℃之外时测温分辨率0.5℃。 7.以 9 位数字值方式读出温度。 8.在 1 秒( 典型值 )内把温度变换为数字。 9.用户可定义的 非易失性的温度告警设置。 10.告警搜索命令识别和寻址温度在编定的极限之外的器件(温度告警情况)。 11.应用范围包括恒温控制 工业系统 消费类产品 温度计或任何热敏系统。

  2.6 相关电气特性   cd53b3a5ff2147b5a7dd59ce1232bf73.png

 

三、接线说明

88c411978db94731b96c9cf00956f82b.png

本文使用的是stm32f103c8的芯片,VCC接3.3V,信号线接PB12 引脚。

 

四、程序编写 4.1 DS18B20.C #include "ds18b20.h" #include "stm32f10x.h" /************************************************************************************** * 描 述 : 配置DS18B20用到的I/O口 * 入 参 : 无 * 返回值 : 无 **************************************************************************************/ static void DS18B20_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(DS18B20_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = DS18B20_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DS18B20_PORT, &GPIO_InitStructure); GPIO_SetBits(DS18B20_PORT, DS18B20_PIN); //DS18B20数据引脚初始化配置为高电平输出 } /************************************************************************************** * 描 述 : 配置使DS18B20-DATA引脚变为输入模式 * 入 参 : 无 * 返回值 : 无 **************************************************************************************/ static void DS18B20_Mode_IPU(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = DS18B20_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入 GPIO_Init(DS18B20_PORT, &GPIO_InitStructure); } /************************************************************************************** * 描 述 : 配置使DS18B20-DATA引脚变为输出模式 * 入 参 : 无 * 返回值 : 无 **************************************************************************************/ static void DS18B20_Mode_Out_PP(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = DS18B20_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DS18B20_PORT, &GPIO_InitStructure); } /************************************************************************************** * 描 述 : 主机给从机发送复位脉冲 * 入 参 : 无 * 返回值 : 无 **************************************************************************************/ static void DS18B20_Rst(void) { DS18B20_Mode_Out_PP(); //主机设置为推挽输出 DS18B20_DATA_OUT(LOW); //主机至少产生480us的低电平复位信号 Delay_us(750); DS18B20_DATA_OUT(HIGH); //主机在产生复位信号后,需将总线拉高 Delay_us(15); //从机接收到主机的复位信号后,会在15~60us后给主机发一个存在脉冲 } /************************************************************************************** * 描 述 : 检测从机给主机返回的存在脉冲 * 入 参 : 无 * 返回值 : 0:成功 1:失败 **************************************************************************************/ static u8 DS18B20_Presence(void) { u8 pulse_time = 0; DS18B20_Mode_IPU(); //主机设置为上拉输入 /* 等待存在脉冲的到来,存在脉冲为一个60~240us的低电平信号 * 如果存在脉冲没有来则做超时处理,从机接收到主机的复位信号后,会在15~60us后给主机发一个存在脉冲 */ while( DS18B20_DATA_IN() && pulse_time=100 ) //经过100us后,存在脉冲都还没有到来 return 1; //读取失败 else //经过100us后,存在脉冲到来 pulse_time = 0; //清零计时变量 while( !DS18B20_DATA_IN() && pulse_time=240 ) // 存在脉冲到来,且存在的时间超过了240us return 1; //读取失败 else return 0; } /************************************************************************************** * 描 述 : 从DS18B20读取一个bit * 入 参 : 无 * 返回值 : u8 **************************************************************************************/ static u8 DS18B20_Read_Bit(void) { u8 dat; /* 读0和读1的时间至少要大于60us */ DS18B20_Mode_Out_PP(); /* 读时间的起始:必须由主机产生 >1us


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3