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);
  }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值