普中51单片机(DS18B20温度传感器)
DS18B20温度传感器原理
内部结构
-
64位(激)光刻只读存储器
光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列号。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
-
DS18B20温度转换规则
DS18B20的核心功能是它可以直接读出数字的温度数值。温度传感器的精度为用户可编程的9,10,11或12位,分别以0.5℃,0.25℃,0.125℃和0.0625℃增量递增。在上电状态下默认的精度为12位。
DS18B20启动后保持低功耗等待状态,当需要执行温度测量和AD转换时,总线控制器必须发出[44h]命令。转换完以后,产生的温度数据以两个字节的形式被存储到高速暂存器的温度寄存器中,DS18B20继续保持等待状态。
这是12位转化后得到的12位数据,存储在DS18B20的两个8位的RAM中,高字节的前5位是符号位,如果测得的温度大于0,这5位为‘0’,只要将测到的数值乘以0.0625即可得到实际温度;如果温度小于0,这5位为‘1’,测到的数值需要先减1再取反再乘以0.0625即可得到实际温度。
-
DS18B20温度传感器的存储器
DS18B20温度传感器的内部存储器包括一个高度的暂存器RAM和一个非易失性的可电擦除的EEPROM,后者存放高温度和低温度触发器TH、TL和结构寄存器。
-
配置寄存器
存储器的第4位为配置寄存器,其组织见图8,用户可按表3所示设置R0和R1位来设定DS18B20的精度。上电默认设置:R0=1、R1=1(12位精度)。注意:精度和转换时间之间有直接的关系。暂存器的位7和位0-4被器件保留,禁止写入。
ROM指令表
RAM指令表
DS18B20初始化
- 数据线拉到低电平“0”。
- 延时480微妙(该时间的时间范围可以从480到960微妙)。
- 数据线拉到高电平“1”。
- 延时等待80微妙。如果初始化成功则在15到60微妙时间内产生一个由DS18B20所返回的低电平“0”.根据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时判断。
- 若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(3)步的时间算起)最少要480微妙。
DS18B20读时序
- 将数据线拉低“0”。
- 延时1微妙。
- 将数据线拉高“1”,释放总线准备读数据。
- 延时10微妙。
- 读数据线的状态得到1个状态位,并进行数据处理。
- 延时45微妙。
- 重复1~7步骤,直到读完一个字节。
DS18B20写时序
- 数据线先置低电平“0”。
- 延时15微妙。
- 按从低位到高位的顺序发送数据(一次只发送一位)。
- 延时60微妙。
- 将数据线拉到高电平。
- 重复1~5步骤,直到发送完整的字节。
- 最后将数据线拉高。
实验代码
temp.h
#ifndef _temp_H
#define _temp_H
#include "reg52.h"#ifndef uchar
#define uchar unsigned char
#endif#ifndef uint
#define uint unsigned int
#endif
sbit DSPORT=P3^7;int Ds18b20ReadTemp();
#endif
temp.c
#include "temp.h"void Delay1ms(uint y)
{uint x;for(;y>0;y--){for(x=110;x>0;x--);}
}uchar Ds18b20Init()
{uchar t=1;uchar i=0;DSPORT=0;i=70;while(i--);DSPORT=1;i=0;while(DSPORT){Delay1ms(1);i++;if(i==6){t=0;return t;}}return t;
}void Ds18b20WriteByte(uchar dat)
{uchar i,j;for(j=0;j<8;j++){DSPORT=0;i++;DSPORT=dat&0x01;i=6;while(i--);DSPORT=1;dat>>=1;}
}uchar Ds18b20ReadByte()
{uchar i,j;uchar bi,byte;for(j=8;j>0;j--){DSPORT=0;i++;DSPORT=1;i++;i++;bi=DSPORT;byte=(byte>>1)|(bi<<7);i=4;while(i--);}return byte;
}void Ds18b20ChangeTemp()
{Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);Ds18b20WriteByte(0x44);
}void Ds18b20ReadTempCom()
{Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);Ds18b20WriteByte(0xbe);
}int Ds18b20ReadTemp()
{int temp=0;uchar tmh,tml;Ds18b20ChangeTemp();Ds18b20ReadTempCom();tml=Ds18b20ReadByte();tmh=Ds18b20ReadByte();temp=tmh;temp<<=8;temp|=tml;return temp;
}
main.c
#include "reg52.h"
#include "temp.h"
typedef unsigned char u8;
typedef unsigned int u16;sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;u8 code smgduan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
u8 num=0,DisplayData[8];
u8 disp[4];void delay(u16 i)
{while(i--);
}void datapros(int temp)
{float tp;if(temp<0){DisplayData[0]=0x40;temp--;temp=~temp;tp=temp;temp=tp*0.0625*100+0.5;}else{DisplayData[0]=0x00;tp=temp;temp=tp*0.0625*100+0.5;}DisplayData[1]=smgduan[temp/10000];DisplayData[2]=smgduan[temp%10000/1000];DisplayData[3]=smgduan[temp%10000%1000/100]|0x80;DisplayData[4]=smgduan[temp%10000%1000%100/10];DisplayData[5]=smgduan[temp%10000%1000%100%10];
}void DigDisplay()
{u8 i;for(i=0;i<6;i++){switch(i){case(0):LSA=0;LSB=0;LSC=0;break;case(1):LSA=1;LSB=0;LSC=0;break;case(2):LSA=0;LSB=1;LSC=0;break;case(3):LSA=1;LSB=1;LSC=0;break;case(4):LSA=0;LSB=0;LSC=1;break;case(5):LSA=1;LSB=0;LSC=1;break;}P0=DisplayData[5-i];delay(50);P0=0x00;}
}void main(){while(1){datapros(Ds18b20ReadTemp());DigDisplay();}
}
相关文章:

