C51--DHT11数据读取

DHT11传输0的时序分析:
在这里插入图片描述
DHT11传输1的时序分析:
在这里插入图片描述
用while(dht)卡点,当不满足while时,信号拉低
用while(!dht)卡点,当不满足while时,信号拉高

传输0和1时有效数据都是高电平,但持续时间不一样

在50um后读取数据,低电平为0,高电平为1

数据格式:

 8bit湿度整数数据+8bit湿度小数数据
+8bi温度整数数据+8bit温度小数数据
+8bit校验和

由数据格式可知:
读数据:读5轮,一轮读8次

检测到模块之后进行数据读取:

#include "reg52.h"
#include <intrins.h>

sbit ledOne = P3^7;
sbit DHT = P3^3;			//模块的data接在c51的P3.3口

char datas[5];

void Delay1000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


void Delay30ms()		//@11.0592MHz
{
	unsigned char i, j;

	i = 54;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
}

void Delay60us()		//@11.0592MHz
{
	unsigned char i;

	i = 25;
	while (--i);
}

//开始
void DTH11_Start()
{
	
	DHT = 1;			//开始处于 1 位
	DHT = 0;			//拉低至少18ms,这里给它30ms
	Delay30ms();		
	DHT = 1;			//vcc拉高20-40us
	//DHT响应信号,将高电平拉低持续80us(在40--80us之间读取:低电平——模块存在)
	//所以在60us的时候读取
	Delay60us();		
	while(DHT);		//卡点,当不满足while时,信号拉低
	while(!DHT);		//卡点,当不满足while时,信号拉高
	while(DHT);			//卡点,当不满足while时,信号拉低
	while(!DHT);		//卡点,当不满足while时,信号拉高
}

//传输数据
void Read_Data_From_DHT()
{
	//读取数据需要,读5轮,一轮读8次
	int i;		//轮
	int j;		//一轮多少次
	char tmp;	//tmp移位获取数据
	char flag;
	
	DTH11_Start();				//每次读取都需要发送开始
	for(i = 0;i < 5;i++){
		
		for(j = 0;j < 8;j++){
			while(!DHT);		//卡点,当不满足while时,信号拉高
			Delay60us();		//在60um后读取数据,低电平为0,高电平为1。
			if(DHT == 1){
				flag = 1;
				while(DHT);
			}else{
				flag = 0;
			}
			tmp = tmp << 1;		//tmp左移一位
			tmp |= flag;
		}
		datas[i] = tmp;
	}
}

