
// DHT11使用范例
//单片机 : AT89S52 或 STC89C52RC
// 功能 :串口发送温湿度数据 波特率 9600
//硬件连接: P20口为通讯口连接DHT11,DHT11的电源和地连接单片机的电源和地,单片机串口加MAX232连接电脑
// 公司 :
////
#include <reg52h>
#include <intrinsh>
#include "delaymsh"
#include "1602h"
//
typedef unsigned char U8; / defined for unsigned 8-bits integer variable 无符号8位整型变量 /
typedef signed char S8; / defined for signed 8-bits integer variable 有符号8位整型变量 /
typedef unsigned int U16; / defined for unsigned 16-bits integer variable 无符号16位整型变量 /
typedef signed int S16; / defined for signed 16-bits integer variable 有符号16位整型变量 /
typedef unsigned long U32; / defined for unsigned 32-bits integer variable 无符号32位整型变量 /
typedef signed long S32; / defined for signed 32-bits integer variable 有符号32位整型变量 /
typedef float F32; / single precision floating point variable (32bits) 单精度浮点数(32位长度) /
typedef double F64; / double precision floating point variable (64bits) 双精度浮点数(64位长度) /
//
#define uchar unsigned char
#define uint unsigned int
#define Data_0_time 4
//----------------------------------------------//
//----------------IO口定义区--------------------//
//----------------------------------------------//
sbit DHTRead = P3^0 ;
//sbit P2_1 = P2^1;
//----------------------------------------------//
//----------------定义区--------------------//
//----------------------------------------------//
U8 U8FLAG,k;
U8 U8count,U8temp;
unsigned char temp,wetness;
//U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8 U8comdata;
U8 outdata[5]; //定义发送的字节数
U8 indata[5];
U8 count, count_r=0;
U16 U16temp1,U16temp2;
void Delay(U16 j)
{ U8 i;
for(;j>0;j--)
{
for(i=0;i<27;i++);
}
}
void Delay_10us(void)
{
U8 i;
i--;
i--;
i--;
i--;
i--;
i--;
}
void COM(void)
{
U8 i;
for(i=0;i<8;i++)
{
U8FLAG=2;
//----------------------
//P2_1=0 ; //T
//P2_1=1 ; //T
//----------------------
while((!DHTRead)&&U8FLAG++);
Delay_10us();
Delay_10us();
// Delay_10us();
U8temp=0;
if(DHTRead)U8temp=1;
U8FLAG=2;
while((DHTRead)&&U8FLAG++);
//----------------------
//P2_1=0 ; //T
//P2_1=1 ; //T
//----------------------
//超时则跳出for循环
if(U8FLAG==1)break;
//判断数据位是0还是1
// 如果高电平高过预定0高电平值则数据位为 1
U8comdata<<=1;
U8comdata|=U8temp; //0
}//rof
}
//--------------------------------
//-----湿度读取子程序 ------------
//--------------------------------
//----以下变量均为全局变量--------
//----温度高8位== U8T_data_H------
//----温度低8位== U8T_data_L------
//----湿度高8位== U8RH_data_H-----
//----湿度低8位== U8RH_data_L-----
//----校验 8位 == U8checkdata-----
//----调用相关子程序如下----------
//---- Delay();, Delay_10us();,COM();
//--------------------------------
void ReadRH(void)
{
//主机拉低18ms
unsigned char U8RH_data_L,U8T_data_L;
unsigned char U8T_data_H,U8RH_data_H,U8checkdata;
DHTRead=0;
Delay(180);
DHTRead=1;
//总线由上拉电阻拉高 主机延时20us
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
//主机设为输入 判断从机响应信号
DHTRead=1;
//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
if(!DHTRead) //T !
{
U8FLAG=2;
//判断从机是否发出 80us 的低电平响应信号是否结束
while((!DHTRead)&&U8FLAG++);
U8FLAG=2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
while((DHTRead)&&U8FLAG++);
//数据接收状态
COM();
U8RH_data_H=U8comdata;
COM();
U8RH_data_L=U8comdata;
COM();
U8T_data_H=U8comdata;
COM();
U8T_data_L=U8comdata;
COM();
U8checkdata=U8comdata;
DHTRead=1;
//数据校验
U8temp=(U8T_data_H+U8T_data_L+U8RH_data_H+U8RH_data_L);
if(U8temp==U8checkdata)
{
temp = U8T_data_H;
wetness = U8RH_data_H;
//U8RH_data_H=U8RH_data_H_temp;
//U8RH_data_L=U8RH_data_L_temp;
//U8T_data_H=U8T_data_H_temp;
//U8T_data_L=U8T_data_L_temp;
//U8checkdata=U8checkdata_temp;
}//fi
}//fi
}
//----------------------------------------------
//main()功能描述: AT89C51 110592MHz 串口发
//送温湿度数据,波特率 9600
//----------------------------------------------
void main()
{
//U8 i,j;
//uchar str[6]={"RS232"};
/ 系统初始化 /
INIT_1602();
Delay(1); //延时100US(12M晶振)
while(1)
{
//------------------------
//调用温湿度读取子程序
ReadRH();
//串口显示程序
//--------------------------
P1=wetness;
Lcd_Set(0,0);
WRITE_1602DATA(wetness/10 + '0');
WRITE_1602DATA(wetness%10 + '0');
WRITE_1602DATA('%');
Lcd_Set(1,0);
WRITE_1602DATA(temp/10 + '0');
WRITE_1602DATA(temp%10 + '0');
WRITE_1602DATA(0xdf);
WRITE_1602DATA('C');
//str[0]=U8RH_data_H;
//str[1]=U8RH_data_L;
//str[2]=U8T_data_H;
//str[3]=U8T_data_L;
//str[4]=U8checkdata;
//读取模块数据周期不易小于 2S
Delay(20000);
}//elihw
}// maindht11传感器延迟太高
DHT11传感器的延迟取决于它的工作模式,一般来说,它的延迟可以在50毫秒到200毫秒之间。如果你的DHT11传感器出现了延迟太高的情况,那么可以尝试以下几种方法来解决这个问题:
1检查传感器的连接是否正确,检查电路板上的电阻是否正确,确保传感器的正确连接。
2检查电路板上的电容是否正确,确保电容的正确连接。
3检查传感器的工作模式是否正确,确保传感器的正确设置。
4检查传感器的电源电压是否正确,确保传感器的正确供电。
5检查传感器的软件驱动是否正确,确保传感器的正确驱动。
6检查传感器的环境温度是否正确,确保传感器的正常工作。
FM-KWS空气温湿度传感器
一、技术参数:
空气湿度:范围 0~100% 精度 ±3% 分辨率 01%
空气温度:范围-30~70℃ 精度 ±02℃ 分辨率 01℃
信号输出方式:0~20V或4~20mA
工作电压:12~24V(典型值12V)响应时间:<1S
测量稳定时间:1S
工作温度范围:-35℃~75℃
二、功能及特点
响应速度快,精度较高,量程较宽,稳定性好
轻型百叶箱设计,适合室外使用
可防止阳光直射照成局部温度偏差以及雨水的冲刷
体积小巧,拆卸方便,安装简单
输出信号线性度好,具备较强的抗干扰能力
三、注意事项
传感器本身不防水,所以切勿将传感器浸泡在水中,以免对电路造成损毁!
如果空气湿度很大,且长期处于凝露状态,建议使用后将传感器收藏并检修!
传感器线缆屏蔽层已与地线短路,接线时请妥善处理屏蔽线,防止电源短路!
四、适用范围
广泛应用于农业、林业、气象环境、仓储、温室、环境保护、气象站、船舶、码头等任何需要测量温湿度的场所。
原因是传感器过热、传感器损坏。1、传感器过热:当DHT11超过其温度范围时,会停止工作。因此,传感器长时间暴露在高温环境中,会停止工作。
2、传感器损坏:DHT11受到粗暴的处理或受到机械损坏,会停止工作。因此,如果您的传感器在运输或 *** 作过程中受到任何损坏,会停止工作。dht11温度传感器显示屏不亮需检查电源控制线是否正确。
根据dht11温度传感器资料,先给两块模块接上电源,注意,模块需要的电源是33V,还是5V。开发板上有33V和5Ⅴ插针。无线模块接开发板的UART,用串口与开发板通信。DHT11传感器DATA脚接开发板的任一IO脚。
DHT11数字温湿度传感器是一种出厂时经过校准的数字信号输出的温湿度数字温湿度传感器。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)