基于51单片机的DS18B20测温程序与仿真图

2023-10-31

一、基础介绍

时序介绍就暂不介绍,可以网上搜集资料

二、proteus仿真图

仿真图

三、程序代码

#include<reg51.h>
#include"temp.h"

#define duanxuan P1        //段选端口
#define weixuan P2         //位选端口

unsigned char code wxcode[4]={0x01,0x02,0x04,0x08};
unsigned char code dxcode[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
	

sbit DSPORT=P3^7;
int temp;

void DigDisplay(int);


/******************/
void Delay1ms(unsigned int y)
{
	unsigned int x;
	for(y;y>0;y--)
		for(x=110;x>0;x--);
}
/*******************************************************************************
* 函数名         : Ds18b20Init
* 函数功能		   : 初始化
* 输入           : 无
* 输出         	 : 初始化成功返回1,失败返回0
*******************************************************************************/

unsigned char Ds18b20Init()
{
	unsigned int i;
	DSPORT=0;			 //将总线拉低480us~960us
	i=70;	
	while(i--);//延时642us
	DSPORT=1;			//然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低
	i=0;
	while(DSPORT)	//等待DS18B20拉低总线
	{
		i++;
		if(i>5000)//等待>5MS
			return 0;//初始化失败	
	}
	return 1;//初始化成功
}

/*******************************************************************************
* 函数名         : Ds18b20WriteByte
* 函数功能		   : 向18B20写入一个字节
* 输入           : com
* 输出         	 : 无
*******************************************************************************/

void Ds18b20WriteByte(unsigned char dat)
{
	unsigned int i,j;
	for(j=0;j<8;j++)
	{
		DSPORT=0;			//每写入一位数据之前先把总线拉低1us
		i++;
		DSPORT=dat&0x01; //然后写入一个数据,从最低位开始
		i=6;
		while(i--); //延时68us,持续时间最少60us
		DSPORT=1;	//然后释放总线,至少1us给总线恢复时间才能接着写入第二个数值
		dat>>=1;
		DigDisplay(temp);
	}
}
/*******************************************************************************
* 函数名         : Ds18b20ReadByte
* 函数功能		   : 读取一个字节
* 输入           : com
* 输出         	 : 无
*******************************************************************************/


unsigned char Ds18b20ReadByte()
{
	unsigned char byte,bi;
	unsigned int i,j;	
	for(j=8;j>0;j--)
	{
		DSPORT=0;//先将总线拉低1us
		i++;
		DSPORT=1;//然后释放总线
		i++;
		i++;//延时6us等待数据稳定
		bi=DSPORT;	 //读取数据,从最低位开始读取
		/*将byte左移一位,然后与上右移7位后的bi,注意移动之后移掉那位补0。*/
		byte=(byte>>1)|(bi<<7);						  
		i=4;		//读取完之后等待48us再接着读取下一个数
		while(i--);
		DigDisplay(temp);
	}				
	return byte;
}
/*******************************************************************************
* 函数名         : Ds18b20ChangTemp
* 函数功能		   : 让18b20开始转换温度
* 输入           : com
* 输出         	 : 无
*******************************************************************************/

void  Ds18b20ChangTemp()
{
	int i = 50;
	Ds18b20Init();
	Delay1ms(1);
	Ds18b20WriteByte(0xcc);		//跳过ROM操作命令		 
	Ds18b20WriteByte(0x44);	  //温度转换命令
		
	while(i != 0)
	{
		i--;
		DigDisplay(temp);
		
	}
//	Delay1ms(100);
}
/*******************************************************************************
* 函数名         : Ds18b20ReadTempCom
* 函数功能		   : 发送读取温度命令
* 输入           : com
* 输出         	 : 无
*******************************************************************************/

void  Ds18b20ReadTempCom()
{	
	Ds18b20Init();
	Delay1ms(1);
	Ds18b20WriteByte(0xcc);	 //跳过ROM操作命令
	Ds18b20WriteByte(0xbe);	 //发送读取温度命令
}
/*******************************************************************************
* 函数名         : Ds18b20ReadTemp
* 函数功能		   : 读取温度
* 输入           : com
* 输出         	 : 无
*******************************************************************************/

int Ds18b20ReadTemp()
{
	int temp=0;
	unsigned char tmh,tml;
	Ds18b20ChangTemp();			 	//先写入转换命令
	Ds18b20ReadTempCom();			//然后等待转换完后发送读取温度命令
	tml=Ds18b20ReadByte();		//读取温度值共16位,先读低字节
	tmh=Ds18b20ReadByte();		//再读高字节
	temp=tmh;
	temp<<=8;
	temp|=tml;
	return temp;
}
/******************/

void main()
{
	int tp;
	int i= 0;
	while(1)
	{
			temp = Ds18b20ReadTemp();
			if(temp < 0)				
			{
				temp=temp-1;
				temp=~temp;
				tp=temp;
				temp=tp*0.0625*100+0.5;
			}
			else
			{			
				tp=temp;
				temp=tp*0.0625*100+0.5;	
			}
	    DigDisplay(temp);
	}
}

void DigDisplay(int temp) 	 //数码管显示
{
	int bai;
	int shi;
	int ge;
	int yi;
	

	unsigned char i;
	unsigned int j;
	
	bai = temp / 10000;
  shi = temp % 10000 / 1000;
  ge = temp % 1000 / 100;
  yi = temp % 100 / 10;
	for(i=0; i<5; i++)
	{
		 weixuan = wxcode[i];
		 duanxuan = 0xff;
		if(i == 0)
		{
			duanxuan = dxcode[bai];
		}
		if(i == 1)
		{
			duanxuan = dxcode[shi];
		}
		if(i == 2)
		{
			//duanxuan = dxcode[ge]|0x00;
			duanxuan = dxcode[ge]&0x7f;
		}
		if(i == 3)
		{
			duanxuan = dxcode[yi];
		}
		j=10;
		while(j--);
		duanxuan=0xff;
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于51单片机的DS18B20测温程序与仿真图 的相关文章

  • mobaxterm连接到Linux虚拟机

    软件 VMware CentOS 7 mobaxterm 一 查看虚拟机host 在VMware启动虚拟机后 点击应用程序 再点击终端进入 输入ifconfig查看虚拟机host和用户名 密码是创建虚拟机时设的 红框是虚拟机的ip 下面的是
  • Qt程序crash定位问题

    文章目录 问题 思路 从windos日志获取出错位置 启动Qt命令行环境 问题 Qt程序由于某种未知错误Crash掉 如何定位到出错位置 思路 固件开发时 出错时KDB会弹出少数出错信息 包含出错位置 调用堆栈 可以由出错地址 配合objd
  • lab5:深入理解进程切换

    Linux中的进程切换由context switch函数完成 该函数位于源代码目录的kernel sched core c 中 代码如下 context switch函数 context switch switch to the new M
  • QWidget设置背景图及圆角

    在Qt开发过程中 QWidget是经常作为主窗体的父窗口 有时我们需要对主窗口设置背景 设置圆角以达到美观的效果 通常的有以下三种方法 qss QPalette设置以及paintEvent绘制 下面介绍这三种方法 背景设置介绍 方法一 se
  • Redis4 - 编译安装&连接

    下载安装 redis连接 redis信息查询 下载安装 1 源码下载 https redis io 目前最新版本 4 11 2 解压到指定文件夹 eg 我的放到 build下 3 编译 安装 cd build redis 4 0 11 新建

随机推荐

  • 简单快速复制CSDN上的博客到自己的电脑上(带图片和格式)

    准备工具 typora md编辑器 直接去官网https www typora io 下载 一直点下一步 下载好了后界面是这样的 清爽且好用 需要做一点设置 文件 偏好设置 图像 如下设置 软件已经安装好并且可以使用了 看到这里可能你会有疑
  • ctex插入中文的方法

    documentclass 12pt article 使用中日韩的文字宏包 usepackage CJK begin document 插入中文 hei 表示字体为黑体 kai 楷 li 隶 song 宋 begin CJK GBK hei
  • Python 面向对象详细讲解

    Python 面向对象详细讲解 Python从设计之初就已经是一门面向对象的语言 正因为如此 在Python中创建一个类和对象是很容易的 本章节我们将详细介绍Python的面向对象编程 如果你以前没有接触过面向对象的编程语言 那你可能需要先
  • 声音“三要素”---响度(loudness),音高(pitch),音色(timbre)

    由于人耳听觉系统非常复杂 迄今为止人类对它的生理结构和听觉特性还不能从生理解剖角度完全解释清楚 所以 对人耳听觉特性的研究目前仅限于在心理声学和语言声学 人耳对不同强度 不同频率声音的听觉范围称为声域 在人耳的声域范围内 声音听觉心理的主观
  • LLVM系列第十八章:写一个简单的IR处理流程Pass

    系列文章目录 LLVM系列第一章 编译LLVM源码 LLVM系列第二章 模块Module LLVM系列第三章 函数Function LLVM系列第四章 逻辑代码块Block LLVM系列第五章 全局变量Global Variable LLV
  • 已解决(Python3中urllib请求网页报错)AttributeError: module ‘urllib‘ has no attribute ‘request‘

    已解决 Python3中urllib请求网页报错 request urllib request Request url headers headers AttributeError module urllib has no attribut
  • error while loading shared libraries: libhwloc.so.5: cannot open shared object file: No such file or

    部署Slurm的过程中 计算节点执行 slurmd C 命令后 报错 root node2 slurmd C slurmd error while loading shared libraries libhwloc so 5 cannot
  • NPM 包管理工具

    NPM 包管理工具 1 1 什么是 NPM 1 2 NPM 初始化项目 1 3 安装模块 1 3 1 安装方式 1 3 2 本地安装 1 3 3 全局安装 1 3 4 生产环境模块安装 1 3 5 开发环境模块安装 1 4 批量下载模块 1
  • 已知某年和某月,获得该月的周数及每周的始末时间

    最近阿Q在项目开发中遇到一个小问题 后台统计 已知某年和某月 计算该月每周的销量 这就要求我们要获取特定年月的周数以及每周的始末时间来对数据库数据进行筛选 大家一看到这个问题是不是都会想起java的日期类Calendar 然后会调用getA
  • 基于verilog实现2FSK调制解调器

    文章目录 前言 一 调制解调概念 1 2FSK原理 二 硬件设计 1 调制器设计思路 2 解调器设计思路 三 代码 1 顶层 2 F1载波发生模块 3 F2载波发生模块 4 频率计模块 5 测试文件 四 仿真结果 前言 在某些具体情况下 如
  • 【C语言】操作符详解(下篇)

    操作符分类 6 关系操作符 7 逻辑操作符 8 条件操作符 9 逗号表达式 10 下标引用操作符 11 函数调用操作符 12 结构成员访问操作符 13 表达式求值 13 1 隐式类型转换 13 2 算术转换 13 3 操作符的属性 6 关系
  • Android Studio改变.gradle默认的存储位置

    Android studio会将下载的gradle配置文件保存到C盘下的user 用户名 gradle文件下 导致c盘内存减少 改变路径的步骤 第一步 修改 此文件下的idea properties文件 我在修改时 出现了没有修改权限问题
  • 矩阵分析与应用-15-逆矩阵

    逆矩阵的定义与性质 一个n xn矩阵称为非奇异矩阵 若它具有n个线性无关的列向量和n个线性无关的行向量 非奇异矩阵也可以从线性系统的观点出发定义 一线性变换或正方矩阵A称为非奇异的 也就是说若它只对零输入产生零输出 否则 它是奇异的 如果一
  • Android图片加载框架Glide的基本用法

    Android图片加载框架Glide的基本用法 原文链接 http blog csdn net guolin blog article details 53759439 现在Android上的图片加载框架非常成熟 从最早的老牌图片加载框架U
  • 太阳能充电板给锂电池充电电路设计

    目前很多产品都使用了太阳能板给板卡充电 如何进行电路设计呢 确定充电管理芯片 充电管理芯片的目的是 对电池有不同模式的充电 包括涓流充电 恒流充电 恒压充电等 在电池不同的容量下进行不同的模式 才能更好的保护电池 如下是一枚国产芯片的描述
  • 左神算法 基础

    哈希表的简单介绍 1 哈希表在使用层面上可以理解为一种集合结构 2 如果只有key 没有伴随数据value 可以使用HashSet结构 C 中叫UnOrderedSet 3 如果既有key 又有伴随数据value 可以使用HashMap结构
  • Docker镜像的创建方法及Dockerfile案例

    目录 一 基于现有镜像创建 1 创建启动镜像 2 生成新镜像 三 基于Dockerfile创建 1 Dockerfile结构及分层 2 联合文件系统 3 docker镜像加载原理 4 dockerfile操作常用的指令 四 Dockerfi
  • getline函数的用法

    一 getline函数的用法 getline只要一遇到换行符就结束读取操作并返回结果 哪怕一开始输入的是换行符也是如此 C 中有两个getline函数 一个是在string头文件中 定义的是一个全局的函数 函数声明是 istream get
  • 电容元件(五)

    文章目录 一 电容元件 电容器 电容元件 线性时不变电容元件 电容的电压 电流关系 电容的储能和功率 二 电感元件 电感线圈 电感元件定义 线性时不变电感元件 电感的电流电压关系 电感的储能和功率 三 动态电路的方程 动态电路 动态电路的方
  • 基于51单片机的DS18B20测温程序与仿真图

    一 基础介绍 时序介绍就暂不介绍 可以网上搜集资料 二 proteus仿真图 三 程序代码 include