DHT11的使用方法:
0
1
使用步骤
- 初始化
- 读取数据
- 显示数据
初始化:
out=0;
delay20ms();
out=1;
delay40us();
读取数据
Uchar x,shuju;
If(out==0)
{
While(out==0);
While(out==1);
While(out==0);
X=0;
Delay(30us);
If(out==1)
X=1;
Shuju=shuju<<1;
Shuju=shuju|x;
}
完整程序
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]="shidu:"; //把你要显示的东西写成数组
uchar code table1[]="wendu:";
sbit out = P0^0;
sbit shinen=P0^2; //使能
sbit RS=P0^4; //数据命令选择端
sbit RW=P0^3; //读或写的选择
sbit duan=P2^6; //数码管的段
sbit wei=P2^7; //数码管的位
uchar num;
bit flag=0;
void delay30us(void) //误差 0us
{
unsigned char a,b;
for(b=3;b>0;b--)
for(a=3;a>0;a--);
}
void delay20ms(void) //误差 0us
{
unsigned char a,b;
for(b=215;b>0;b--)
for(a=45;a>0;a--);
_nop_(); //if Keil,require use intrins.h
_nop_(); //if Keil,require use intrins.h
}
void delay40us(void) //误差 0us
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=17;a>0;a--);
}
void delay(uint xms) //xms等于几就延迟几毫秒
{
uint i,j;
for(i=xms;i>0;i--)
for(j=112;j>0;j--);
}
void xieminglin(uchar com) //写命令
{
RS=0;
RW=0;
P2=com;
delay(5);
shinen=1;
delay(5);
shinen=0;
}
void xieshuju(uchar date) //写数据
{
RS=1;
RW=0;
P2=date;
delay(5);
shinen=1;
delay(5);
shinen=0;
}
void t11chushihua()
{
out=0;
delay20ms();
out=1;
delay40us();
}
uchar dushuju()
{
uchar num=0;
uchar i;
for(i=0;i<8;i++)
{
while(out==0);
flag=0;
delay30us();
if(out==1)
flag=1;
num=num<<1;
num=num|flag;
while(out==1);
}
return num;
}
void chushihua() //初始化
{
duan=0; //关闭数码管的段和位,避免对LCD1602产生影响
wei=0;
shinen=0;
delay(15);
xieminglin(0x38); //写入0x38设置16X2显示,5X7点阵,8位数据接口
xieminglin(0x01); //显示清0,数据指针清0
xieminglin(0x06); //写一个字符后,地址指针自动加1
xieminglin(0x0c); //设置开显示,不显示光标
}
void lcdshow1(uchar wendu)
{
xieminglin(0x80); //写入命令,第一行
for(num=0;num<6;num++) //写入数据,每一位数据之间有延时
{
xieshuju(table[num]);
delay(5);
}
xieshuju(wendu/10+0x30);
delay(5);
xieshuju(wendu%10+0x30);
delay(5);
}
void lcdshow2(shidu)
{
xieminglin(0x80+0x40); //写入命令,第二行
for(num=0;num<6;num++) //写入数据
{
xieshuju(table1[num]);
delay(5);
}
xieshuju(shidu/10+0x30);
delay(5);
xieshuju(shidu%10+0x30);
delay(5);
}
void main()
{
uchar wendu1=0;
uchar wendu2=0;
uchar shidu1=0;
uchar shidu2=0;
uchar jiaoyan=0;
uchar ture=0;
chushihua();
while(1)
{
t11chushihua();
if(out==0)
{
while(out==0);
while(out==1);
wendu1=dushuju();
wendu2=dushuju();
shidu1=dushuju();
shidu2=dushuju();
jiaoyan=dushuju();
ture=wendu1+wendu2+shidu1+shidu2;
if(jiaoyan==ture)
{
lcdshow1(wendu1);
lcdshow2(shidu1);
}
}
}
}