STM32实现DS18B20测温,串口和LCD1602显示(HAL库代码)

DS18B20测温

硬件资料

DS18B20特性

image-20211125153539640

内部存储器表

image-20211125153916706

温度读取及计算

image-20211125154642913

配置寄存器(分辨率)

image-20211125154754145

读写时序

image-20211125160318197

工程创建

  1. MX配置

image-20211125161043490

  1. KEIL工程内添加"DS18B20"驱动

程序编写

DS18B20驱动

复位检测

image-20211125163439236

// 复位检测
uint8_t DS18B20_Reset()
{
	uint8_t flag;
	DS18B20_DQ(0);// 对照复位时序图:
	Delay_us(480);
	DS18B20_DQ(1);// OD门写1即释放管理权,与外部电平无关
	Delay_us(80);// 上拉电阻会自动拉高
	flag = READ_DQ;// 读到0必然是DS18B20拉低,即确认存在;读到1则没有DS18B20拉低
	Delay_us(400);
	return flag;
}

写数据

image-20211125225207003

// 写数据
void DS18B20_WriteByte(uint8_t dat)
{
	uint8_t j;
	for(j=0;j<8;j++)
	{
		DS18B20_DQ(0);// 写0/写1 先拉低
		Delay_us(4);// 延时
		DS18B20_DQ(dat & 0x01);	// 取出最低位,结果全0为0,否则为1
		Delay_us(60);
		DS18B20_DQ(1);		// 释放总线
		Delay_us(6);
		dat = dat >> 1;
	}
}

读数据

image-20211125183531311

// 读数据
uint8_t DS18B20_ReadByte()
{
	uint8_t j,rdata=0;
	for(j=0;j<8;j++)
	{
		rdata >>=1;
		DS18B20_DQ(0);// 先拉低
		Delay_us(4);
		DS18B20_DQ(1);// 释放管理权
		Delay_us(10);// 最多延时15us
		if(READ_DQ==1)
			rdata = rdata | 0x80;
		Delay_us(60);
		DS18B20_DQ(1);// 释放总线
		Delay_us(6);
	}
	return rdata;
}

测量主程序

#include "main.h"
#include "usart.h"
#include "gpio.h"

#include "LCD1602_Sprintf.h"

void SystemClock_Config(void);

float DS18B20_Temp(void);// DS18B20未写.h文件,用函数声明代替

#include <stdio.h>
#include <string.h>
int fputc(int ch,FILE *f)
{
    HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xff);
    return ch;
}

float temper=0;// 温度值显示
char trmper_dis[100]={0};

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();
 
  LCD1602_Init();
  StartMenu(); 
  while (1)
  {
	  temper=DS18B20_Temp();
	  printf("the temper is %.4f\r\n",temper);// 串口显示
	  sprintf(trmper_dis,"%.4f",temper);
      LCD1602_Display_str(2,0,trmper_dis);// LCD1602显示
	  HAL_Delay(2000);
  }
}

版权声明:本文为CSDN博主「wcsq0523」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wcsq0523/article/details/121549804

生成海报
点赞 0

wcsq0523

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

ESP8266 无限重启踩坑

最近做了一个电子墨水屏万年历,在移植屏幕代码时遇到了esp8266无限软复位的问题,如果你的串口打印是以下图片所示,那么恭喜你问题解决了。 造成软复位的原因是因为,程序里有死循环&#xf

小熊派手册查询和ADC深入学习

开发板功能介绍 BearPi-HM Nano开发板是一块专门为鸿蒙OS设计HarmonyOS的开发板,板载高度集 成的2.4GHz WLAN SoC芯片Hi3861,并板载NFC电路及标准的E53接口&#xff0c

GD32 ADC DMA

ADC_F450.cpp #include "Adc_F450.hpp" #include "main.h" #include /* STM32 所用管脚和ADC通道PA4 --- ADC1_IN4 --- ADC24