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

普中51单片机(DS18B20温度传感器)

DS18B20温度传感器原理

内部结构

在这里插入图片描述

  1. 64位(激)光刻只读存储器

    光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列号。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
    在这里插入图片描述

  2. 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即可得到实际温度。
    在这里插入图片描述
    在这里插入图片描述

  3. DS18B20温度传感器的存储器

    DS18B20温度传感器的内部存储器包括一个高度的暂存器RAM和一个非易失性的可电擦除的EEPROM,后者存放高温度和低温度触发器TH、TL和结构寄存器。

  4. 配置寄存器

    存储器的第4位为配置寄存器,其组织见图8,用户可按表3所示设置R0和R1位来设定DS18B20的精度。上电默认设置:R0=1、R1=1(12位精度)。注意:精度和转换时间之间有直接的关系。暂存器的位7和位0-4被器件保留,禁止写入。
    在这里插入图片描述

ROM指令表

在这里插入图片描述

RAM指令表

在这里插入图片描述

DS18B20初始化

在这里插入图片描述

  1. 数据线拉到低电平“0”。
  2. 延时480微妙(该时间的时间范围可以从480到960微妙)。
  3. 数据线拉到高电平“1”。
  4. 延时等待80微妙。如果初始化成功则在15到60微妙时间内产生一个由DS18B20所返回的低电平“0”.根据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时判断。
  5. 若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(3)步的时间算起)最少要480微妙。

DS18B20读时序

在这里插入图片描述

  1. 将数据线拉低“0”。
  2. 延时1微妙。
  3. 将数据线拉高“1”,释放总线准备读数据。
  4. 延时10微妙。
  5. 读数据线的状态得到1个状态位,并进行数据处理。
  6. 延时45微妙。
  7. 重复1~7步骤,直到读完一个字节。

DS18B20写时序

在这里插入图片描述

  1. 数据线先置低电平“0”。
  2. 延时15微妙。
  3. 按从低位到高位的顺序发送数据(一次只发送一位)。
  4. 延时60微妙。
  5. 将数据线拉到高电平。
  6. 重复1~5步骤,直到发送完整的字节。
  7. 最后将数据线拉高。

实验代码

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位序列号是出厂前被光刻好的&#xff0c;它可以看作是该DS18B20的地址序列号。64位光刻ROM的排列是&#xff1a;开始8位&#xff08;28H&#xff09;是产品类型标号&#xff0c;接着的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

这里实际上有三件事&#xff1a;origin master是两件事&#xff0c;origin/master一件事。共计三件事。 两个分支&#xff1a; master 是一个本地分支 origin/master是远程分支&#xff08;它是名为“origin” 的远程分支的本地副本&#xff0c;名为“master”&#xff09; 一个…...

【数据结构】时间复杂度与空间复杂度

目录 时间复杂度 空间复杂度 时间复杂度 算法的时间复杂度并不是指一个代码运行时间的快慢&#xff0c;因为在不同机器上运行的时间肯定不同&#xff0c;因此算法的时间复杂度指的是基本操作的执行次数&#xff0c;他是一个数学意义上的函数。这个函数并不是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 学习网站。在该网站&#xff0c;可以使用 show command 命令展示所有可用命令。你也可以直接访问网站的sandbox&#xff0c;自由发挥。 一、本地篇 基础篇 git commit git commit将暂存区&#xff08;staging area&#xff…...

前端工程化面试题 | 18.精选前端工程化高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

大公司的工程师是怎么废掉的...

大家好&#xff0c;我是砖一。 此文作者以嵌入式工程师为基本视角&#xff0c;细说了从初阶到高阶工程师的资质需求&#xff0c;并提示工程师职业道路上的陷阱。可供参考。 一&#xff0c;基础知识 一个嵌入式工程师&#xff0c;很多都是从51单片机或者STM32单片机开始&…...

将yolov8权重文件转为onnx格式并在c#中使用

yolo模型转ONNX 在yolov8中&#xff0c;我们将训练结果的.pt权重文件转换为onnx格式只需要使用ultralytics库中的YOLO类&#xff0c;使用pip安装ultralytics库&#xff0c;然后执行下面python代码 from ultralytics import YOLO# 加载YOLOv8模型 model YOLO("best.pt&q…...

在Spring Boot启动时禁止自动配置数据源相关的组件、@SpringBootApplication

一、SpringBootApplication(exclude {DataSourceAutoConfiguration.class})注解 在Spring Boot启动时禁止自动配置数据源相关的组件。 SpringBootApplication(exclude {DataSourceAutoConfiguration.class})注解的使用案例 这个注解通常应该写在微服务项目的主启动类上&…...

程序人生:不积跬步无以致千里

程序人生 癸卯年冬月&#xff0c;往渭南韩城&#xff0c;拜访司马迁祠。入门攀爬而上&#xff0c;至人有困乏之时&#xff0c;抬头现&#xff1a;高山仰止。归路下山&#xff0c;始现三官洞&#xff0c;遥想西汉时三官洞&#xff0c;出口处刻意再拜别&#xff1a;高山仰止。泪…...

通过二叉树例题深入理解递归问题

目录 引入&#xff1a; 例1&#xff1a;二叉树的前序遍历&#xff1a; 例2&#xff1a; N叉树的前序遍历&#xff1a; 例3&#xff1a;二叉树的最大深度&#xff1a; 例4&#xff1a;二叉树的最小深度 例5&#xff1a;N叉树的最大深度&#xff1a; 例6&#xff1a;左叶子…...

【Android 协程常见用法】

我们这里只讲解一下&#xff0c;协程在Android项目中常见用法&#xff0c;原理知识不在进行说明了。 依赖 lifecycleScope只能在Activity、Fragment中使用&#xff0c;会绑定Activity和Fragment的生命周期。依赖库&#xff1a; implementation androidx.lifecycle:lifecycle…...

