51单片机 | DS18B20 温度传感器实验

news2024/10/7 16:15:49

系统设计

设计要求

(1) 主体电路包括晶振、复位、电源指示电路,预留程序下载接口;
(2) 要求能够实现温度数值的自动显示,值根据实际温度变化自动变化。
(3) 并按照题目要求完成程序源码编写、调试及关键代码注释。

设计任务

使用给定硬件实现温度测量和显示电路的搭建和实现,完成相关代码编写,使其具备温度显示功能。

性能指标要求

(1) 要求能够实现温度数值的自动显示,值根据实际温度变化自动变化。
(2) 扩展功能: 实现打开空调控制模拟的功能,即当温度高于某一阈值时,控制空调打开;当其高于某一阈值时关闭。空调的开关控制使用一个LED灯进行模拟,如空调处于打开状态时,将某一LED灯点亮即可

设计思路及设计框图

设计思路

(1) 了解设计要求后,查询各元件的特性及使用方法
(2) 查找类似实验资料,并吸收其设计经验
(3) 由于本次下发的是万能板,需自己排版并焊接。为焊接电路的美观我决定先用AD制图软件进行排版,绘制结束后根据电路图直接焊接即可。
(4) 焊接结束后先测试数码管显示,再测试DS18B20的温度传感器测试温度采集;
(5) 经过上述硬件测试后,开始根据硬件设计出数码管驱动代码及DS18B20的温度传感器驱动代码;
(6) 将DS18B20的温度传感器采集到的数据处理后显示到数码管上;
(7) 对拓展功能进行设计及实现;

硬件设计

原理图

请添加图片描述

PCB图

请添加图片描述
用万用板连线时,可参考PCB图,避免连线时飞线的出现

程序如下

#include  <reg52.h>
#include  <intrins.h>
#define uchar unsigned char
#define uint  unsigned int
#define jump_ROM 0xCC
#define start 0x44
#define read_EEROM 0xBE
#define  uchar  unsigned  char 
#define  uint   unsigned  int
unsigned char TMPH,TMPL; 

sbit DQ = P3^3;            //DS18B20数据口
sbit P30=P3^0;
sbit P31=P3^1;
sbit P27=P2^7;

sbit  DATA = P3^3; //DS18B20接入口
unsigned char my_SEG7[] = {0x5f , 0x44 , 0x9d, 0xd5 , 0xc6, 0xd3 , 0xda , 0x45 , 0xdf  ,0xc7};

char  bai,shi,ge; //定义变量

/*延时子函数*/
void delay(uint num)
{
	while(num--) ;
}


Init_DS18B20(void)		   //传感器初始化
{
 	uchar x=0;
 	DATA = 1;    //DQ复位
 	delay(10);  //稍做延时
 	DATA = 0;    //单片机将DQ拉低
 	delay(80); //精确延时 大于 480us    //450
 	DATA = 1;    //拉高总线
 	delay(20);
 	x=DATA;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
 	delay(30);
}

//读一个字节
ReadOneChar(void)
{
	uchar i=0;
	uchar dat = 0;
	for (i=8;i>0;i--)
 	{
  		DATA = 0; // 给脉冲信号
  		dat>>=1;
  		DATA = 1; // 给脉冲信号
  		if(DATA)
   		dat|=0x80;
  		delay(8);
 	}
 	return(dat);
}

//写一个字节
WriteOneChar(unsigned char dat)
{
 	uchar i=0;
 	for (i=8; i>0; i--)
 	{
  		DATA = 0;
  		DATA = dat&0x01;
  	delay(10);
  	DATA = 1;
  	dat>>=1;
 	}
	delay(8);
}

//读取温度
int ReadTemperature(void)
{
	uchar a=0;
	uchar b=0;
	int t=0;
	float tt=0;
	Init_DS18B20();
	WriteOneChar(0xCC); // 跳过读序号列号的操作
	WriteOneChar(0x44); // 启动温度转换
	Init_DS18B20();
	WriteOneChar(0xCC); //跳过读序号列号的操作
	WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
	a=ReadOneChar();//低位
	b=ReadOneChar();//高位
	t=b;
	t<<=8;
	t=t|a;
	tt=t*0.0625;
	t= tt*10+0.5; 
	return(t);
}

/*显示子函数*/
void  display(int bai,int shi,int ge)
{
	
	P2=0xFD; P0=my_SEG7[bai]; delay(100);
	P2=0xFB; P0=my_SEG7[shi]+0x20; delay(100);
	P2=0xF7; P0=my_SEG7[ge]; delay(100);
	
}

