蓝桥杯单片机快速开发笔记——DS18B20温度传感器

一、原理分析

        考试时可能会需要自己编写底层驱动的.h文件,编写.h的关键是会查原理图把DQ定义好。

sbit DQ = P1^4;  

二、应用 

  1. 温度监控:DS18B20广泛应用于温度监控系统中,如室内温度监测、工业生产过程中的温度控制等。

  2. 环境监测:DS18B20可用于环境监测系统,如温室温度监测、气象站温度采集等。

  3. 智能家居:在智能家居系统中,DS18B20可用于室内温度控制、智能恒温器等设备。

  4. 电子设备:DS18B20也可应用于电子设备中,如电脑散热系统的温度监测、电池温度监测等。

  5. 医疗设备:在医疗设备中,DS18B20可用于体温监测、恒温器控制等应用。

三、思维导图

四、示例框架

#include "ds18b20.h"
#include "reg52.h"
#include "onewire.h"

float temp_ds18b20 = 0;
extern unsigned int smg_ds18b20;   //数码管显示温度值

//初始化DS18B20的温度,避免在上电的时候,读取温度默认值85,作为当前的采样温度
void Init_DS18B20_Temp()  
{
	unsigned char LSB,MSB;
	
	init_ds18b20();                   //初始化DS18B20
	Write_DS18B20(0xcc);              //忽略ROM操作
	Write_DS18B20(0x44);              //启动温度转换
	
	do{
		init_ds18b20();                 //初始化DS18B20
	  Write_DS18B20(0xcc);            //忽略ROM操作
		Write_DS18B20(0xbe);            //读出内部存储器
		LSB = Read_DS18B20();           //第0字节:温度低8位
		MSB = Read_DS18B20();           //第1字节,温度高8位
		MSB = (MSB << 4) | (LSB >> 4);  //将高8位数据左移4位,然后与低8位数据右移4位后的结果进行或运算,得到完整的16位温度数据。
	}while(MSB == 85);                //直到首次温度转换完成

}

//DS18B20的温度读出
void Read_DS18B20_Temp()  
{
	unsigned char LSB,MSB;
	unsigned int temp = 0;
	
	init_ds18b20();                   //初始化DS18B20
	Write_DS18B20(0xcc);              //忽略ROM操作
	Write_DS18B20(0x44);              //启动温度转换
	DisplaySMG_Info();
	
	init_ds18b20();                   //初始化DS18B20
	DisplaySMG_Info();
	Write_DS18B20(0xcc);            //忽略ROM操作
	Write_DS18B20(0xbe);            //读出内部存储器
	LSB = Read_DS18B20();           //第0字节:温度低8位
	MSB = Read_DS18B20();           //第1字节,温度高8位
	temp = MSB;
	temp = (temp << 8) | LSB;       //合成16位温度原始数据
	
	if((temp & 0xf800) == 0x0000)   //处理正温度
	{
		temp_ds18b20 = temp * 0.0625; //计算实际温度值
	}
	smg_ds18b20 = temp_ds18b20 * 10;//将小数转换成整数方便后续显示
}

        这段代码主要实现了DS18B20温度传感器的初始化、温度读取和显示功能。通过单总线通信协议与DS18B20传感器通信,获取温度数据并进行处理

  1. #include "ds18b20.h"#include "reg52.h"#include "onewire.h":包含了三个头文件,分别是DS18B20传感器的头文件、STC单片机的头文件和单总线通信的头文件。

  2. float temp_ds18b20 = 0;extern unsigned int smg_ds18b20;:定义了一个浮点型变量temp_ds18b20用于存储DS18B20的温度值,以及一个外部声明的无符号整型变量smg_ds18b20用于在数码管上显示温度值。

  3. void Init_DS18B20_Temp():定义了一个无返回值的函数Init_DS18B20_Temp(),用于初始化DS18B20的温度,避免在上电时读取默认温度值85。

  4. unsigned char LSB, MSB;:定义了两个无符号字符型变量LSB和MSB,用于存储DS18B20传感器读取的温度数据的低8位和高8位。

  5. init_ds18b20();Write_DS18B20(0xcc);Write_DS18B20(0x44);:初始化DS18B20传感器,忽略ROM操作,启动温度转换。

  6. do { ... } while (MSB == 85);:使用do-while循环,读取DS18B20传感器的温度数据,直到首次温度转换完成(MSB不等于85)。

  7. void Read_DS18B20_Temp():定义了一个无返回值的函数Read_DS18B20_Temp(),用于读取DS18B20传感器的温度数据并显示在数码管上。

  8. unsigned int temp = 0;:定义了一个无符号整型变量temp,用于存储DS18B20传感器读取的温度数据。

  9. DisplaySMG_Info();:显示数码管信息。

  10. temp = (temp << 8) | LSB;:将高8位数据左移8位,然后与低8位数据进行或运算,得到完整的16位温度数据。

  11. if ((temp & 0xf800) == 0x0000):判断温度数据的符号位,处理正温度。

  12. temp_ds18b20 = temp * 0.0625;:计算实际温度值,乘以0.0625得到实际温度值。

  13. smg_ds18b20 = temp_ds18b20 * 10;:将实际温度值乘以10,转换为整数方便后续显示在数码管上。

  • 17
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木木不迷茫(˵¯͒¯͒˵)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值