数字温湿度传感器DHT11详解及例程利用串口显示
数字温湿度传感器DHT11详解及例程利用串口显示
数字温湿度传感器DHT111、概述DHTxx 系列数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。
它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。
传感器包括一个电阻式测湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。
因此,该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
每个DHTxx传感器都在极为精确的湿度校验室中进行校准。
校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。
单线制串行输出接口,使系统集成变得简易快捷。
超小的体积、极低的功耗,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。
本产品为 4 针单排引脚封装,特殊封装形式可根据用户需求而提供。
2、产品特性湿温度传感器的一体化结构能相对的同时对相对湿度和温度进行测量。
数字信号输出,从而减少用户信号的预处理负担。
单总线结构输出有效的节省用户控制器的I/O口资源。
并且,不需要额外电器元件。
独特的单总数据传输线协议使得读取传感器的数据更加便捷。
全部校准。
编码方式为8位二进制数。
40bit 二进制数据输出。
其中湿度整数部分占1Byte,小数部分1Byte;温度整数部分1Byte,小数部分1Byte。
其中,湿度为高16位。
最后1Byte为校验和。
卓越的长期稳定性,超低功耗。
4引脚安装,超小尺寸。
各型号管脚完全可以互换。
测量湿度范围从20%RH到90%RH;测量温度范围从0℃到50℃。
适用范围包括恒湿控制,消费家电类产品,温湿度计等领域。
3、外型与引脚排列引脚说明:Vcc 正电源Dout 输出NC 空脚GND 地- 1 -图3.0 DHT外型及管脚4、详细引脚说明:传感器管脚方向识别:正面(有通气孔的一面)看过去,从左到右依次为1、2、3、4脚。
电源引脚,DHTxx的供电电压为 3.5~5.5V。
传感器上电后,要等待1s 以越过不稳定状态在此期间不要发送任何指令。
dht11使用手册
dht11使用手册DHT11是一款常用的温湿度传感器,它能够测量并监测环境中的温度和湿度。
以下是关于DHT11的使用手册,希望能够帮助您更好地使用这款传感器。
一、简介DHT11是一款由AM2301温湿度传感器和数字模块构成的测温湿度模块。
它采用单总线通信方式,能够同时测量环境中的温度和湿度,具有测量精度高、稳定性好等优点。
DHT11的使用非常方便,只需将其连接到单片机的某个I/O口即可。
二、使用步骤1.硬件连接将DHT11的VCC引脚连接到单片机或开发板的+5V电源,GND引脚连接到地线,OUT引脚连接到单片机的I/O口(推荐使用GPIO)。
2.初始化在开始数据读取之前,需要先对DHT11进行初始化。
将I/O 口初始化为输出模式,然后输出低电平(0)至少18ms,再输出高电平(1)并保持60-400us。
此时DHT11会响应并开始工作。
3.数据读取初始化完成后,DHT11会自动开始测量环境中的温度和湿度。
等待40ms后,DHT11会自动将测量到的数据通过I/O口发送给单片机或开发板。
单片机或开发板可以通过读取I/O口的状态来获取数据。
4.数据解析从DHT11读取的数据是一个8位的湿度数据和一个8位的温度数据,需要对其进行解析才能得到实际的湿度和温度值。
根据DHT11的通信协议,我们可以使用以下公式来计算湿度和温度值:湿度值= (湿度数据×10) % 100 温度值= (温度数据/10) + 25三、注意事项在使用DHT11时,需要注意以下几点:1.DHT11的VCC引脚电压应保持在4.5-5.5V之间。
2.在读取数据时,需要等待一定的时间以保证数据传输的稳定。
通常情况下,建议等待大约80-200ms。
3.如果连续读取几次数据都失败,可能需要重新初始化DHT11。
4.在连接DHT11时,需要保证OUT引脚处于低电平状态。
如果OUT引脚处于高电平状态,可能会导致DHT11无法正常工作。
5.DHT11的工作环境温度应保持在0-50℃之间,如果环境温度过高或过低,可能会导致测量值不准确。
dht11使用手册
dht11使用手册摘要:1.DHT11 传感器简介2.DHT11 传感器的应用领域3.DHT11 传感器的工作原理4.DHT11 传感器的接线方式与注意事项5.DHT11 传感器的数据解析与处理6.DHT11 传感器的优缺点分析7.DHT11 传感器的使用与维护正文:DHT11 传感器是一款由我国生产的温湿度传感器,广泛应用于智能家居、农业、工业生产、医疗保健等多个领域。
它具有准确测量温湿度、响应速度快、抗干扰能力强等特点,可以满足各种环境监测需求。
一、DHT11 传感器简介DHT11 传感器是基于湿敏电阻原理,采用单片机技术设计而成的一款温湿度传感器。
它的主要功能是测量环境中的温度和湿度,并将测量结果通过数字信号输出。
DHT11 传感器具有体积小巧、安装简便、成本低廉等优点,可以方便地集成到各种智能设备中。
二、DHT11 传感器的应用领域DHT11 传感器广泛应用于以下领域:1.智能家居:用于监控室内温湿度,调节空调、加湿器等设备的工作状态;2.农业:用于监测温室、大棚等农业生产环境的温湿度,指导农业生产;3.工业生产:用于监测生产线、仓库等工业环境的温湿度,保证产品质量;4.医疗保健:用于监测医院病房、手术室等医疗环境的温湿度,为患者创造舒适的治疗环境。
三、DHT11 传感器的工作原理DHT11 传感器的工作原理主要是基于湿敏电阻。
传感器内部有一对热敏电阻和湿敏电阻,分别用于测量温度和湿度。
当环境中的温湿度发生变化时,热敏电阻和湿敏电阻的电阻值也会随之改变。
传感器内部单片机通过测量这两个电阻值的变化,计算出当前环境的温度和湿度。
四、DHT11 传感器的接线方式与注意事项DHT11 传感器的接线方式分为三线制和两线制。
三线制接线方式为:VCC(电源正极)、GND(电源负极)和DAT(数据输出)。
两线制接线方式为:VCC(电源正极)和DAT(数据输出)。
在接线时,需要注意以下几点:1.接线时,请确保电源电压与传感器的工作电压相匹配;2.接线时,请使用屏蔽线,以减小外部干扰;3.接线时,请保持接线牢固可靠,避免松动。
温湿度传感器DHT11C程序详解
#include<at89x52.h>#include<intrins.h>//加上这句下面的_nop_();就能用bit xianshiqiehuan;sbit dht11_dat=P1^6;unsigned char c,count, dht11temp,dht11dat;unsigned char dht11value[5];unsigned int x,y,z;unsigned char code dat[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,};delay(){unsigned char a;for(a=200;a>0;a--);}display(unsigned char x){P0=dat[(x%100)/10];//十位P1_2=0;delay();P1_2=1;P0=dat[(x%100)%10];//个位P1_3=0;delay();P1_3=1;}delay_1s(){unsigned int i=50000;while(i--);}delay_10us() //10us{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}void delayms(unsigned char x) //1ms单位延时程序{unsigned char j;while(x--){for(j=0;j<123;j++){;}}}read_dht11(){ unsigned char i;dht11_dat=1; _nop_(); //起始dht11_dat=0;//拉低总线delayms(18);//手册要求大于18msdht11_dat=1;//拉高总线等待dht11回应while(dht11_dat); // 等待dht11回应若有回应dht11_dat=0;往下执行while(!dht11_dat);//回应后dht11将总线拉低80us,过后又将总线拉高,进入下一步while(dht11_dat); //拉高80us 又变低,往下执行进入50us延时for(i=0;i<24;i++){while(!dht11_dat);//50us过后...... dht11_dat=1;往下执行delay_10us();delay_10us();delay_10us();//延时30us,查看总线是高是低,dht11temp=0; //先默认为0处理if(dht11_dat) dht11temp=1; //1处理dht11dat=dht11dat<<1; //必须先移动再或若先或再移本次数据就移动了dht11dat=dht11dat|dht11temp;dht11value[i/8]=dht11dat;while(dht11_dat);//如果处理的是1,30us过后总线还是1,那就在此等待总线变为0进入下一个50us低电平,不然会重复进行0处理}}main(){delay_1s(); //要求上电等1秒,让dht11稳定EA=1;//开放中断TMOD=0x01;//设T0 为16位计数方式ET0=1;//定时0中断允许TR0=1;//开启TR0while(1){if(!xianshiqiehuan) //显示温度display(dht11value[2]) ;else{display(dht11value[0]) ; //显示湿度P0=0x92&0x7f; //千位显S 代表湿度P1_0=0;delay();P1_0=1;}}}dingshi() interrupt 1 //定时器0服务程序{TH0=0;TL0=0;count++;if(count==55){count=0;read_dht11();xianshiqiehuan=~xianshiqiehuan; } //在切换显示时采集,以防中断采样带来的显示闪烁}。
DHT11 温湿度传感器说明书
DHT11说明书温湿度传感器●具有抗冲击性及电气性能优良●完全标定●数字输出,单总线通讯●优异的长期稳定性●响应迅速、恢复时间快、抗干扰能力强产品简述DHT11是一款含有已校准数字信号输出的温湿度复合传感器,采用了自主研发的集成式数字温湿度元件,应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。
DHT11传感器内包含一个温湿度测量元件和一个高性能MCU。
应用范围DHT11温湿度传感器可以应用于农业、家电、汽车、气象、医疗等领域,如暖通空调、除湿机、冷链仓储、测试及检测设备、数据记录仪、湿度调节系统、医疗等。
图1.DHT11温湿度传感器1.传感器性能1.1相对湿度表1.湿度特性表参数测试条件最小典型最大单位量程范围附加说明15-95%RH精度2--±5%RH重复性--±1-%RH互换性-完全互换响应时间3τ(63%)-<6-s迟滞--±0.3-%RH漂移4典型值-<0.5-%RH/yr 1.2电气特性表2.电气特性表符号参数测试条件最小典型最大单位VCC供电电压- 3.35 5.5VI平均电流5休眠-60-µA 测量-1000-µAV OL低电平输出电压I L6=5mA0-300mVV OH高电平输出电压Rp<25kΩ0.9*VCC-VCC VV IL低电平输入电压下降0-0.3VV IH高电平输入电压上升0.7-VCC VRp上拉电阻7VCC=5V1 4.7100kΩT S采样周期-2--s实际使用中的一些特性如功耗、输入和输出的高、低电平电压等都取决于供电电压。
在使用传感器时,要使系统获得鲁棒性,请确保各参数在表2所给出的范围内。
1正常工作范围:8~85%RH,超出此范围,传感器读数会有偏差(在90%RH湿度下60小时后,漂移>3%RH)。
工作范围进一步限定在-20~60℃。
2此精度为传感器出厂检验时,在25℃、VCC=5V条件下的测试精度。
DHT11指导手册说明书
DHT11指导手册说明书一、产品概述1. 温度测量范围:0℃~50℃2. 湿度测量范围:20%RH~90%RH3. 温度测量精度:±2℃4. 湿度测量精度:±5%RH5. 响应时间:≤1秒6. 工作电压:3.3V~5.5V二、产品外观及接线方法1. VCC:电源正极(3.3V~5.5V)2. GND:电源负极3. OUT:数字信号输出接线方法如下:1. 将DHT11的VCC引脚连接至电源正极。
2. 将DHT11的GND引脚连接至电源负极。
3. 将DHT11的OUT引脚连接至您的控制器(如单片机)的数字输入端口。
三、使用注意事项1. 在使用DHT11前,请确保电源电压在规定范围内,以免损坏传感器。
2. 为了提高测量精度,请在安装DHT11时,避免将其暴露在直射阳光下,并保持传感器周围通风良好。
3. DHT11的OUT引脚输出的是数字信号,请确保控制器端的输入端口兼容数字信号。
4. 在长时间运行过程中,请定期检查DHT11的连接线是否牢固,防止因线缆松动导致的测量数据不准确。
DHT11指导手册说明书四、编程与通信协议1. 初始化:在开始通信前,请确保DHT11已经上电,并将控制器的输入端口设置为输入模式。
2. 开始信号:主机(控制器)将数据线拉低至少18毫秒,然后拉高,以唤醒DHT11。
3. DHT11响应:DHT11在检测到开始信号后,会拉低数据线80微秒,作为响应信号,随后拉高数据线80微秒,准备发送数据。
4. 数据接收:DHT11以每bit 50微秒的低电平表示“0”,以每bit 2628微秒的低电平后跟随70微秒的高电平表示“1”。
数据传输顺序为:湿度整数、湿度小数、温度整数、温度小数、校验和。
5. 校验和计算:校验和是前四个字节的简单累加,用于验证数据传输的正确性。
6. 编程示例:下面是一个简单的伪代码示例,用于读取DHT11的数据: void setup() {pinMode(DHT11_PIN, INPUT);}void loop() {int humidity = readDHT11Humidity();int temperature = readDHT11Temperature();// 处理温湿度数据}int readDHT11Humidity() {// 发送开始信号// 接收数据// 返回湿度值}int readDHT11Temperature() {// 发送开始信号// 接收数据// 返回温度值}五、安装与调试1. 安装位置:选择一个适合的环境进行安装,避免高温、高湿或直射阳光的地方,以确保测量准确性。
利用DHT11测温度湿度实验报告讲解
微电子工艺实验题目气压温度测量系统学生姓名洪强学号***********学院电子与信息工程学院专业电子科学与技术指导教师曹鸿霞二O一五年十一月二十二日目录目录................................................ 错误!未定义书签。
1 系统描述.......................................... 错误!未定义书签。
1.1 课程设计题目 (2)1.2 系统设计方案介绍 (2)1.3 方案论证 (3)2 硬件电路设计 (3)2.1 LCD1602液晶显示模块 (3)2.1.1 LCD1602原理图及引脚说明 (4)2.1.2 LCD1602操作时序 (5)2.2 AT89C52单片机 (6)2.3 DHT11传感器模块 (7)2.3.1 DHT11原理图及引脚说明 (7)2.3.2 DHT11数据帧 (8)2.3.3 DHT11电气特性 (8)2.3.4 DHT11操作时序 (9)2.4 蜂鸣器模块 (10)2.5 DHT11温湿度检测设计图 (11)3 软件程序设计 (11)3.1 程序流程图 (11)3.2程序设计 (12)3.2.1主程序 (12)3.2.2 LCD显示程序 (13)3.2.3蜂鸣器程序 (20)4 实验结果 (21)5 实验总结 (22)参考文献 (22)测量气压温度测量系统洪强南京信息工程大学电子科学与技术,南京 210044摘要本实验基于使用STC89C52单片机、DHT11传感器模块、1602液晶显示屏模块以及报警模块。
简单明了的实现的可提要求。
DHT11数字温湿度传感器把采集到的温湿度数据传给单片机。
经过单片机的处理。
准确的显示到液晶屏上。
并对温湿度设置上下限。
越限报警。
)关键词:单片机DHT11传感器1602液晶显示屏STC89C52 报警1 系统描述1.1 课程设计题目温度测量及显示要求:①基于52系列单片机平台和DHT11温湿度传感器完成温湿度的测量;②温度测量数据的显示,可以用LCD1602显示;③对温湿度设置上下限,超过限度报警1.2 系统设计方案介绍电路总体上分为温湿度采集部分、中央处理器、显示模块以及报警模块部分。
温湿度检测器DHT11程序及显示程序
附录1:#include <regx52.h>#include <intrins.h>#include "DHT11.H"#include "DHT11.C"unsigned char range[4]={55,75,10,30}; //温湿度上下限初值unsigned char Humi_Temp_Tab[8]={6,9,0,0,7,8,0,0}; //数码管显示初值unsigned char numt1=0; //T1中断计数标志unsigned char numt0=0;unsigned char codeTab_Seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管段码 0-9unsigned char code Tab_Dig[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位选第一位到第八位unsigned char code units[4]={0x39,0x71,0x77,0x76}; //单位C/F/RH/**********************************************//* 温湿度采集函数 *//**********************************************/void getdata(){if(start_DHT11()){read_DHT11();}if(check_sum()){Humi_Temp_Tab[0]=DHT_data.DH_H/10;Humi_Temp_Tab[1]=DHT_data.DH_H%10;Humi_Temp_Tab[2]=DHT_data.DH_L/10; //存储湿度数据if(flag == 0){Humi_Temp_Tab[4]=DHT_data.T_H/10;Humi_Temp_Tab[5]=DHT_data.T_H%10;Humi_Temp_Tab[6]=DHT_data.T_L/10;//存储摄氏温度数据}else{Humi_Temp_Tab[4]=(9*DHT_data.T_H/5+32)/10;Humi_Temp_Tab[5]=(9*DHT_data.T_H/5+32)%10;Humi_Temp_Tab[6]=(18*DHT_data.T_H+320)%100%10;//存储华氏温度数据}}}/**********************************************//* 主函数 *//**********************************************/void main(){delay_ms(500); //先进行延时等待进入稳定状态P0 = 0;P1 = 0x0C; //初始化P1口EA = 0;TR1 = 0;TR0 = 0;TMOD = 0x11; //设置定时器 T0和T1,且工作方式都为方式1TH1 = (65536-5000)/256;TL1 = (65536-5000)%256;TH0 = (65536-2000)/256;TL0 = (65536-2000)%256; //设定初值2msTR1 = 1;TR0 = 1;EA = 1;ET0 = 1;ET1 = 1; //打开中断定时器T0和T1PT1 = 0;PT0 = 1; //强制设置优先级delay_ms(1000);while(1){if(DHT_data.DH_H<range[0]) //湿度小于下限{bee = 0;delay_ms(100);bee = 1;delay_ms(100);}if(DHT_data.DH_H>range[1]) //湿度大于上限{bee = 0;delay_ms(100);bee = 1;delay_ms(100);}if(DHT_data.T_H<range[2]) //温度小于下限{bee = 0;delay_ms(10);bee = 1;delay_ms(10);}if(DHT_data.T_H>range[3]) //温度大于上限{bee = 0;delay_ms(10);bee = 1;delay_ms(10);}}}/**********************************************//* 定时器T0中断 *//**********************************************/void T0_timer() interrupt 1{unsigned char KData = 0x00;TR0 = 0; //进入T0后将T0中断关闭TH0 = (65536-2000)/256;TL0 = (65536-2000)%256;switch(numt0){case 0: P0 = 0; Seg_ce = 1; Seg_ce = 0; //段选开关if(flag2 == 1)P0 = Tab_Seg[range[0]/10];//显示湿度下限的十位elseP0 = Tab_Seg[Humi_Temp_Tab[0]];//显示读取的湿度的十位Seg_ce = 1; Seg_ce = 0;.P0 = Tab_Dig[0]; //位选第一位Dig_ce = 1; Dig_ce = 0;numt0++;break;case 1: P0 = 0; Seg_ce = 1; Seg_ce = 0;if(flag2 == 1)P0 = Tab_Seg[range[0]%10];//显示湿度下限的个位elseP0 = Tab_Seg[Humi_Temp_Tab[1]];//显示读取的湿度的个位Seg_ce = 1; Seg_ce = 0;P0 = Tab_Dig[1]; //位选第二位Dig_ce = 1; Dig_ce = 0;numt0++;break;case 2: P0 = 0; Seg_ce = 1; Seg_ce = 0;if(flag2 == 1)P0 = Tab_Seg[range[1]/10];//显示湿度上限的十位elseP0 = units[2];//显示单位RSeg_ce = 1; Seg_ce = 0;P0 = Tab_Dig[2]; //位选第三位Dig_ce = 1; Dig_ce = 0;numt0++;break;case 3: P0 = 0; Seg_ce = 1; Seg_ce = 0;if(flag2 == 1)P0 = Tab_Seg[range[1]%10];//显示湿度上限的个位elseP0 = units[3]; //显示单位H Seg_ce = 1; Seg_ce = 0;P0 = Tab_Dig[3]; //位选第四位Dig_ce = 1; Dig_ce = 0;numt0++;break;case 4: P0 = 0; Seg_ce = 1; Seg_ce = 0;P0 = Tab_Dig[4];//位选第五位,且同时拉低键盘第四行Dig_ce = 1; Dig_ce = 0;Key_ce = 0;KData = P0; //扫描键盘第四行switch(KData){case 0xfe:case 0xfd:case 0xfb:case 0xf7:default:break;}while(KData != 0xff){KData = P0;}Key_ce = 1;if(flag2 == 1)P0 = Tab_Seg[range[2]/10];//显示温度下限的十位elseP0 = Tab_Seg[Humi_Temp_Tab[4]];//显示读取的温度的十位Seg_ce = 1; Seg_ce = 0;numt0++;break;case 5: P0 = 0; Seg_ce = 1; Seg_ce = 0;P0 = Tab_Dig[5];//位选第六位,且同时拉低键盘第三行Dig_ce = 1; Dig_ce = 0;Key_ce = 0;KData = P0;//扫描键盘第三行switch(KData){case 0xfe:if(range[0]<range[1]&&flag2==1)range[0]++;break; //湿度下限加case 0xfd:if(range[1]<90&&flag2==1)range[1]++;break; //湿度上限加case 0xfb:if(range[2]<range[3]&&flag2==1range[2]++;break; //温度下限加case 0xf7:if(range[3]<50&&flag2==1)range[3]++;break; //温度上限加default:break;}while(KData != 0xff){KData = P0;}Key_ce = 1;if(flag2 == 1)P0 = Tab_Seg[range[2]%10];//显示温度下限的个位elseP0 = Tab_Seg[Humi_Temp_Tab[5]]-0x80; //显示读取温度的个位(带小数点的)Seg_ce = 1; Seg_ce = 0;numt0++;break;case 6: P0 = 0; Seg_ce = 1; Seg_ce = 0;P0 = Tab_Dig[6];//位选第七位,且同时拉低键盘第二行Dig_ce = 1; Dig_ce = 0;Key_ce = 0;KData = P0; //扫描键盘第二行switch(KData){case 0xfe:if(range[0]>20&&flag2==1)range[0]--;break; //湿度下限减case 0xfd:if(range[0]<range[1]&&flag2==1)range[1]--;break; //湿度上限减case 0xfb:if(range[2]>0&&flag2==1)range[2]--;break; //温度下限减case 0xf7:if(range[2]<range[3]&&flag2==1)range[3]--;break; //温度上限减default:break;}while(KData != 0xff){KData = P0;}Key_ce = 1;if(flag2 == 1)P0 = Tab_Seg[range[3]/10];//显示温度上限的十位elseP0 = Tab_Seg[Humi_Temp_Tab[6]];//显示读取温度的小数位的十位Seg_ce = 1; Seg_ce = 0;numt0++;break;case 7: P0 = 0; Seg_ce = 1; Seg_ce = 0;P0 = Tab_Dig[7];//位选第八位,且同时拉低键盘第一行Dig_ce = 1; Dig_ce = 0;Key_ce = 0;KData = P0; //扫描键盘第一行switch(KData){case 0xfe:flag2 = ~flag2;TR1 = ~TR1;break;//进入和退出限制调整模式case 0xfd:flag = ~flag;break;//进行华氏摄氏温度的转换设置case 0xfb:case 0xf7:default:break;}while(KData != 0xff){KData = P0;}Key_ce = 1;if(flag == 0&&flag2 == 0)P0 = units[0]; //显示单位Celse if(flag == 1&&flag2 == 0)P0 = units[1]; //显示单位Felse if(flag2 == 1)P0 = Tab_Seg[range[3]%10];//显示温度上限的个位Seg_ce = 1; Seg_ce = 0;numt0 = 0;break;default:numt0 = 0;break;}TR0 = 1; //打开T0}/**********************************************//* 定时器T1中断 *//**********************************************/void T1_timer() interrupt 3{TR1 = 0; //关闭T0TH1 = (65536-50000)/256;TL1 = (65536-50000)%256;if(numt1 == 25){getdata(); //采集数据numt1 = 0;}elsenumt1++;TR1 = 1; //打开T0}#ifndef __DHT11_h__#define __DHT11_h__#include <REGX52.H>/**********************************************//* 引脚定义 *//**********************************************/sbit DHT_bus = P2^0 ; //DHT11数据传输口sbit Key_ce=P1^3; //按键输出使能sbit Seg_ce=P1^0; //段选位sbit Dig_ce=P1^1; //位选位sbit bee = P2^1; //蜂鸣器控制口/**********************************************//* 函数声明 *//**********************************************/bit start_DHT11(void); //开始void read_DHT11(void); //读取void delay_20us(void); //20us延时void delay_ms(unsigned char m); //N ms延时bit check_sum(void); //和校验/**********************************************//* 宏定义 *//**********************************************/#define HIGH 1#define LOW 0/**********************************************//* 变量定义 *//**********************************************/#define DHT_timeover 5 //高电平维持时间,用于识别“数据0”和“数据1”bit flag2 = 0; //设置调节上下限模式转换标志bit flag=0; //设置摄氏和华氏温度模式转换标志/**********************************************//* 结构体 *//**********************************************/struct DHT_data{unsigned char DH_H; //湿度整数unsigned char DH_L; //湿度小数unsigned char T_H; //温度整数unsigned char T_L; //温度小数unsigned char Checksum; //校验和}DHT_data;#endif#include "DHT11.h"#include <intrins.h>/**********************************************//* 开始 DHT11 温湿度计 *//* 输入:无 *//* 输出:应答标志 0:应答失败 1:应答成功 *//**********************************************/bit start_DHT11(void){bit DHT_start;DHT_start = 0;DHT_bus = HIGH;DHT_bus = LOW; //拉低18ms以上delay_ms(18);TR0 = 0;DHT_bus = HIGH;delay_20us();delay_20us(); //拉高20~40uswhile(!DHT_bus){DHT_start = 1;} //DHT应答,DHT拉低80us后拉高80us,然后开始传输数据//数据(40bit)=8bit湿度整数+8bit湿度小数+8bit温度整数+8bit 温度小数+8bit校验和while(DHT_bus){};return(DHT_start); //应答成功返回1}/**********************************************//* 读取 DHT11 温湿度计 *//* 读取结果存在DHT_data结构体内 *//* 输入:无输出:无 *//**********************************************/void read_DHT11(void){unsigned char m,n,timer_dht;unsigned char *p;p=&DHT_data.DH_H; //数据放在DHT_date的结构体中for(m=0;m<5;m++){for(n=0;n<8;n++){while(~DHT_bus); //DHT拉低12-14us表示1bit数据开始timer_dht=0x00;while(DHT_bus) //随后DHT拉高总线,单片机通过高电平维持的时间判断“数据0”还是“数据1”{ //数据0维持26~28us高电平,数据1维持116~118us高电平timer_dht++; //由于此处对延时时间的长度要求很高,所以采用另一种办法判断}if(timer_dht>DHT_timeover){*p<<=1;*p|=0x01;}else{*p<<=1;*p&=0xfe;}}p++;}TR0 = 1;}/**********************************************//* 20us 精确延时 *//* 51用在12Mhz晶振下 *//* 调用函数使用LCALL和RET指令,共花费4个周期 *//* 因此只有16个NOP *//**********************************************/.void delay_20us(void){_nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();}/**********************************************//* N ms 延时 *//* while()额外占用约5周期 *//* 因此内层while(40--)20us 大约1ms *//* Nms延时函数(未测试) *//**********************************************/void delay_ms(unsigned char m){unsigned char n = 38;while(m--){while(n--){delay_20us();}}}/**********************************************//* 校验和判断 *//* 校验位 = 湿度整数位+湿度小数位+温度整数位+温度小数位之和 *//* 校验正确返回:1 失败返回:0 *//**********************************************/bit check_sum(void){if(DHT_data.Checksum==(DHT_data.DH_H+DHT_data.DH_L+DHT_data.T _H+DHT_data.T_L))return(1); //校验正确elsereturn(0); //校验失败}Word 资料。
课件(DHT11)
HT11的数据传送方式(重点,难 的数
线空闲状态为高电平
DHT11的数据传送方式 的数据传送方式
发送一次开始信号,DHT11 ,DHT11开始等待主机开始信号结 T11发送响应信号,接着便送出 接着便送出40位的数据,并触发 集。
没有接收到主机发送开始信号,DHT11不会主动进行 没有接收到主机发送开始信号 集。 发出开始信号后,可以切换到输入模式 可以切换到输入模式,或者输出 ,总线由上拉电阻拉高。
的应用领域
关于DHT11 DHT11
DHT11的数据传送方式 的数据传送方式
U接口:单线制串行接口, ,采用单总线数据格式 U传送的数据分为小数部分和整数部分 传送的数据分为小数部分和整数部分(当前小数 ,以备后用) 的数据传输为40位:(高位先出 高位先出)
8bit湿度整数数据 湿度小数数据 8bit湿度整数数据+8bit湿度小数数据 湿度整数数据 +8bi温度整数数据 8bi温度整数数据 温度小数数据 8bi温度整数数据+8bit温度小数数据 +8bit +8bit校验和 “8bit湿度整数数据+8bit湿度小数数据 湿度小数数据+8bi温度整数数据+8bit温 据”所得结果的末8位等于8bit校验和 校验和
DHT11的数据传送方式 的数据传送方式
做的:
第一:主机将总线拉低,持续18 18毫秒后再拉高 第二:等待DHT11的响应信号 第三:延时后开始读取数据 第四:处理数据
DHT11的数据传送方式 的数据传送方式
数据是如何表示的:
传送中的“0”
数据传送中的“1”
程序实现
的准备:
程序实现
激活DHT11 等待数据开始 延时30us
dht11模块测量温湿度的流程
DHT11模块测量温湿度的流程概述本文将介绍D HT11模块的使用方法,包括连接电路、读取数据的流程以及温湿度的计算方法。
连接电路首先,我们需要将DH T11模块与单片机进行连接。
需要使用3个引脚:V C C、GN D和数据引脚。
具体的连接方式如下:-将DH T11模块的VC C引脚连接到单片机的3.3V或5V电源引脚上。
-将DH T11模块的GN D引脚连接到单片机的地(GN D)引脚上。
-将DH T11模块的数据引脚连接到单片机的任意可用的数字引脚上。
连接完成后,我们可以开始测量温湿度了。
测量温湿度的流程1.初始化在开始测量之前,我们需要对DH T11模块进行初始化。
初始化的步骤包括向D HT11发送一个低电平的信号,并延时至少18毫秒。
这个低电平信号将引导D HT11进入测量模式。
2.接收数据初始化完成后,D HT11模块会将测量到的温湿度数据以串行的形式发送回来。
我们需要准备好接收数据的缓冲区,并准备接收数据的引脚。
3.解析数据接收到数据后,我们需要对它进行解析。
D H T11模块发送的数据包括温度和湿度的整数部分和小数部分。
我们需要按照一定的规则将这些数据进行解析,得到最终的温度和湿度数值。
4.计算温湿度解析完数据后,我们可以根据DH T11模块的计算公式来得到真实的温度和湿度数值。
这个公式在D HT11模块的数据手册中有详细的说明。
5.显示结果最后,我们可以将测量得到的温湿度数据显示在单片机的L CD屏幕上,或者通过串口进行输出。
以上就是使用DH T11模块测量温湿度的完整流程。
通过连接电路、初始化、接收数据、解析数据和计算温湿度,我们可以准确地测量环境中的温度和湿度,为后续的应用提供数据支持。
小结本文介绍了使用D HT11模块测量温湿度的流程。
通过连接电路、初始化、接收数据、解析数据和计算温湿度,我们可以轻松地获取环境的温湿度数据。
这对于许多物联网和环境监测应用来说是非常重要的。
希望通过本文的介绍,你能够更好地理解和应用DH T11模块。
DHT11说明
用户单片机发送一次开始信号后,DHT11 从低功耗模式转换到高速模式,待主机开始信号结束后,DHT11 发送响应信号,送出 40bit 的数据,并触发一次信采集。
信号发送如图所示。
数据时序图注:主机从 DHT11 读取的温湿度数据总是前一次的测量值,如两次测间隔时间很长,请连续读两次以第二次获得的值为实时温湿度值。
外设读取步骤步骤一:DHT11 上电后(DHT11 上电后要等待 1S 以越过不稳定状态在此期间不能发送任何指令),测试环境温湿度数据,并记录数据,同时 DHT11 的 DATA 数据线由上拉电阻拉高一直保持高电平;此时DHT11 的DATA 引脚处于输入状态,时刻检测外部信号。
步骤二:单片机的 I/O 设置输出低电平,且低电平保持时间不能小于18ms,然后单片机的 I/O置高电位,为输入状态,等待 DHT11 作出回答信号,发送信号如图所示:步骤三:DHT11 的 DATA 引脚检测到外部信号有低电平时,等待外部信号低电平结束,延迟后 DHT11 的 DATA引脚处于输出状态,输出 80 微秒的低电平作为应答信号,紧接着输出 80 微秒的高电平通知外设准备接收数据,单片机的 I/O 检测到有低电平(DHT11 回应信号)后,等待 80 微秒的高电平后的数据接收,发送信号如图所示:步骤四:由 DHT11 的 DATA 引脚输出 40 位数据,微处理器根据 I/O 电平的变化接收 40 位数据。
“0”的格式为: 50 微秒的低电平和 26-28 微秒的高电平,“1”的格式为: 50 微秒的低电平加 70微秒的高电平。
“0”、“1”格式信号如图所示:结束信号:DHT11 的 DATA 引脚输出 40 位数据后,继续输出低电平 50 微秒后转为输入状态,由于上拉电阻随之变为高电平。
自动测量数据重装,等待外部信号的到来。
自我理解:单片机响应部分:开始—》18ms的低电平——》置高电平(等待信号)——》检测到被拉低80us ——》紧接是高电平80us——》 40数据位——》最后50us低电平——》结束8位湿整+ 8位湿小+8位温整+ 8位温小+8位校验码。
DHT11中文资料及C例程
while(dht11 == 0 && count++ < NUMBER); if(count >= NUMBER) { status = ERROR; //设定错误标志 return 0; //函数执行过程发生错误就退出函数 } //26-28us 的高电平表示该位是 0,为 70us 高电平表该位 1 DHT11_Delay_10us(); DHT11_Delay_10us(); DHT11_Delay_10us(); //延时 30us 后检测数据线是否还是高电平 if(dht11 != 0) { //进入这里表示该位是 1 value++; //等待剩余(约 40us)的高电平结束 while(dht11 != 0 && count++ < NUMBER) { dht11 = 1; } if(count >= NUMBER) { status = ERROR; //设定错误标志 return 0; } } } return (value); }
#define NUMBER
20
#define SIZE 5 static unsigned char status; //存放五字节数据的数组 static unsigned char value_array[SIZE]; /*可在其他的文件引用温湿度值,实际是温度的整数的 10 倍 如 dht11 读回的温度是 26,则 temp_value = 260, 湿度同理*/ int temp_value, humi_value;
1/e(63%)25℃, 1m/s 空气
Max 1
单位 %RH Bit %RH %RH %RH %RH %RH %RH S %RH %RH/yr
dht11使用手册
dht11使用手册摘要:1.DHT11 简介2.DHT11 的功能和特点3.DHT11 的使用方法4.DHT11 的安装与调试5.DHT11 的注意事项6.DHT11 的故障排除与维护正文:【DHT11 简介】DHT11 是一款数字温湿度传感器,它可以实时测量环境温度和湿度,并将数据通过数字信号输出。
DHT11 具有测量精度高、响应速度快、抗干扰能力强等优点,广泛应用于智能家居、农业生产、实验室环境控制等领域。
【DHT11 的功能和特点】1.测量精度高:DHT11 的测量精度可达到±0.5℃(温度)和±5%RH(湿度)。
2.响应速度快:DHT11 的响应速度在5 秒内,能够快速反应环境温湿度变化。
3.抗干扰能力强:DHT11 具有较强的抗电磁干扰和抗射频干扰能力,保证在复杂环境下也能正常工作。
4.采用数字信号输出:DHT11 通过单总线数据传输,简化了系统设计,降低了系统成本。
5.供电电压范围宽:DHT11 的供电电压范围为3.3V-5V,适用于多种电源环境。
【DHT11 的使用方法】1.接线:将DHT11 的数据线连接到微控制器的相应接口,同时将VCC 接3.3V-5V 电源,GND 接地。
2.上传程序:将编写好的程序上传到微控制器,使微控制器能够读取DHT11 的数据。
3.读取数据:通过微控制器的接口读取DHT11 的温度和湿度数据。
【DHT11 的安装与调试】1.安装:根据实际应用场景选择合适的安装位置,将DHT11 固定在安装位置上。
2.调试:通过串口工具软件查看DHT11 输出的数据,检查数据是否正常。
【DHT11 的注意事项】1.在安装过程中,要避免将DHT11 安装在阳光直射、风吹雨淋的位置,以免影响测量精度。
2.在接线过程中,要确保接线牢固,避免松动导致接触不良。
3.在使用过程中,不要频繁断电,以免影响DHT11 的使用寿命。
【DHT11 的故障排除与维护】1.如果DHT11 不能正常工作,请检查接线是否正确、电源电压是否稳定。
DHT11湿温度传感器使用范例
//
显示模块
//*****************************************************************************
void Display (void)
{
U8 i;
for(i=0;i<=5;i++)
{
DDRD |= 0XFC;
PORTD&=0x03;
度和温度。DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个
I/O 口。传感器内部湿度和温度数据 40Bit 的数据一次性传给单片机,数据采用
校验和方式进行校验,有效的保证数据传输的准确性。DHT11 功耗很低,5V 电
源电压下,工作平均最大电流 0.5mA。
性能指标和特性如下:
z 工作电压范围:3.5V-5.5V
typedef signed int S16; // defined for signed 16-bits integer variable
typedef unsigned long U32; // defined for unsigned 32-bits integer variable
typedef signed long S32; // defined for signed 32-bits integer variable
byte4
byte3
00101101 00000000
整数
小数
湿度
byte2 byte1
00011100 00000000
整数
小数
温度
byte0
01001001 校验和 校验和
由以上数据就可得到湿度和温度的值,计算方法: humi (湿度)= byte4 . byte3=45.0 (%RH) temp (温度)= byte2 . byte1=28.0 ( ℃) jiaoyan(校验)= byte4+ byte3+ byte2+ byte1=73(=humi+temp)(校验正确)
DHT11数字温湿度传感器模块 V1.0
湿度传感器在同一温度下工作。如果与释放热量的电子元件共用一个印刷线路板,在
安装时应尽可能将DHT11远离电子元件,并安装在热源下方,同时保持外壳的良好通
风。为降低热传导,DHT11与印刷电路板其它部分的铜镀层应尽可能最小,并在两者
之间留出一道缝隙。
光线影响:
长时间暴露在太阳光下或强烈的紫外线辐射中,会使性能降低。
置于极限工作条件下或化学蒸汽中的传感器,通过如下处理程序,可使其恢复到 校准时的状态。在50-60℃和<10%RH的湿度条件下保持2小时(烘干);随后在20~30 ℃和>70%RH的湿度条件下保持5小时以上。
-4-
奥松机器人
温度影响:
RobotBase
气体的相对湿度,在很大程度上依赖于温度。因此在测量湿度时,应尽可能保证
-6-
奥松机器人
for(i=0; i< 8; i++) { while(!(PINC & _BV(DHT11_PIN))); // wait for 50us delayMicroseconds(30); if(PINC & _BV(DHT11_PIN)) result |=(1<<(7-i)); while((PINC & _BV(DHT11_PIN))); // wait '1' finish
公司网址: 机器人视频播客网址:/user_show/uid_robotbase 机器人互动社区网址:
-2-
奥松机器人
一、注意事项
RobotBase
1. 在未认真阅读本说明之前请勿给加电!以免错误接线造成传感器永久损坏。
七、DHT11数字温湿度传感器的测试
我们使用 Arduino 控制器来做个测试,要用到硬件设备如下: 1、 Arduino 控制器×1 2、 Arduino 传感器扩展板×1 3、 DHT11 温湿度传感器模块×1 4、 蜂鸣器发声模块×1 和 LED 发光模块×1 5、 通用 3P 传感器连接线×3
dht11使用手册
dht11使用手册摘要:1.引言2.DHT11传感器简介3.DHT11传感器参数4.DHT11传感器接线方式5.DHT11传感器使用方法6.DHT11传感器数据处理7.DHT11传感器常见问题及解决方法8.总结正文:【引言】DHT11是一款非常实用的温湿度传感器,广泛应用于各种智能设备中。
本文将详细介绍DHT11传感器的使用手册,帮助用户更好地了解和使用该传感器。
【DHT11传感器简介】DHT11是一款由Dallas公司生产的温湿度传感器,具有准确、灵敏、稳定等特点。
它可以通过简单的接口与各种微控制器或单片机相连接,实现对环境温湿度的测量。
【DHT11传感器参数】DHT11的主要参数包括:- 工作电压:3.3V或5V- 工作电流:1.5mA- 测量范围:温度-40℃~+80℃,湿度0%~100%- 测量精度:温度±0.5℃,湿度±5%【DHT11传感器接线方式】DHT11传感器有四根引脚,分别为VCC(电源正极)、GND(电源负极)、DHT1(数据输出)和DHT2(数据输出)。
通常情况下,VCC接3.3V或5V电源,GND接电源负极,DHT1接单片机的数据输入脚,DHT2接单片机的数据输入脚。
【DHT11传感器使用方法】1.连接电路:将DHT11传感器的VCC接3.3V或5V电源,GND接电源负极,DHT1接单片机的数据输入脚,DHT2接单片机的数据输入脚。
2.初始化:配置单片机的相关寄存器,使能DHT11数据输出口的串行通信功能。
3.读取数据:通过单片机的串行通信功能,读取DHT11传感器输出的温湿度数据。
4.数据处理:将读取到的温湿度数据进行解析,并转换为实际温湿度值。
【DHT11传感器数据处理】DHT11传感器输出的数据为两个字节,其中高字节表示湿度值,低字节表示温度值。
湿度值范围为0%~100%,温度值范围为-40℃~+80℃。
解析数据时,需要将两个字节的高四位和低四位分别进行处理,得到湿度值和温度值。
01_ZigBee组网实验说明-温湿度DHT11
01_ZigBee传感器组网——温湿度传感器DHT11实验现象:使用DHT11温湿度传感器判断当前温湿度;终端节点采集温湿度数据,通过自身串口输出并可与协调器组网,发送采集的数据给协调器,协调器接收后串口打印输出。
传感器介绍:DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。
传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。
因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
每个DHT11传感器都在即为精确的湿度校验室中进行校准。
校准系数以程序的形式存在OTP内存中,传感器内部在检测型号的处理过程中要调用这些校准系数。
单线制串行接口,使系统集成变得简易快捷。
超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为给类应用甚至最为苛刻的应用场合的最佳选择。
产品为4针单排引脚封装,连接方便。
实现平台:ZigBee传感器节点DHT11硬件电路图硬件说明:DHT11是单总线的传感器,模块上电后有上电指示灯指示,CMD和DATA都是同一根线的。
实验过程:分三个步骤,如下:一:下载EndDerviceEB至ZigBee节点二:下载CoordinatorEB至ZigBee节点三:终端节点与协调器组网一:下载EndDerviceEB至ZigBee节点打开例程,下载器连接好ZigBee传感器节点,下载EndDerivceEB至终端节点。
运行程序,ZigBee节点通过USB连接到电脑,打开电脑串口,串口设置如下:波特率:115200,数据位:8位,停止位:1位,无奇偶校验位。
注意:和协调器组网成功后,Enddevice的串口才能打印出传感器的信息。
二:下载CoordinatorEB至ZigBee节点打开例程,下载器连接好ZigBee传感器节点,下载CoordinatorEB程序作为协调器节点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字温湿度传感器DHT111、概述DHTxx 系列数字温湿度传感器就是一款含有已校准数字信号输出得温湿度复合传感器。
它应用专用得数字模块采集技术与温湿度传感技术,确保产品具有极高得可靠性与卓越得长期稳定性。
传感器包括一个电阻式测湿元件与一个NTC测温元件,并与一个高性能8位单片机相连接。
因此,该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
每个DHTxx传感器都在极为精确得湿度校验室中进行校准。
校准系数以程序得形式储存在OTP内存中,传感器内部在检测信号得处理过程中要调用这些校准系数。
单线制串行输出接口,使系统集成变得简易快捷。
超小得体积、极低得功耗,使其成为各类应用甚至最为苛刻得应用场合得最佳选则。
本产品为 4 针单排引脚封装,特殊封装形式可根据用户需求而提供。
2、产品特性湿温度传感器得一体化结构能相对得同时对相对湿度与温度进行测量。
数字信号输出,从而减少用户信号得预处理负担。
单总线结构输出有效得节省用户控制器得I/O口资源。
并且,不需要额外电器元件。
独特得单总数据传输线协议使得读取传感器得数据更加便捷。
全部校准。
编码方式为8位二进制数。
40bit 二进制数据输出。
其中湿度整数部分占1Byte,小数部分1Byte;温度整数部分1Byte,小数部分1Byte。
其中,湿度为高16位。
最后1Byte为校验与。
卓越得长期稳定性,超低功耗。
4引脚安装,超小尺寸。
各型号管脚完全可以互换。
测量湿度范围从20%RH到90%RH;测量温度范围从0℃到50℃。
适用范围包括恒湿控制,消费家电类产品,温湿度计等领域。
3、外型与引脚排列引脚说明:Vcc 正电源Dout 输出NC 空脚GND 地 1图3、0 DHT外型及管脚4、详细引脚说明:传感器管脚方向识别:正面(有通气孔得一面)瞧过去,从左到右依次为1、2、3、4脚。
表4、0:电源引脚,,要等待1s 以越过不稳定状态在此期间不要发送任何指令。
电源引脚(VDD,GND)之间可增加一个100nF 得电容,用以去耦滤波。
5、订货信息67、连接接口说明DHTxx数字湿温度传感器连接电路简单,只需要占用控制器一个I/O口即可完成上下位得连接。
典型应用电路如下图所示。
另外,建议连接线长度短于20时用5K上拉电阻,大于20米时根据实际情况使用合适得上拉电阻,如图5、0所示。
图5、0 典型电路连接8、数据格式及处理8、1、格式数字湿温度传感器采用单总线数据格式。
即,单个数据引脚端口完成输入输出双向传输。
其数据包由5Byte(40Bit)组成。
一次通讯时间最大3ms,数据分小数部分与整数部分,具体格式在下面说明。
DATA 用于微处理器与DHTxx之间得通讯与同步,采用单总线数据格式, 当前小数部分用于以后扩展,现读出为0。
操作流程如下:一次完整得数据传输为40bit,高位先出。
数据格式:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验与校验与数据为前四个字节相加。
具体见表6、1:8、2、数据编码及处理传感器数据输出得就是未编码得二进制数据。
数据(湿度、温度、整数、小数)之间应该分开处理。
如果,某次从传感器中读取如下5Byte数据:byte4 byte3 byte2 byte1 byte000101101 00000 00000整数小数整数小数校验与湿度温度校验与由以上数据就可得到湿度与温度得值,计算方法:humi (湿度)= byte4 、byte3=45、0 (%RH)temp (温度)= byte2 、byte1=28、0 ( ℃)jiaoyan(校验)= byte4+ byte3+ byte2+ byte1=739、时序DHTxx传感器就是通过奥松电子有限公司开发得单总线协议与上位机(控制器)进行数据通信。
DHTxx传感器需要严格得读写协议来确保数据得完整性。
整个读写分为,上位机发送起始信号,上位机接收下位机发来得握手响应信号,读‘0’,与读‘1’四个步骤。
所有得信号除主机启动复位信号外,全部都由DHTxx产生。
通过单总线访问DHTxx顺序归纳如下:主机发开始信号主机等待接收DHTxx响应信号主机连续接收40Bit得数据与校验与数据处理9、1、主机复位信号与DHT响应信号图7、1 DHT复位时序用户主机发送一次开始信号(低电平)DHT从低速模式转换到高速模式,等待主机开始信号结束(拉高)后,DHT发送响应信号,送出40bit得数据,并触发一次信号采集,用户可选择读取部分数据。
注意:总线线空闲状态为高电平,主机把总线线拉低等待DHT响应,主机把总线线拉低必须大于18毫秒,保证DHT能检测到起始信号。
DHT接收到主机得开始信号后,等待主机开始信号结束,然后发送低电平响应信号。
主机发送开始信号结束后,延时等待2040us后, 读取DHT得回应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可,总线线由上拉电阻拉高。
9、2、DHT开始发送数据流程图7、2 读DHT数据流程主机发送开始信号后,延时等待20us40us后读取DHT得回应信号,读取总线为低电平,说明DHT发送响应信号,DHT发送响应信号后,再把总线拉高,准备发送数据,每一bit数据都以低电平开始,格式见下面图示。
如果读取响应信号为高电平,则DHT没有响应,请检查线路就是否连接正常。
9、3、数字‘0’信号表示方法图7、3 信号‘0’时序图数字‘0’表示方法为,首先DHT把总线拉低1214us然后拉高,高电平保持时间在2628us这个范围内。
则此比特为‘0’电平。
9、4、数字‘1’信号表示方法图7、4 信号‘1’时序图数字‘1’表示方法为,首先DHT把总线拉低1214us然后拉高,高电平保持时间在116118us这个范围内。
则此比特为‘1’电平。
10、测量分辨率测量分辨率分别为8bit(温度)、8bit(湿度)。
11、电气特性VDD=5V,T = 25注:采样周期间隔不得低于1秒钟。
12、应用信息12、1工作与贮存条件超出建议得工作范围可能导致高达3%RH得临时性漂移信号。
返回正常工作条后,传感器会缓慢地向校准状态恢复。
要加速恢复进程/可参阅7、3小节得“恢复处理”。
在非正常工作条件下长时间使用会加速产品得老化过程。
12、2暴露在化学物质中电阻式湿度传感器得感应层会受到化学蒸汽得干扰,化学物质在感应层中得扩散可能导致测量值漂移与灵敏度下降。
在一个纯净得环境中,污染物质会缓慢地释放出去。
下文所述得恢复处理将加速实现这一过程。
高浓度得化学污染会导致传感器感应层得彻底损坏。
12、3恢复处理置于极限工作条件下或化学蒸汽中得传感器,通过如下处理程序,可使其恢复到校准时得状态。
在5060℃与< 10%RH得湿度条件下保持2 小时(烘干);随后在2030℃与>70%RH得湿度条件下保持 5小时以上。
12、4温度影响气体得相对湿度,在很大程度上依赖于温度。
因此在测量湿度时,应尽可能保证湿度传感器在同一温度下工作。
如果与释放热量得电子元件共用一个印刷线路板,在安装时应尽可能将DHT11远离电子元件,并安装在热源下方,同时保持外壳得良好通风。
为降低热传导,DHT11与印刷电路板其它部分得铜镀层应尽可能最小,并在两者之间留出一道缝隙。
12、5光线长时间暴露在太阳光下或强烈得紫外线辐射中,会使性能降低。
12、6配线注意事项DATA信号线材质量会影响通讯距离与通讯质量,推荐使用高质量屏蔽线。
13、封装信息14、焊接信息手动焊接,在最高260℃得温度条件下接触时间须少于10秒。
15、注意事项(1)避免结露情况下使用。
(2)长期保存条件:温度10-40℃,湿度60%以下。
例程://****************************************************************//// DHT21使用范例//单片机: AT89S52 或STC89C52RC// 功能:串口发送温湿度数据波特率9600//硬件连接: P2、0口为通讯口连接DHT11,DHT11得电源与地连接单片机得电源与地,单片机串口加MAX232连接电脑//****************************************************************//#include <reg51、h>#include <intrins、h>//typedef unsigned char U8; /* defined for unsigned 8bits integer variable 无符号8位整型变量*/typedef signed char S8; /* defined for signed 8bits integer variable 有符号8位整型变量*/typedef unsigned int U16; /* defined for unsigned 16bits integer variable 无符号16位整型变量*/typedef signed int S16; /* defined for signed 16bits integer variable 有符号16位整型变量*/typedef unsigned long U32; /* defined for unsigned 32bits integer variable 无符号32位整型变量*/typedef signed long S32; /* defined for signed 32bits 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 P2_0 = P2^0 ;sbit P2_1 = P2^1 ;sbit P2_2 = P2^2 ;sbit P2_3 = P2^3 ;//////定义区//////U8 U8FLAG,k;U8 U8count,U8temp;U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;U8U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_t emp;U8 U8data;U8 outdata[5]; //定义发送得字节数U8 indata[5];U8 count, count_r=0;U8 str[5]={"RS232"};U16 U16temp1,U16temp2;SendData(U8 *a){outdata[0] = a[0];outdata[1] = a[1];outdata[2] = a[2];outdata[3] = a[3];outdata[4] = a[4];count = 1;SBUF=outdata[0];}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 (void){U8 i;for(i=0;i<8;i++){U8FLAG=2;//P2_1=0 ; //TP2_1=1 ; //T//while((!P2_0)&&U8FLAG++);Delay_10us;Delay_10us;// Delay_10us;U8temp=0;if(P2_0)U8temp=1;U8FLAG=2;while((P2_0)&&U8FLAG++);//P2_1=0 ; //TP2_1=1 ; //T////超时则跳出for循环if(U8FLAG==1)break;//判断数据位就是0还就是1// 如果高电平高过预定0高电平值则数据位为1U8data<<=1;U8data|=U8temp; //0}//rof}////湿度读取子程序////以下变量均为全局变量//温度高8位== U8T_data_H//温度低8位== U8T_data_L//湿度高8位== U8RH_data_H//湿度低8位== U8RH_data_L//校验8位== U8checkdata//调用相关子程序如下// Delay;, Delay_10us;,;//void RH(void){//主机拉低18msP2_0=0;Delay(180);P2_0=1;//总线由上拉电阻拉高主机延时20usDelay_10us;Delay_10us;Delay_10us;Delay_10us;//主机设为输入判断从机响应信号P2_0=1;//判断从机就是否有低电平响应信号如不响应则跳出,响应则向下运行if(!P2_0) //T !{U8FLAG=2;//判断从机就是否发出80us 得低电平响应信号就是否结束while((!P2_0)&&U8FLAG++);U8FLAG=2;//判断从机就是否发出80us 得高电平,如发出则进入数据接收状态while((P2_0)&&U8FLAG++);//数据接收状态;U8RH_data_H_temp=U8data;;U8RH_data_L_temp=U8data;;U8T_data_H_temp=U8data;;U8T_data_L_temp=U8data;;U8checkdata_temp=U8data;P2_0=1;//数据校验U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);if(U8temp==U8checkdata_temp){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功能描述: A T89C51 11、0592MHz 串口发//送温湿度数据,波特率9600//void main{U8 i,j;//uchar str[6]={"RS232"};/* 系统初始化*/TMOD = 0x20; //定时器T1使用工作方式2TH1 = 253; // 设置初值TL1 = 253;TR1 = 1; // 开始计时SCON = 0x50; //工作方式1,波特率9600bps,允许接收ES = 1;EA = 1; // 打开所以中断TI = 0;RI = 0;SendData(str) ; //发送到串口Delay(1); //延时100US(12M晶振)while(1){////调用温湿度读取子程序RH;//串口显示程序//str[0]=U8RH_data_H;str[1]=U8RH_data_L;str[2]=U8T_data_H;str[3]=U8T_data_L;str[4]=U8checkdata;SendData(str) ; //发送到串口//读取模块数据周期不易小于2SDelay(20000);}//elihw}// mainvoid RSINTR interrupt 4 using 2{U8 InPut3;if(TI==1) //发送中断{TI=0;if(count!=5) //发送完5位数据{SBUF= outdata[count];count++;}}if(RI==1) //接收中断{InPut3=SBUF;indata[count_r]=InPut3;count_r++;RI=0;if (count_r==5)//接收完4位数据{//数据接收完毕处理。