普中51单片机(DS18B20温度传感器)
DS18B20温度传感器原理 内部结构 64位(激)光刻只读存储器 光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列号。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身…...
2.23C语言学习
P1480 A/B Problem 高精度数除以非高精度数 #include<bits/stdc.h> long long b[66660],c[66660],sum0; char a[66660]; int n; int main(){scanf("%s",a);scanf("%d",&n);int lenstrlen(a);for(int i1;i<len;i){b[i]a[i-1]-0;}for(int i1;…...
origin/master master
这里实际上有三件事:origin master是两件事,origin/master一件事。共计三件事。 两个分支: master 是一个本地分支 origin/master是远程分支(它是名为“origin” 的远程分支的本地副本,名为“master”) 一个…...

【数据结构】时间复杂度与空间复杂度
目录 时间复杂度 空间复杂度 时间复杂度 算法的时间复杂度并不是指一个代码运行时间的快慢,因为在不同机器上运行的时间肯定不同,因此算法的时间复杂度指的是基本操作的执行次数,他是一个数学意义上的函数。这个函数并不是C语言中那种函数&…...
分别使用js与jquery写 单击按钮时出现内容 点击删除按钮不会再向下出现
HTML部分 <body><button id"btn">单击我</button><button id"delAll">删除所有事件</button><div id"test"></div> </bady>jQuery代码 <script type"text/JavaScript" src"…...

