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

单片机驱动多个ds18b20

目录

1设计内容

2ds18b20介绍

2.1传感器引脚及原理图

2.2寄存器配置

3程序实现

3.1配置初始化

3.2配置寄存器

3.3ROM读取

3.4温度读取


1设计内容

通过51单片机,读取总线上挂载的多个ds18b20的温度信息。

如下图,成功读取到3路温度数据。

2ds18b20介绍

2.1传感器引脚及原理图


DS18B20传感器的引脚及封装图如下:


DS18B20一共有三个引脚,分别是:

GND:电源地线
DQ:数字信号输入/输出端。
VDD:外接供电电源输入端。


单个DS18B20接线方式: VDD接到电源,DQ接单片机引脚,同时外加上拉电阻,GND接地

注意这个上拉电阻是必须的,就是DQ引脚必须要一个上拉电阻.

2.2寄存器配置

DS18B20写入的功能命令:

ROM指令:

采用多个DS18B20时,需要写ROM指令来控制总线上的某个DS18B20
如果是单个DS18B20,直接写跳过ROM指令0xCC即可
在这里插入图片描述

RAM指令,DS18B20的一些功能指令

常用的是:

温度转换 0x44

开启温度读取转换,读取好的温度会存储在高速暂存器的第0个和第一个字节中

读取温度 0xBE
读取高速暂存器存储的数据
在这里插入图片描述

3程序实现

3.1配置初始化

/**初始化DS18B20**/
bit InitDS18B20ACK(){bit ACK;//用来判断DS18B20是否初始化成功EA = 0;DS18B20_IO = 0;DS18B20_delayms(1);DS18B20_IO = 1;DS18B20_delayms(1);DS18B20_IO = 0;DS18B20_delayms(1);ACK = DS18B20_IO;DS18B20_IO = 1;DS18B20_delayms(1);while(!DS18B20_IO);//等待脉冲结束EA = 1;return ACK;
}

3.2配置寄存器

3.2.1读取ROM测试

在每个DS18B20内部都有一个唯一的64位长的序列号,这个序列号值就存在DS18B20内部的ROM中。开始的8位是产品类型编码(DS18B20是28H),接着的48位是每个器件唯一的序号,最后的8位是CRC校验码。
在这里插入图片描述

一线总线系统使用单总线主控来控制一个或多个从机设备。每个DS18B20都有独立唯一的64位-ID,此特性决定了它可以将任意多的DS18b20挂载到一根总线上,通过ROM搜索读取相应DS18B20的温度值。

/**启动DS18B20进行温度的采集以及转换,并返回读取成功与否**/
bit startDs18b201(){	bit ACK;uchar i,x,k,z;uchar MSB,LSB;uchar temp[8];
x=0;k=0;ACK = InitDS18B20ACK();//总线初始化是否完成if(ACK == 0){writeToDs18b20(0x33);//跳过ROM的验证操作//writeToDs18b20(0xbe);//发送一个读取的命令for(i=0;i<8;i++){MSB = readeToDs18b20();dis0[i]=MSB;}for(i=0;i<4;i++){k=IntToString(temp,(int)dis0[i]);for(z=0;z<k;z++){LCD_Write_Char(x++,0,temp[z]);}}/*x=0;for(i=0;i<4;i++){k=IntToString(temp,(int)dis0[i+4]);for(z=0;z<k;z++){LCD_Write_Char(x++,1,temp[z]);}}*/LCD_Write_String(0,1,dis0);while(1);//DS18B20_delayms(500);  //上电转换需要延时足够长时间,否则会读出默认值85  会造成main里面后续任务一直等待,改为通过变量控制。}return ACK;//ACK == 0 启动成功,1就不成功
}