void main()
{
	ledOne = 1;			//灭灯
	Delay1000ms();
	Delay1000ms();
	
	while(1){
		Delay1000ms();
		Read_Data_From_DHT();
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每日一题:LeetCode-1089. 复写零

每日一题系列&#xff08;day 09&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

Linux:服务器管理工具宝塔(bt)安装教程

一、简介 bt宝塔Linux面板是提升运维效率的服务器管理软件&#xff0c;支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等多项服务的管理功能 二、安装 使用 SSH 连接工具&#xff0c;如堡塔SSH终端连接到您的 Linux 服务器后&#xff0c;挂载磁盘&#xff0c;根据系统执…

微信如何单独隐藏某个人的聊天记录?

微信&#xff0c;如今已成为我们生活中不可或缺的沟通工具&#xff0c;它的应用范围涵盖了工作、学习及日常生活的方方面面。然而&#xff0c;有时为了保护个人隐私&#xff0c;或是不愿让他人看到特定对话&#xff0c;我们需要对与某人的聊天记录进行隐藏。那么&#xff0c;微…

【已解决】如何打开设置了密码的7Z压缩文件?

7Z是一种常见的压缩文件格式&#xff0c;相比RAR和ZIP格式&#xff0c;它的压缩率更高&#xff0c;可以压缩出更小的文件体积&#xff0c;也同样可以设置密码保护&#xff0c;那设置了密码的7Z压缩文件要如何打开呢&#xff1f; 我们知道&#xff0c;7Z压缩文件设置密码保护后…

06-Git分支相关的命令,如创建/删除/切换分支

Git分支(副本) 在版本控制过程中需要同时推进多个任务,此时可以为每个任务创建单独分支即开一个一模一样的副本 ,最终分支开发完后再合并到主分支提高开发效率 使用分支意味着程序员可以把自己的工作从开发主线上分离开来&#xff0c;开发自己分支的时候不会影响主线分支的运…

Linux命令--根据端口号查看进程号(PID)

Linux命令–根据端口号查看进程号&#xff08;PID&#xff09; 查找8080端口对应的进程号: netstat -nlp|grep :8297对应的进程号1061,如果想杀掉此进程&#xff0c;可以用一下命令&#xff1a; kill -9 1061

2023年中国金融租赁行业研究报告

第一章 行业概况 1.1 定义 金融租赁是一种融资方式&#xff0c;其中租赁公司&#xff08;出租人&#xff09;为企业&#xff08;承租人&#xff09;购买所需设备&#xff0c;并在租赁期内由承租人使用。承租人负责支付租金&#xff0c;租赁期满后有权选择退租、续租或购买设备…

Java中重载和重写的区别

1.重写(Override) 从字面上看&#xff0c;重写就是重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法&#xff0c;但有时子类并不想原封不动的继承父类中的某个方法&#xff0c;所以在方法名&#xff0c;参数列表&#xff0c;返回类型…

【机器学习】集成学习算法之AdaBoost

文章目录 基本步骤示例生成第 1 棵决策树生产第 2 棵决策树生成第 T 棵决策树加权投票 sklearn 实现 基本步骤 首先&#xff0c;是初始化训练数据的权值分布 D 1 D_1 D1​。假设有 m m m 个训练样本数据&#xff0c;则每一个训练样本最开始时&#xff0c;都被赋予相同的权值…

爬虫从入门到精通(21) |字体加密通杀方案

文章目录 一、了解什么是字体加密二、Python打开字体加密文件三、字体加密的通杀1.静态的字体文件固定顺序的字体2.其他动态变化情况 一、了解什么是字体加密 字体加密是页面和前端字体文件想配合完成的一个反爬策略。通过css对其中一些重要数据进行加密&#xff0c;使我们在代…

启用Android放大镜功能,事半功倍,可惜该功能只存在于Android 14

安卓屏幕放大镜是一种无障碍功能&#xff0c;旨在通过放大屏幕上显示的内容来帮助任何有视力障碍的人。这是安卓提供的几个功能之一&#xff0c;旨在使智能手机更具包容性和用户友好性。 如果你曾经想知道如何在你的安卓手机上设置并充分利用屏幕放大镜&#xff0c;那么你就来…

索尼mxf覆盖部分恢复案例(索尼PMW-580)

索尼mxf覆盖部分恢复案例(索尼PMW-580) 索尼的摄像机型号是比较繁多的&#xff0c;高端系列基本上是以mxf文件为主&#xff0c;这一类案例之前处理不少&#xff0c;今天我们看一个索尼pmw-580摄像机删除后又覆盖的恢复案例。 故障存储:64G SD卡/Exfat文件系统 故障现象: 拍…

Java核心知识点整理大全25-笔记

目录 25. Hadoop 25.1.1. 概念 25.1.2. HDFS 25.1.2.1. Client 25.1.2.2. NameNode 25.1.2.3. Secondary NameNode 25.1.2.4. DataNode 25.1.3. MapReduce 25.1.3.1. Client 25.1.3.2. JobTracker 25.1.3.3. TaskTracker 25.1.3.4. Task 25.1.3.5. Reduce Task 执行…

理解Gamma传递函数

对于任何认真从事色彩工作或电影和电视母带处理的人来说&#xff0c;掌握Gamma编码是一项重要的知识&#xff0c;但它也可能是最令人困惑的主题之一&#xff0c;因为我们人类的视力与大多数电子设备的工作方式截然不同。 Gamma编码和传递函数的全部工作都是基于向我们的人眼提供…

【深度学习】gan网络原理生成对抗网络

【深度学习】gan网络原理生成对抗网络 GAN的基本思想源自博弈论你的二人零和博弈&#xff0c;由一个生成器和一个判别器构成&#xff0c;通过对抗学习的方式训练&#xff0c;目的是估测数据样本的潜在分布并生成新的数据样本。 1.下载数据并对数据进行规范 transform tran…

用Python进行gRPC接口测试(一)

前言 gRPC 是一个高性能、通用的开源RPC框架&#xff0c;其由 Google 主要面向移动应用开发并基于HTTP/2 协议标准而设计&#xff0c;基于 ProtoBuf(Protocol Buffers) 序列化协议开发&#xff0c;且支持众多开发语言。 自gRPC推出以来&#xff0c;已经广泛应用于各种服务之中…

UI自动化测试工具有哪些优势?

UI自动化测试工具通过提高测试效率、覆盖率&#xff0c;减少测试时间和成本&#xff0c;以及支持持续集成等方式&#xff0c;为软件开发团队提供了一系列重要的优势&#xff0c;有助于提升软件质量和开发效率。 自动化执行&#xff1a;UI自动化测试工具可以模拟用户与应用程序的…

ubuntu22下使用nvidia 2080T显卡部署pytorch

1.直接到NVIDA官网下载相应的驱动&#xff0c;然后安装官方驱动 | NVIDIA 2.下载相应版本cuda&#xff0c;并安装&#xff0c;安装时不安装驱动 3.conda install pytorch2.1.0 torchvision0.16.0 torchaudio2.1.0 pytorch-cuda12.1 -c pytorch -c nvidia 安装pytorch。 安装…

Qt应用开发--国产工业开发板全志T113-i的部署教程

Qt在工业上的使用场景包括工业自动化、嵌入式系统、汽车行业、航空航天、医疗设备、制造业和物联网应用。Qt被用来开发工业设备的用户界面、控制系统、嵌入式应用和其他工业应用&#xff0c;因其跨平台性和丰富的功能而备受青睐。 Qt能够为工业领域带来什么好处&#xff1a; -…

scratch《贪吃蛇》改编版——设计方案

一、设计思路 设计想法来自《贪吃蛇》游戏改编。《贪吃蛇》游戏的背景源自古老的瑞典神话&#xff0c;讲述一条巨蛇在世间蔓延&#xff0c;吞噬一切的传说。游戏的玩法很简单&#xff0c;玩家通过上下左右键控制蛇的方向&#xff0c;使其在地图上移动并吞噬食物&#xff0c;随…