【Git】Git命令的学习与总结
本文实践于 Learn Git Branching 这个有趣的 Git 学习网站。在该网站,可以使用 show command 命令展示所有可用命令。你也可以直接访问网站的sandbox,自由发挥。 一、本地篇 基础篇 git commit git commit将暂存区(staging areaÿ…...

前端工程化面试题 | 18.精选前端工程化高频面试题
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
大公司的工程师是怎么废掉的...
大家好,我是砖一。 此文作者以嵌入式工程师为基本视角,细说了从初阶到高阶工程师的资质需求,并提示工程师职业道路上的陷阱。可供参考。 一,基础知识 一个嵌入式工程师,很多都是从51单片机或者STM32单片机开始&…...

将yolov8权重文件转为onnx格式并在c#中使用
yolo模型转ONNX 在yolov8中,我们将训练结果的.pt权重文件转换为onnx格式只需要使用ultralytics库中的YOLO类,使用pip安装ultralytics库,然后执行下面python代码 from ultralytics import YOLO# 加载YOLOv8模型 model YOLO("best.pt&q…...
在Spring Boot启动时禁止自动配置数据源相关的组件、@SpringBootApplication
一、SpringBootApplication(exclude {DataSourceAutoConfiguration.class})注解 在Spring Boot启动时禁止自动配置数据源相关的组件。 SpringBootApplication(exclude {DataSourceAutoConfiguration.class})注解的使用案例 这个注解通常应该写在微服务项目的主启动类上&…...
程序人生:不积跬步无以致千里
程序人生 癸卯年冬月,往渭南韩城,拜访司马迁祠。入门攀爬而上,至人有困乏之时,抬头现:高山仰止。归路下山,始现三官洞,遥想西汉时三官洞,出口处刻意再拜别:高山仰止。泪…...

通过二叉树例题深入理解递归问题
目录 引入: 例1:二叉树的前序遍历: 例2: N叉树的前序遍历: 例3:二叉树的最大深度: 例4:二叉树的最小深度 例5:N叉树的最大深度: 例6:左叶子…...
【Android 协程常见用法】
我们这里只讲解一下,协程在Android项目中常见用法,原理知识不在进行说明了。 依赖 lifecycleScope只能在Activity、Fragment中使用,会绑定Activity和Fragment的生命周期。依赖库: implementation androidx.lifecycle:lifecycle…...

python 进程笔记一 (概念+示例代码)
1. 进程的概念 进程是资源分配的最小单位,也是线程的容器,线程(python 线程 (概念示例代码))是CPU调度的基本单位,一个进程包括多个线程。 程序:例如xxx.py是一个程序 进程…...
各中间件数据库默认访问端口总结
说明 在生态丰富的开发环境下,我们常常需要接触很多中间件产品,中间件默认的连接端口以及可视化ui访问端口也时不时的需要用到,这里循序渐进做好登记,以备查阅! 中间件/数据库名称默认端口管理台端口默认账号密码rabbi…...

鲲鹏arm64架构下安装KubeSphere
鲲鹏arm64架构下安装KubeSphere 官方参考文档: https://kubesphere.io/zh/docs/quick-start/minimal-kubesphere-on-k8s/ 在Kubernetes基础上最小化安装 KubeSphere 前提条件 官方参考文档: https://kubesphere.io/zh/docs/installing-on-kubernetes/introduction/prerequi…...
python 函数-02-返回值注释格式
01 函数返回值 1)python中函数可以没有返回值,也可以有通过return的方式 – 【特殊性,区别于java c#等】 2)返回值可以是一个或者多个,多个时通过逗号隔开 – 【特殊性,区别于java c#等】 3)多…...

【前端素材】推荐优质后台管理系统Upcube平台模板(附源码)
一、需求分析 后台管理系统在多个层次上提供了丰富的功能和细致的管理手段,帮助管理员轻松管理和控制系统的各个方面。其灵活性和可扩展性使得后台管理系统成为各种网站、应用程序和系统不可或缺的管理工具。 当我们从多个层次来详细分析后台管理系统时࿰…...

可视化 RAG 数据 — 用于检索增强生成的 EDA
原文地址:Visualize your RAG Data — EDA for Retrieval-Augmented Generation 2024 年 2 月 8 日 Github:https://github.com/Renumics/rag-demo/blob/main/notebooks/visualize_rag_tutorial.ipynb 为探索Spotlight中的数据,我们使用Pa…...

数学建模论文、代码百度网盘链接
1.[2018中国大数据年终总决赛冠军] 金融市场板块划分与轮动规律挖掘与可视化问题 2.[2019第九届MathorCup数模二等奖] 数据驱动的城市轨道交通网络优化策略 3.[2019电工杯一等奖] 露天停车场停车位的优化设计 4.[2019数学中国网络数模一等奖] 基于机器学习的保险业数字化变革…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...