void  main()
{
	int  temp;
	while(1)
	{	 
		temp=ReadTemperature();//读温度
		bai=temp%1000/100;//显示百位
		shi=temp%100/10;//显示十位
		ge=temp%10;//显示个位
		if(temp >= 300 && temp <= 320 )//高于30度小于32度P2_7口LED灯亮
		{
			P27 = 0;
			delay(100);
		}
		display(bai,shi,ge);//显示函数	
	}	 
}

调试过程及注意事项

1)DS18B20对于数据的读取、检测等方式讲究严格的时序,在编写程序的过程中,需要考虑好相应指令所需的机器周期,以及进行相应的延时操作来读写数据。我再实验过程中尤其是读取DS18B20传输过来的数据时,最开始一直不对,根本原因就是时序延时没有掌握好,掌握好延时和时序后,就能够顺利读取数据。

2)在对DS18B20操作时需要,讲究遵守规则,需要先复位,跳过 ROM,才能进行读写,更改初值等操作。在编写代码的过程中,需要严格历经这三个过程,不要漏步跳步。

3)动态数码管的温度显示要求时刻不断对数码管有数据输入,不能延迟太大导致肉眼可见的掉帧现象,将显示函数写入函数放在10ms一次的定时器中断当中,完成10ms刷新一次的功能。

4)DS18B20的温度数据传入或给温度传感器的写入都是从地位开始输出,在调试过程中没有注意到这个问题导致,温度读取的数据一直有错误,一直到重新看了一边DS18B20后注意到这个细节,专门写了一个输入和读取函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/502514.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++两个区间的比较?——STL之equal()算法和mismatch()算法

equal&#xff08;&#xff09;算法 检验相等性 bool equal(InputIterator1 beg,InputIterator1 end&#xff0c;InputIterator2 cmpBeg)bool equal(InputIterator1 beg,InputIterator1 end&#xff0c;InputIterator2 cmpBeg,BinaryPredicate op) 第一形式判断区间…

mongodb命令使用

查询副本集当前状况(需要将命令行切换到需要查询的副本集中) rs.status() 查询数据库当前情况 sh.status() 查询数据分片情况 db.集合名称.getShardDistribution() 查看集合当前情况 db.集合名称.stats() 查看集合是否开启分片 db.集合名称.stats().sharded 查看mong…

Python网络编程(一)——了解IP和端口的基础知识以及socket的简单实现

系列文章目录 Python网络编程&#xff08;一&#xff09;——了解IP和端口的基础知识以及socket的简单实现 了解IP和端口的基础知识以及socket的简单实现 系列文章目录前言获取本机设备名和IP获取远程设备的IP地址将IPv4地址转换成以十六进制形式表示二进制数据获取端口的服务…

数据结构 -- 共用体Union

在数据结构 -- 结构体Struct一文中详细介绍了结构体的定义以及内存对齐。在C语言中&#xff0c;还有另外一种和结构体非常类似的语法&#xff0c;叫做共用体&#xff08;Union&#xff09;&#xff0c;也称为联合体。它的定义格式为&#xff1a; union 共用体名{成员列表 };1. …

【CVPR红外小目标检测】红外小目标检测中的非对称上下文调制(ACM)

论文题目&#xff1a; Asymmetric Contextual Modulation for Infrared Small Target Detection 红外小目标检测中的非对称上下文调制 红外小目标数据集 目标个数分布&#xff1a;约90%图片中只有一个目标&#xff0c;约10%图片有多个目标&#xff08;在稀疏/显著的方法中&am…

网文助手。

网文助手 简述 网文助手&#xff0c;免费高质量小说资料网站&#xff0c;支持笔记本和手机端&#xff0c;主要有以下功能。 随机生成小说男女姓名&#xff0c;和尊称随机生成地域和势力名称随机生成功法秘籍、招式战技、法宝兵器、丹药和阵法随机生成妖兽、凶地、天材地宝随…

Prometheus监控报警+Grafana loki日志聚合系统

Prometheus监控报警Grafana loki日志聚合系统 参考文档 https://blog.csdn.net/m0_57480266/article/details/121190725?spm1001.2101.3001.6650.1&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-121190725-blog-111992382.235%5Ev3…

二十一、线索转换3:线索的备注转化为客户联系人的备注

功能需求 3.线索的备注信息--》客户备注 4.线索的备注---》联系人备注 5.线索市场活动关系---》联系人市场活动关系 流程图 代码实现&#xff1a;线索的备注转化为客户联系人的备注 1.clueRemarkMapper /*** 根据线索id 查询备注2*/List<ClueRemark> selectInitialC…

Windows本地MySQL升级

