DHT11的使用和解释,附件里面还附带视频教程
DHT11+单片机与lcd1602液晶屏链接的io:
DHT11单片机源程序如下:
- /*********************************************************************************
- * 【编写时间】: 3月5日
- * 【作 者】: 清翔电子:03
- * 【版 本】: 2.0
- * 【实验平台】: QX-MINI51 单片机开发板
- * 【外部晶振】: 11.0592mhz
- * 【主控芯片】: STC89C52
- * 【编译环境】: Keil μVisio3
- * 【程序功能】: DHT11 第三脚悬空 DHT11孔面面向开发板外
- * 【使用说明】:
- * 说明:免费开源,不提供源代码分析.
- **********************************************************************************/
- // 湿度20-90 温度0-50 采样间隔1S
- #include <intrins.h>
- #include "lcd.h"
- sbit DQ=P3^7; //DTH11
- uchar code ASCII[]="0123456789%c";
- uchar code table0[]=" Hum:00";
- uchar code table1[]=" Tem:00";
- uchar tem;
- uchar hum;
-
- display0[2]={0,0};
- display1[2]={0,0};
-
- //**************************延时函数
- void delay_ms(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=114;y>0;y--);
- }
- //**************************初始化DTH11
- bit Init_DTH11()
- {
- bit flag;
- uchar num;
- DQ=0;
- delay_ms(19); // >18ms
- DQ=1;
- for(num=0;num<10;num++); // 20-40us 34.7us
- for(num=0;num<12;num++);
- flag=DQ;
- for(num=0;num<11;num++); //DTH响应80us
- for(num=0;num<24;num++); //DTH拉高80us
- return flag;
- }
- //****************************读DTH11数据
- uchar DTH11_RD_CHAR()
- {
- uchar byte=0;
- uchar num;
- uchar num1;
- while(DQ==1);
- for(num1=0;num1<8;num1++)
- {
- while(DQ==0);
- byte<<=1; //高位在前
- for(num=0;DQ==1;num++);
- if(num<10)
- byte|=0x00;
- else
- byte|=0x01;
- }
- return byte;
- }
- //******************************读取DTH11温度和湿度
- void DTH11_DUSHU()
- {
- uchar num;
- if(Init_DTH11()==0)
- {
- hum=DTH11_RD_CHAR(); //比正常值高7度左右
- DTH11_RD_CHAR();
- tem=DTH11_RD_CHAR();
- DTH11_RD_CHAR();
- DTH11_RD_CHAR();
- for(num=0;num<17;num++); //最后BIT输出后拉低总线50us
- DQ=1;
- }
- }
- //***********************************显示函数
- void Display_DTH11()
- {
- display0[1]=hum/10%10;
- display0[0]=hum%10;
-
- LcdShowStr(0, 0, table0);
- DisplayOneChar (8, 0, ASCII[ display0[1] ] );
- DisplayOneChar (9, 0, ASCII[ display0[0] ] );
- DisplayOneChar (10, 0, ASCII[10] ); //显示湿度
- display1[1]=tem/10%10;
- display1[0]=tem%10;
- LcdShowStr(0, 1, table1);
- DisplayOneChar (8, 1, ASCII[ display1[1] ] );
- DisplayOneChar (9, 1, ASCII[ display1[0] ] );
- DisplayOneChar (10, 1, 0xdf );
- DisplayOneChar (11, 1, ASCII[11] ); //显示温度
- }
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
DHT11_MINI51.rar
(11.66 MB, 下载次数: 576)
|