admin管理员组文章数量:1558940
目录
一、DS18B20测温传感器介绍
二、DS18B20测温传感器接线说明
三、测试说明、DS18B20测温传感器驱动代码
四、串口调试助手把采集的DS18B20测温数据发送出来
五、源代码
六、串口调试助手软件
七、DS18B20温度传感器原理图资料
一、DS18B20测温传感器介绍
DS18B20数字温度传感器是DALLAS公司生产的单总线器件,用它来组成一个测温系统具有线路简单,体积小,在一根通信线上可以挂很多这样的数字温度传感器,十分方便。
温度传感器种类众多,应用在高精度、高可靠性的场合时DALLAS公司生产的DS18B20温度传感器当仁不让。超小的体积,超低的硬件开销,抗干扰能力强,精度高,附加功能强,使得DS18B20更受欢迎。DS18B20的优势更是我们学习单片机技术和开发温度相关小产品的不二选择。了解工作原理和应用可以拓宽您对单片机开发的思路。
1、通信采用1-Wire接口
2、每个DS18B20都有唯一的64位序列码储存在板载ROM中
3、无需外部元件
4、可从数据线供电,电源范围为3.0V ~ 5.5V。
5、可测量的温度范围在-55℃ ~ +125℃
6、在-10~+85℃范围内精确度为±0.5℃
7、温度计分辨率可设置为9~12位,12位时分辨率对应为0.0625℃
二、DS18B20测温传感器接线说明
1.VCC 接 3.3V
2.GND 接 地
3.DQ 接 PB1引脚
三、测试说明、DS18B20测温传感器驱动代码
编译环境:keil5
测试单片机: STM32F103C8T6
功能:功能1:设定温度阈值,超过温度阈值触发蜂鸣器报警
功能2:发送温度数据串到口调试助手上进行显示
DS18B20.c文件编写驱动代码如下:
#include "stm32f10x.h" // Device header
#include "Delay.h"
#define DQ_H GPIO_SetBits(GPIOB,GPIO_Pin_1) //PB1
#define DQ_L GPIO_ResetBits(GPIOB,GPIO_Pin_1)
#define DQ_Read GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) //PB1
uint8_t flag=0;
void DS18B20_Init(void) //PB1³õʼ»¯
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //DQ=PB1
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void DS18B20_Output(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void DS18B20_Input(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
uint8_t DS18B20_Reset(void) //¸´Î»
{
uint8_t flag;
DS18B20_Output();
DQ_H;
Delay_us(5);
DQ_L;
Delay_us(480);
DQ_H;
Delay_us(60);
DS18B20_Input();
flag=DQ_Read;
Delay_us(480);
DS18B20_Output();
DQ_H;
return flag;
}
void DS18B20_WriteData(uint8_t data)
{
for(uint8_t i=0;i<8;i++)
{
DS18B20_Output(); //Êä³ö״̬
DQ_L;
Delay_us(2);
if(data&0x01)
{
DQ_H;
}
else
{
DQ_L;
}
Delay_us(60);
DQ_H;
data = data>>1;
}
}
uint8_t DS18B20_ReadData(void)
{
uint8_t data =0;
for(uint8_t i=0;i<8;i++)
{
data=data>>1;
DS18B20_Output();
DQ_L;
Delay_us(2);
DQ_H;
Delay_us(2);
DS18B20_Input();
if(DQ_Read)
data|=0x80;
Delay_us(60);
}
return data;
}
uint16_t DS18B20_ReadTemp(void)
{
uint8_t DL,DH;
uint16_t data;
uint16_t Temperature=0;
flag=0;
DS18B20_Reset();
DS18B20_WriteData(0XCC);
DS18B20_WriteData(0X44);
Delay_ms(750);
DS18B20_Reset();
DS18B20_WriteData(0XCC);
DL=DS18B20_ReadData();
DH=DS18B20_ReadData();
data=DH;
data=data<<8;
data|=DL;
if((data&0XF800)==0XF800)
{
data=~data+0X01;
flag=1;
}
Temperature=data * 0.0625*10;
return Temperature;
}
DS18B20.h文件,对驱动函数经行了声明:
#ifndef __DS18B20_H
#define __DS18B20_H
void DS18B20_Init(void);
uint16_t DS18B20_ReadTemp(void);
uint8_t DS18B20_Reset(void);
extern uint8_t flag;
#endif
四、串口调试助手把采集的DS18B20测温数据发送出来
printf("温度= +%d.%d ℃\r\n",Temp/10%100,Temp%10);
五、源代码
《STM32单片机+DS18B20测温传感器+OLED屏幕+蜂鸣器报警+温度数据发送到串口调试助手》源代码资源-CSDN文库
六、串口调试助手软件
串口调试助手-keil5调试工具资源-CSDN文库
七、DS18B20温度传感器原理图资料
DS18B20温度传感器原理图、模块资料资源-CSDN文库
版权声明:本文标题:STM32单片机+DS18B20测温传感器+OLED屏幕+蜂鸣器报警+温度数据发送到串口调试助手+源代码 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1727405031a1113276.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论