DHT11温湿度检测系统的52单片机简易实现

本文介绍了使用STC89C52单片机、LCD1602显示屏和DHT11模块搭建的DHT11温湿度检测系统。通过编程实现了温湿度数据显示、报警值设定及蜂鸣器报警功能。代码来源于CSDN,特别感谢原博主。文章强调了DHT11数据传输的严格性和数据线连接的重要性,并提供了一些关键代码段。
摘要由CSDN通过智能技术生成

简要

最近大学课程里的单片机实训选了题目为DHT11温湿度检测系统,在本论坛看了很多大佬的资料后,自己简单写了一下能够完成任务的程序,主要使用了STC89C52单片机、LCD1602显示屏以及DHT11模块。模块的详细略过,直接贴代码。
单片机P0为1602的传输端;
RS,RW,EN自便

DHT11的DATA为P3^0;
晶振为11.0592Mhz。
最后1602屏幕的显示应该是
K为开警报,变成G为关警报。
湿度下限为70,上限为95
温度下限为25,上限为95
上行 “Wise:00|D70|U95K”
下行 “Temp:00|D25|U95K”

问题:

DHT11对数据的传输很严格,数据线的优劣影响数据传输的成功跟速度,所以数据DATA线要连接好,不要松动。

主函数

#include<intrins.h>	    //延时函数
#include<string.h>
#include"delay.h"
#include"DHT11.h"
#include"LED1602.h"
#include"init_frist.h"
#include"keyadd.h" 
#include"K1_K4.h"
#define Uint unsigned int  //预定义
#define Uchar unsigned char 
Uchar buff_wise[]="Wise:00|D00|U00K";				         //D=Down 下限 			U=up 上限
Uchar buff_temp[]="Temp:00|D00|U00K";					
Uchar RH=0,RL=0,TH=0,TL=0;
Uchar data_byte;
Uint A_OPEN=0,W0,W00=70,W11=99,T00=25,T11=99,d_wh=0,d_th=0,Y=0,t2=0;
void CLOCK_DHT11() interrupt 1				  //定时器配置函数。
{
	//static修饰的变量在程序运行的时候分配一次内存,以后不再分配
	static int count=0;
	//重装初值,计数器再次从初值开始算50000次。
	TH0 = (65536-5000)/256;	    //高8位。16位定时器 00000000 00000000
   	TL0 = (65536-5000)%256;  	//低8位。 

	count++;	//每10ms加1次。
	if(count == 50) 	//到达50次就是250ms。			
	{
		count = 0;
		A_OPEN = ~A_OPEN;	
	}
}
void main()		//主程序。

{	 
	 			init_frist();	 			
}

DHT11模块代码

#include<DHT11.h> 
#include<delay.h>  
//************************************检测模块*************************************

void DHT11RstAndCheck()	 	//这为DHT11的复位程序和响应程序。
{

	DHT11 = 1; 
  	delay22us(); 			//首先拉高一个高电平。
	 DHT11 = 0; 
 	 delay(25);				// 主机把总线拉低必须大于18ms,保证DHT11能检测到起始信号。 此为22us。
  	DHT11 = 1;    			//发送开始信号结束后拉高电平延时20-40us 
 	 delay22us();      
  • 6
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值