一、删除原来的MySQL 删除 C:\Programs Files、C:\Programs Files(x86)、C:\ProgramData 中的所有MySQL目录 找到MySQL数据库中的data保存到其他位置&#xff0c;升级后可以恢复数据库数据 【备份数据】 删除注册表中MySQL的信息 计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet…

Py01·环境搭建

Python环境搭建 官网下载python3.7.3&#xff1a;https://www.python.org/downloads/release/python-373/ 配置系统环境变量目录&#xff1a; E:\ldtools\python3.7.3\python.exe E:\ldtools\python3.7.3\Scripts\pip.exe python.exe 运行环境 pip.exe 包管理器 安装mysql环…

TypeScript 最近各版本主要特性总结

&#xff08;在人生的道路上&#xff0c;当你的期望一个个落空的时候&#xff0c;你也要坚定&#xff0c;要沉着。——朗费罗&#xff09; TypeScript 官网 在线运行TypeScript代码 第三方中文博客 特性 typescript是javascript的超集&#xff0c;向javascript继承额外的编辑…

K8s之Namespace名称空间详解

文章目录 一、名称空间概念二、名称空间基本操作1、创建Namespace的两种方式2、Namespace资源限额 一、名称空间概念 K8s中文手册&#xff1a; K8s名称空间中文官方手册&#xff1a; Kubernetes 支持多个虚拟集群&#xff0c;它们底层依赖于同一个物理集群。 这些虚拟集群被…

UUID使用

1.UUID是什么&#xff1f; UUID 是指&#xff08;Universally Unique Identifier&#xff09;通用唯一识别码&#xff0c;128位。RFC 4122描述了具体的规范实现。 2.UUID解决问题&#xff1f; 分库分表后自增Id重复问题。 3.UUID作用&#xff1f; UUID 的目的是让分布式系…

[数据库系统] 一、创建表以及使用主键约束(educoder)

1.任务&#xff1a;在数据库中创建一个表。 2.需要掌握&#xff1a; 如何在指定数据库中创建表。 知识点&#xff1a;如何在指定数据库中创建表。 我们先来了解一下在数据库中创建表的规则&#xff1a; CREATE TABLE 表名(字段名,数据类型,字段名,数据类型,.....) 例如&…

Oracle 体系结构

文章目录 Oracle体系结构Oracle的内存结构Oracle的进程结构服务器进程后台进程可选后台进程 物理存储结构逻辑存储结构 概念&#xff1a; Oracle server由Oracle instance和Oracle database组成&#xff0c;Oracle instance由后台进程和共享内存组成&#xff0c;Oracle的实例包…

《走进对象村4》之面向对象的第一大特性——封装

文章目录 &#x1f680;文章导读1、封装的概念2、访问限定修饰符3、如何进行封装4、封装的优点&#xff1a; &#x1f680;文章导读 在本篇文章中&#xff0c;将详细的对封装进行总结&#xff0c;文章仅仅是个人的一些理解&#xff0c;如果有错误的地方&#xff0c;还望指出看完…

八岁都能懂:O(N)条件下在N个元素中找出第K小的元素

目录 1 进入情境1-1 金字塔道具1-2 感觉还不够1-3 万能筛子1-4 怎么用呢 2 代码实现2-1 伪代码描述2-2 完整实例c 3 引申3-1 完美的折半舍弃3-2 找出前K小的元素(topK方法&#xff09;3-3 O(n)效率下求中位数参考资料 1 进入情境 生日&#xff0c;朋友送了一堆弹珠&#xff0c;…

[PyTorch][chapter31][卷积]

前言&#xff1a; 卷积神经网络 是 计算机视觉里面应用非常广泛的一个模型。 卷积神经网络 成功案例 人脸识别,指纹识别等应用. 卷积的本质是图像的特征提取&#xff0c; 在冈萨雷士版本《数字图像处理》处理有专门的章节讲解 各种卷积核&#xff0c;在通讯原理里面&#xff0…

MOD09A1、MYD09A1 文件说明

总体介绍 文件全称为 MODIS Terra/Aqua Surface Reflectance 8-Day L3 Global 500 m。文件名称的示例为 “MOD09A1.A2000337.h11v05.005.2006342055602.hdf”。下载下来的 hdf 包括 13 个子数据集&#xff0c;一个 tile 包括 2400*2400 个像元。各数据集的性质如下表所示。 Sci…

51单片机基础实验1

一.51单片机 51单片机&#xff0c;也称为AT89C51&#xff0c;是一种基于Intel 8051架构的8位单片机。它是广泛应用于嵌入式系统和微控制器领域的常见芯片之一。其具有高度灵活性、可编程性和可靠性&#xff0c;因此被广泛应用于各种应用场景中。 51单片机的主要特点包括&…