python 进程笔记一 (概念+示例代码)

1. 进程的概念 进程是资源分配的最小单位&#xff0c;也是线程的容器&#xff0c;线程&#xff08;python 线程 &#xff08;概念示例代码&#xff09;&#xff09;是CPU调度的基本单位&#xff0c;一个进程包括多个线程。 程序&#xff1a;例如xxx.py是一个程序 进程&#xf…...

各中间件数据库默认访问端口总结

说明 在生态丰富的开发环境下&#xff0c;我们常常需要接触很多中间件产品&#xff0c;中间件默认的连接端口以及可视化ui访问端口也时不时的需要用到&#xff0c;这里循序渐进做好登记&#xff0c;以备查阅&#xff01; 中间件/数据库名称默认端口管理台端口默认账号密码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&#xff09;python中函数可以没有返回值&#xff0c;也可以有通过return的方式 – 【特殊性&#xff0c;区别于java c#等】 2&#xff09;返回值可以是一个或者多个&#xff0c;多个时通过逗号隔开 – 【特殊性&#xff0c;区别于java c#等】 3&#xff09;多…...

【前端素材】推荐优质后台管理系统Upcube平台模板(附源码)

一、需求分析 后台管理系统在多个层次上提供了丰富的功能和细致的管理手段&#xff0c;帮助管理员轻松管理和控制系统的各个方面。其灵活性和可扩展性使得后台管理系统成为各种网站、应用程序和系统不可或缺的管理工具。 当我们从多个层次来详细分析后台管理系统时&#xff0…...

可视化 RAG 数据 — 用于检索增强生成的 EDA

原文地址&#xff1a;Visualize your RAG Data — EDA for Retrieval-Augmented Generation 2024 年 2 月 8 日 Github&#xff1a;https://github.com/Renumics/rag-demo/blob/main/notebooks/visualize_rag_tutorial.ipynb 为探索Spotlight中的数据&#xff0c;我们使用Pa…...

数学建模论文、代码百度网盘链接

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

JPlag:源代码相似性检测与抄袭识别的核心技术解析

JPlag&#xff1a;源代码相似性检测与抄袭识别的核心技术解析 【免费下载链接】JPlag State-of-the-Art Source Code Plagiarism & Collusion Detection. Check for plagiarism in a set of programs. 项目地址: https://gitcode.com/gh_mirrors/jp/JPlag JPlag是一…...

Taotoken CLI工具一键配置团队开发环境实战指南

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken CLI工具一键配置团队开发环境实战指南 1. 场景与需求 在团队协作开发中&#xff0c;统一管理大模型调用环境是一个常见且…...

3分钟让你的Windows桌面焕然一新:NoFences开源分区神器

3分钟让你的Windows桌面焕然一新&#xff1a;NoFences开源分区神器 【免费下载链接】NoFences &#x1f6a7; Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否每天都要在杂乱无章的桌面图标中寻找需要的文件&…...

通达信缠论分析插件:如何用开源工具实现智能技术分析

通达信缠论分析插件&#xff1a;如何用开源工具实现智能技术分析 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 缠论作为技术分析的重要理论体系&#xff0c;其复杂的线段划分和中枢识别让许多交易者望…...

手把手教你用OPA4377搭建一个精密电流检测电路(附AD原理图/PCB)

精密电流检测电路设计实战&#xff1a;基于OPA4377的完整解决方案 在工业自动化、新能源系统和医疗设备等领域&#xff0c;精密电流检测一直是电路设计中的关键挑战。传统方案往往面临噪声干扰、非线性失真和温度漂移等问题&#xff0c;而现代CMOS运算放大器如OPA4377为解决这些…...

WinMerge过滤器进阶:从基础规则到实战场景配置

1. WinMerge过滤器入门&#xff1a;从零开始理解规则配置 WinMerge作为一款老牌开源文件对比工具&#xff0c;其过滤器功能常常被低估。很多开发者只是用它来排除版本控制目录&#xff0c;但实际上它能做的远不止这些。我第一次接触WinMerge过滤器是在处理一个Java项目时&#…...

AI建站案例:一家外贸工厂如何用“AI+系统”拿下海外订单

AI建站案例&#xff1a;一家外贸工厂如何用“AI系统”拿下海外订单【引言&#xff1a;别让网站成为“电子名片”】我们看过太多外贸工厂的网站&#xff1a;花了几千块&#xff0c;做得金碧辉煌&#xff0c;但一年下来询盘屈指可数。问题不在产品&#xff0c;而在“数字化基建”…...

技术新人的“导师红利”:如何让前辈心甘情愿带你?

在软件测试这个领域&#xff0c;技术新人的成长路径往往决定了他未来能走多远。测试不像开发那样有清晰的代码逻辑可循&#xff0c;它更像一门“破案”的艺术&#xff0c;需要经验、直觉和对业务深刻的理解。而这些&#xff0c;恰恰是书本和教程给不了的。于是&#xff0c;一个…...

从零构建:基于Air724UG的4G LTE物联网数据透传系统

1. 认识Air724UG模块&#xff1a;你的物联网数据搬运工 第一次拿到Air724UG这个巴掌大的4G模块时&#xff0c;我完全没想到它能成为我物联网项目的核心组件。这个来自合宙通信的Cat.1模块&#xff0c;最大的特点就是用2G的价格享受4G的体验。实测在市区环境下&#xff0c;它的上…...

3分钟搞定Axure RP中文界面:全版本汉化终极指南

3分钟搞定Axure RP中文界面&#xff1a;全版本汉化终极指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文…...