蓝桥杯备战——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.使用数码管显示温度示例

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

相关推荐
蹊黎3 小时前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
无敌贵点大王7 小时前
从寄存器层面重学STM32(6)——串口USART实战部分
stm32·单片机·嵌入式硬件
庙堂龙吟奈我何7 小时前
二进制和十六进制
stm32·单片机
国科安芯8 小时前
长期在轨的计算底座:商业空间站与在轨服务飞行器健康管理中的抗辐射MCU—— 面向可维护空间平台的分层容错与安全通信综述
人工智能·单片机·嵌入式硬件·安全·低轨卫星·抗辐射
不昀10 小时前
RMII切到10Mbps,50MHz参考时钟也要降到5MHz吗?
单片机·嵌入式硬件·硬件设计·以太网接口
路上有只喵11 小时前
认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇6
单片机·嵌入式硬件
国科安芯12 小时前
核电站蒸汽发生器传热管在役无损检测模拟前端的低噪声供电研究
嵌入式硬件·ldo·低压差线性稳压器·无损检测·核电站·蒸汽发生器·传热管
集芯微电科技有限公司13 小时前
40V/24A高频率增强型GaN HEMT功率开关管/高频DC转换/电动工具/GaN充电器 方案首选
人工智能·科技·单片机·嵌入式硬件·深度学习·神经网络·生成对抗网络
十八岁牛爷爷13 小时前
STM32H7 长时间运行后 HTTP 断连:从“串口还活着”到 TX 描述符错账
stm32·单片机·嵌入式硬件
Lxx_Zw13 小时前
串口命令如何从字符串长成协议:帧头、长度、校验和与状态机
c语言·stm32·单片机·嵌入式硬件