通过连接多个温湿度测试,第一位都是( ,对应16进制28,10进制40.

3.3ROM读取

上面那个只是测试,直接用下面这个读取rom

/*************************************************************************************************************************
*函数        	:	u8 DS18B20_SearchROM(u8 (*pID)[8],u8 Num)
*功能        	:	搜索DS18B20 ROM
*参数        	:	pID:DS18B20 ID缓冲区指针Num:DS18B20数目,必须事先知道
*返回        	:	搜索到的DS18B20数目
*说明        	:	程序必须事先知道DS18B20数目,搜索的数目只会小于这个数目代码移植于互联网
*************************************************************************************************************************/
u8 DS18B20_SearchROM(u8 (*pID)[8],u8 Num)
{ unsigned char k,l,chongtuwei,m,n;unsigned char zhan[(MAXNUM)]= {0x00 };  //一定要初始化为0,否则会概率性搜错unsigned char ss[64];bit ACK;uchar MSB,LSB;uchar dis1111[16];u8 num = 0;l=0;chongtuwei=0;do{ACK = InitDS18B20ACK();writeToDs18b20(0xf0);//搜索rom//DS18B20_WriteData(0xf0);	for(m=0;m<8;m++){unsigned char s=0;for(n=0;n<8;n++){k=DS18B20_Read2Bit();//读两位数据if(n==1){sprintf(dis1111,"dis1111 %d ",(int)k);LCD_Write_String(0,0,dis1111);//while(1);}k=k&0x03;s>>=1;if(k==0x01)//01读到的数据为0 写0 此位为0的器件响应{   		DS18B20_WriteBit (0);ss[(m*8+n)]=0;}else if(k==0x02)//读到的数据为1 写1 此位为1的器件响应{s=s|0x80;DS18B20_WriteBit (1);ss[(m*8+n)]=1;}else if(k==0x00)//读到的数据为00 有冲突位 判断冲突位 {				//如果冲突位大于栈顶写0 小于栈顶写以前数据 等于栈顶写1chongtuwei=m*8+n+1;					if(chongtuwei>zhan[l]){						DS18B20_WriteBit (0);ss[(m*8+n)]=0;												zhan[++l]=chongtuwei;						}else if(chongtuwei<zhan[l]){s=s|((ss[(m*8+n)]&0x01)<<7);DS18B20_WriteBit (ss[(m*8+n)]);}else if(chongtuwei==zhan[l]){s=s|0x80;DS18B20_WriteBit (1);ss[(m*8+n)]=1;l=l-1;}}else{return num;	//搜索完成,//返回搜索到的个数}}pID[num][m]=s;		}num=num+1;}while(zhan[l]!=0&&(num<MAXNUM));	return num;		//返回搜索到的个数
}

3.4温度读取

	do{num = DS18B20_SearchROM(ID_Buff,DS18B20_NUM);sprintf(dis0,"DS18B20_NUM %d ",(int)DS18B20_NUM);LCD_Write_String(0,0,dis0);sprintf(dis1,"num %d ",(int)num);LCD_Write_String(0,1,dis1);	}while(num!=DS18B20_NUM);startDs18b20();//while(1);DelayMs(500);DelayMs(500);DelayMs(500);DelayMs(500);while(1){//温度传感器-----startif(readTemFlags == 1){readTemFlags = 0;//清零//DelayMs(500);  //启动ds18b20后一定要延时,流出转换时间,否则读出为-1temperature = DS18B20_ReadDesignateTemper(ID_Buff[i ++]);startDs18b20();temp_int = temperature/100;//取整数部分temp_dec = temperature%100;//取小数部分len = IntToString(str,(int)temp_int);}//temperature = temperature >> 4;sprintf(dis1,"temp[%d] %d.%d   ",(int)i,(int)temp_int,(int)temp_dec);LCD_Write_String(0,1,dis1);if(i>3) i=0;DelayMs(100);DelayMs(500);DelayMs(500);DelayMs(500);}

项目整体链接如下。

https://download.csdn.net/download/weixin_51248645/88797969

相关文章:

单片机驱动多个ds18b20

目录 1设计内容 2ds18b20介绍 2.1传感器引脚及原理图 2.2寄存器配置 3程序实现 3.1配置初始化 3.2配置寄存器 3.3ROM读取 3.4温度读取 1设计内容 通过51单片机&#xff0c;读取总线上挂载的多个ds18b20的温度信息。 如下图&#xff0c;成功读取到3路温度数据。 2ds18…...

GitLab16.8配置webhooks、Jenkins2.4配置GitLab插件实现持续集成、配置宝塔面板实现持续部署(其三)

看本篇文章的前提是已经部署完GItlab和Jenkins服务器&#xff0c;已经可以手动构建成功&#xff0c;并且经过了很多次实践&#xff0c;对这两款软件基本熟悉。 建议大家按以下顺序看 前端自动化&#xff08;其一&#xff09;部署gitlab 前端自动化&#xff08;其二&#xff0…...

鸿蒙会取代Android吗?听风就是雨

现在说取代还谈不上&#xff0c;毕竟这需要时间。安卓作为全球第一的手机操作系统&#xff0c;短时间内还无法取代。持平iOS甚至超过iOS有很大可能&#xff0c;最终会呈现“三足鼎立”有望超过安卓基数。 作为全新的鸿蒙操作系统&#xff0c;其现在已经是全栈自研底座。按照鸿…...

检测CUDA 是否能访问GPU时回应速度慢【笔记】

SUPWEMICRO 418G-Q20X12 维护记录&#xff1a; 两台设备均已安装CUDA与Pytorch&#xff0c;在检测CUDA 是否能访问GPU&#xff0c;执行torch.cuda.is_available()命令时&#xff0c;一台设备速度秒回应True&#xff0c;但另外一台设备回应速度慢&#xff08;1分钟左右&#xff…...

大模型运行成本对比:GPT-3.5/4 vs. 开源托管

在过去的几个月里&#xff0c;生成式人工智能领域出现了许多令人兴奋的新进展。 ChatGPT 于 2022 年底发布&#xff0c;席卷了人工智能世界。 作为回应&#xff0c;各行业开始研究大型语言模型以及如何将其纳入其业务中。 然而&#xff0c;在医疗保健、金融和法律行业等敏感应用…...

fastadmin后台自定义按钮和弹窗

工具栏自定义按钮-ajax请求 前端代码 1.在对应模块的模板文件index.html添加自定义按钮&#xff0c;注意按钮要添加id以绑定点击事件 <div class"panel panel-default panel-intro">{:build_heading()}<div class"panel-body"><div id&qu…...

《高性能MySQL》

文章目录 一、创建1. 磁盘1.1 页、扇区、寻道、寻址、硬盘性能 2. 行结构row_format2.1 Compact紧凑2.1.1 行溢出2.1.2 作用2.1.3 内容1-额外信息1、变长字段长度2、NULL值列表3、记录头信息 2.1.4 内容2-真实数据4、表中列的值5、transaction_id6、roll_point7、row_id 2.2 dy…...

postman用法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、postman怎么使用json输出 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0…...

MySQL之数据库DQL

文章目录 数据查询DQL基本查询运算符算数运算符比较运算符逻辑运算符位运算符 排序查询聚合查询分组查询分页查询INSERT INTO SELECT语句SELECT INTO FROM语句 数据查询DQL 数据库管理系统一个重要功能就是数据查询&#xff0c;数据查询不应只是简单返回数据库中存储的数据&am…...

《区块链简易速速上手小册》第9章:区块链的法律与监管(2024 最新版)

文章目录 9.1 法律框架和挑战9.1.1 基础知识9.1.2 主要案例&#xff1a;加密货币的监管9.1.3 拓展案例 1&#xff1a;跨国数据隐私和合规性9.1.4 拓展案例 2&#xff1a;智能合约的法律挑战 9.2 区块链的合规性问题9.2.1 基础知识9.2.2 主要案例&#xff1a;加密货币交易所的合…...

Spring Boot 中操作 Bean 的生命周期

1.InitializingBean和DisposableBean InitializingBean接口提供了afterPropertiesSet方法&#xff0c;用于在bean的属性设置好之后调用&#xff1b; DisposableBean接口提供了destroy方法&#xff0c;用于在bean销毁之后调用&#xff1b; public class TestComponent implem…...

Linux ---- Shell编程三剑客之AWK

一、awk处理文本工具 1、awk概述 awk 是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具。AWK是专门为文本处理设计的编程语言&#xff0c;也是行处理软件&#xff0c;通常用于扫描、过滤、统计汇总工作。用来处理列。数据可以来自标准输入也可以是管道或文件。…...

Netty入门使用

为什么会有Netty? NIO 的类库和 API 繁杂&#xff0c;使用起来比较麻烦&#xff0c;需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等。开发工作量和难度都非常大&#xff0c;例如客户端面临断线重连、网络闪断、心跳处理、半包读写、网络拥塞和异…...

go并发编程-runtime、Channel与Goroutine

1. runtime包 1.1.1. runtime.Gosched() 让出CPU时间片&#xff0c;重新等待安排任务(大概意思就是本来计划的好好的周末出去烧烤&#xff0c;但是你妈让你去相亲,两种情况第一就是你相亲速度非常快&#xff0c;见面就黄不耽误你继续烧烤&#xff0c;第二种情况就是你相亲速度…...

HTTP概述

HTTP概述 HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于传输超文本的应用层协议。它是在客户端和服务器之间进行通信的基础&#xff0c;常用于 Web 应用中。在 Java 后端开发中&#xff0c;HTTP 扮演着重要的角色。以下是Java 后端视角下的 HTTP 概述&a…...

ubuntu20配置mysql8

首先更新软件包索引运行 sudo apt update命令。然后运行 sudo apt install mysql-server安装MySQL服务器。 安装完成后&#xff0c;MySQL服务将作为systemd服务自动启动。你可以运行 sudo systemctl status mysql命令验证MySQL服务器是否正在运行。 连接MySQL 当MySQL安装…...

CPU-Cache结构查看

参考【Ubuntu 查看 CPU 缓存】 本文主要介绍cpu的cache查看&#xff0c;以供读者能够理解该技术的定义、原理、应用。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;计算机杂记 &#x1f380;CSDN主页 发狂的小花…...

Wireshark网络协议分析 - Wireshark速览

在我的博客阅读本文 文章目录 1. 版本与平台2. 快速上手2.1. 选择网络接口进行捕获&#xff08;Capture&#xff09;2.2. 以Ping命令为例进行抓包分析2.3. 设置合适的过滤表达式2.4. 数据包详情2.5. TCP/IP 四层模型 3. 参考资料 1. 版本与平台 Wireshark是一个开源的网络数据…...

查看进程创建的所有线程

ps 在ps命令中&#xff0c;“-T”选项可以开启线程查看。下面的命令列出了由进程号为的进程创建的所有线程。 ps -T -p <pid>top op命令可以实时显示各个线程情况。要在top输出中开启线程查看&#xff0c;请调用top命令的“-H”选项&#xff0c;该选项会列出所有Linux…...

汽车软件开发模式的5个特点

汽车软件开发属于较为复杂的系统工程&#xff0c;经常让来自不同知识背景的工程师在观点交锋时出现分歧。在解决复杂性和对齐讨论基准时&#xff0c;可以通过勾勒出讨论对象最关键的几个特征来树立典型概念。本文旨在通过5个典型特点的抽取&#xff0c;来勾勒出汽车软件开发模式…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...