制作网站用c#做前台,html制作学校网页,网站建设台词,重庆网站建设changeke目录
1.DHT11 温湿度传感器概述
2.检测DHT11温湿度传感器模块是否存在
3.通过编写代码读取温湿度数据编辑
4.将读取到的温湿度数据通过串口上传 1.DHT11 温湿度传感器概述
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器#xff0c;应用领域应用领域暖通 空调汽车消费品气象站湿度调节器除湿器家电医疗自动控制
特点
相对湿度和温度测量全部校准数字输出长期稳定性超长的信号传输距离20米超低能耗休眠4 引脚安装可以买封装好的完全互换 : 直接出结果不用转化
接线
VCC接5VGND接GNDDATA接P3^3口
数据传送逻辑
只有一根数据线DATA上官一号发送序列指令给DHT11模块模块一次完整的数据传输为40bit,高位先出
数据格式
8bit湿度整数数据8bit湿度小数数据8bi温度整数数据8bit温度小数数据8bit校验和 通讯过程时序图
2.检测DHT11温湿度传感器模块是否存在
根据如下时序图做通信初始化并检测模块是否存在功能是否正常
时序逻辑分析
a : dht 1b dht 0延时30msc dht 1在60us后读d点如果d点是低电平被模块拉低说明模块存在
代码示例
#include reg52.h
#include intrins.hsbit ledOne P3^7;
sbit dht P3^3;//模块的data插在p3.3void 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 Delay1000ms() //11.0592MHz
{unsigned char i, j, k;_nop_();i 8;j 1;k 243;do{do{while (--k);} while (--j);} while (--i);
}void check_DHT()
{//a : dht 1 dht 1;//b dht 0dht 0;//延时30msDelay30ms();//c dht 1dht 1;//在60us后读d点如果d点是低电平被模块拉低说明模块存在Delay60us();if(dht 0){ledOne 0;//亮灯说明模块存在}
}void main()
{ledOne 1;Delay1000ms();Delay1000ms();check_DHT();while(1);
}
3.通过编写代码读取温湿度数据
a : dht 1b dht 0延时30msc dht 1卡d点while(dht1);卡e点 while(!dht)卡f点while(dht)卡g点while(!dht)有效数据都是高电平持续时间不一样50us读低电平0 高电平
DHT11传输0的时序分析 DHT11传输1的时序分析 代码示例
#include reg52.h
#include intrins.hsbit ledOne P3^7;
sbit dht P3^3;//模块的data插在p3.3char datas[5];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 Delay1000ms() //11.0592MHz
{unsigned char i, j, k;_nop_();i 8;j 1;k 243;do{do{while (--k);} while (--j);} while (--i);
}void DHT11_Start()
{dht 1;dht 0;//延时30msDelay30ms();dht 1;//卡d点while(dht1); 卡e点 while(!dht) 卡f点while(dht)while(dht);while(!dht);while(dht);
}void Read_Data_From_DHT()
{int i;//轮int j;//每一轮读多少次char tmp;char flag;DHT11_Start();for(i 0;i 5;i){//卡g点while(!dht) 有效数据都是高电平持续时间不一样50us读低电平0 高电平for(j0;j8;j){while(!dht);//等待卡g点Delay60us();if(dht 1){flag 1;while(dht);}else{flag 0;} tmp tmp 1;tmp | flag;}datas[i] tmp;}}void main()
{ledOne 1;Delay1000ms();Delay1000ms();while(1){Delay1000ms();Read_Data_From_DHT(); }
} 4.将读取到的温湿度数据通过串口上传
代码示例
#include reg52.h
#include intrins.hsbit ledOne P3^7;
sbit dht P3^3;//模块的data插在p3.3char datas[5];sfr AUXR 0x8E;void UartInit(void) //9600bps11.0592MHz
{AUXR 0x01;SCON 0x40; //配置串口工作方式1REN不使能接收TMOD 0xF0;TMOD | 0x20;//定时器1工作方式位8位自动重装TH1 0xFD;TL1 0xFD;//9600波特率的初值TR1 1;//启动定时器
}
void sendByte(char data_msg)
{SBUF data_msg;while(!TI);TI 0;
}void sendString(char* str)
{while( *str ! \0){sendByte(*str);str;}
}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 Delay1000ms() //11.0592MHz
{unsigned char i, j, k;_nop_();i 8;j 1;k 243;do{do{while (--k);} while (--j);} while (--i);
}void DHT11_Start()
{dht 1;dht 0;//延时30msDelay30ms();dht 1;//卡d点while(dht1); 卡e点 while(!dht) 卡f点while(dht)while(dht);while(!dht);while(dht);
}
void Delay40us() //11.0592MHz
{unsigned char i;_nop_();i 15;while (--i);
}void Read_Data_From_DHT()
{int i;//轮int j;//每一轮读多少次char tmp;char flag;DHT11_Start();for(i 0;i 5;i){//卡g点while(!dht) 有效数据都是高电平持续时间不一样50us读低电平0 高电平for(j0;j8;j){while(!dht);//等待卡g点Delay40us();if(dht 1){flag 1;while(dht);}else{flag 0;} tmp tmp 1;tmp | flag;}datas[i] tmp;}}void main()
{ledOne 1;UartInit();Delay1000ms();Delay1000ms();while(1){Delay1000ms();Read_Data_From_DHT(); sendString(H:);sendByte(datas[0]/10 0x30);//43 a sendByte(datas[0]%10 0x30);sendByte(.);sendByte(datas[1]/10 0x30);//43 a sendByte(datas[1]%10 0x30); sendString(\r\n); sendString(T:);sendByte(datas[2]/10 0x30);//43 a sendByte(datas[2]%10 0x30); sendByte(.);sendByte(datas[3]/10 0x30);//43 a sendByte(datas[3]%10 0x30); sendString(\r\n); }
}
打开串口助手收到温湿度数据