蓝桥杯备战——7.DS18B20温度传感器

1.分析原理图

通过上图我们可以看到DS18B20通过单总线接到了单片机的P14上。

2.查阅DS18B20使用手册

比赛的时候是会提供DS18B20单总线通讯协议的代码,但是没有提供读取温度数据的代码,所以还是需要我们去查看手册,我只把重要部分截下来了

解释一下上图,DS18B20使用12位(默认精度12位 ,可以修改)数据格式,最高位为符号位,其实就是温度数据以补码形式存放在了两个暂存器里。实际上高位暂存器的高5位全用来放符号位了,只有低3位是数据位。在读温度数据的时候,DS18B20先送出低暂存器,再送出高暂存器数据。

3.完整封装库

请理解记忆,注意阅读注释,比赛时直接套用就行。

c 复制代码
#include "ds18b20.h"

//单总线延时函数
void Delay_OneWire(unsigned int t)
{
	t*=10;	//STC15F系列比STC89C52快7~12倍左右,如果是1T单片机,请务必加上此行
  	while(t--);
}

//DS18B20芯片初始化
bit Init_DS18B20(void)
{
	bit initflag = 0;
	DQ = 1;
	Delay_OneWire(12);
	DQ = 0;
	Delay_OneWire(80); 
	DQ = 1;
	Delay_OneWire(10); 
	initflag = DQ;    
	Delay_OneWire(5);
  
	return initflag;
}

//通过单总线向DS18B20写一个字节
void Write_DS18B20(unsigned char dat)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		DQ = 0;
		DQ = dat&0x01;
		Delay_OneWire(5);
		DQ = 1;
		dat >>= 1;
	}
	Delay_OneWire(5);
}

//从DS18B20读取一个字节
unsigned char Read_DS18B20(void)
{
	unsigned char i;
	unsigned char dat;
  
	for(i=0;i<8;i++)
	{
		DQ = 0;
		dat >>= 1;
		DQ = 1;
		if(DQ)
		{
			dat |= 0x80;
		}	    
		Delay_OneWire(5);
	}
	return dat;
}

/*******************上面的代码比赛时会提供********************/

//获取到温度,带符号,带小数点
float GetTemp()
{
	u8 byte0,byte1;
	u16 T;
	Init_DS18B20();	//初始化
	Write_DS18B20(0XCC);	//跳过ROM操作
	Write_DS18B20(0X44);	//启动温度转换
	Delay_OneWire(200);
	
	Init_DS18B20();
	Write_DS18B20(0XCC);
	Write_DS18B20(0XBE);	//读取暂存器
	byte0 = Read_DS18B20();	//读取低8位温度数据
	byte1 = Read_DS18B20();	//读取1高8位温度数据
	T=(byte1<<8)| byte0;	//T为补码形式,低11位数据位,高5位符号位
	
	if(byte1>0X07){	//若符号位为1,温度<0,补码->反码->原码
		T=~(T-1);
		return 0-(T*0.0625);	//返回真实温度
	}
	else return T*0.0625;
}

4.使用数码管显示温度示例

这里就是使用我前面封装的数码管显示函数来显示获取到的温度数据,两位整数加上一位小数。

相关推荐
Zhao1368245539122 分钟前
DP4330A 与DP4363 测试对比
嵌入式硬件
辛迪聊物业数字化27 分钟前
智慧社区小程序落地避坑指南:3类物业方案选型+成本测算,线上服务零翻车
大数据·嵌入式硬件·百度·系统架构
电子科技圈1 小时前
Arm电机控制开发工具哪家强?
arm开发·单片机·嵌入式硬件·设计模式·软件构建
JasmineX-11 小时前
下位机直接控制57步进电机匀速转动
stm32·单片机·嵌入式硬件
聆思科技AI芯片2 小时前
【AI硬件开发上手教程】怎么使用AI编程实现小聆AI语音控制舵机
人工智能·嵌入式硬件·开源·ai编程·智能硬件
abc light2 小时前
ARM 裸机开发(6)——时钟树与定时器
arm开发·单片机·fpga开发
吠品12 小时前
智谱开源 ZCode 之后,真正的考试才开始
单片机·嵌入式硬件·1024程序员节
Chery114013 小时前
高速ADC与精密DAC怎么选?DP9230D与DP8532D应用解析
嵌入式硬件·物联网·射频工程
小李不想当小白16 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
LCG米16 小时前
STM32驱动W5500以太网模块实测:TCP吞吐瓶颈定位、TX指针回绕陷阱与断线重连保活落地
stm32·单片机·嵌入式硬件·tcp/ip