当前位置: 首页 > news >正文

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

1.分析原理图

在这里插入图片描述
通过上图我们可以看到DS18B20通过单总线接到了单片机的P14上。

2.查阅DS18B20使用手册

比赛的时候是会提供DS18B20单总线通讯协议的代码,但是没有提供读取温度数据的代码,所以还是需要我们去查看手册,我只把重要部分截下来了
在这里插入图片描述
在这里插入图片描述
解释一下上图,DS18B20使用12位(默认精度12位,可以修改)数据格式,最高位为符号位,其实就是温度数据以补码形式存放在了两个暂存器里。实际上高位暂存器的高5位全用来放符号位了,只有低3位是数据位。在读温度数据的时候,DS18B20先送出低暂存器,再送出高暂存器数据。

在这里插入图片描述

3.完整封装库

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

#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.使用数码管显示温度示例

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

http://www.lryc.cn/news/288692.html

相关文章:

  • 黑盒测试用例的具体设计方法(7种)
  • docker镜像管理命令
  • 深入理解STM32中断处理机制
  • 基于机器学习的地震预测(Earthquake Prediction with Machine Learning)
  • 《30天自制操作系统》 第一周(D1-D7) 笔记
  • SQL注入:报错注入
  • K8s 安装部署-Master和Minion(Node)文档
  • OpenAI 降低价格并修复拒绝工作的“懒惰”GPT-4,另外ChatGPT 新增了两个小功能
  • springboot+value静态属性获取配置文件中的值的操作方法
  • Prometheus 架构全面解析
  • 把批量M3U8网络视频地址转为MP4视频
  • 联合 Maxlinear 迈凌 与 Elitestek 易灵思 - WPI 世平推出基于 FPGA 芯片的好用高效电源解决方案
  • Keycloak - docker 运行 前端集成
  • 架构篇27:如何设计计算高可用架构?
  • Python 有用的库模块
  • vivado DDS学习
  • 微信小程序(十六)slot插槽
  • gtest 单元测试
  • 掌握assert的使用:断言在错误检查和调试中不可或缺
  • 概念杂记--到底啥是啥?(数据库篇)
  • Ubuntu20.4 Mono C# gtk 编程习练笔记(四)
  • 1 月 26日算法练习
  • 今日AI大热潮,明日智能风向标
  • 03 SB实战 -微头条之首页门户模块(跳转某页面自动展示所有信息+根据hid查询文章全文并用乐观锁修改阅读量)
  • Abaqus许可分析工具
  • 【开发工具】从eclipse到idea的过度
  • 【QT+QGIS跨平台编译】之十一:【libzip+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
  • openlayers+vue实现缓冲区
  • (大众金融)SQL server面试题(3)-客户已用额度总和
  • c语言笔记