基于51单片机的DHT11湿度1602显示c程序.doc
《基于51单片机的DHT11湿度1602显示c程序.doc》由会员分享,可在线阅读,更多相关《基于51单片机的DHT11湿度1602显示c程序.doc(4页珍藏版)》请在冰豆网上搜索。
![基于51单片机的DHT11湿度1602显示c程序.doc](https://file1.bdocx.com/fileroot1/2022-11/2/9af8cd9a-9cea-4b08-a1ee-7fc5c36e31d0/9af8cd9a-9cea-4b08-a1ee-7fc5c36e31d01.gif)
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitlcden=P2^7;
sbitlcdrw=P2^5;
sbitlcdrs=P2^6;
sbitDHT11_IO=P3^7;
uintx,y,t;
ucharcodetable[]="0123456789";
voidDelay1()//延时10us
{
uchari;
i--;
i--;
i--;
i--;
i--;
i--;
}
voidDelay2(ucharms)
{//延时子程序
uchari;
while(ms--)
{
for(i=0;i<250;i++);
}
}
voidmDelay(uchardelay)
{
uchari;
for(;delay>0;delay--)
{
for(i=123;i>0;i--);
}
}
voiddelay(uintz)
{
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidwrite_com(ucharcom)
{
lcdrs=0;
lcdrw=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidinit()
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
voidwrite_data(uchardat)
{
lcdrs=1;
lcdrw=0;
P0=dat;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidstart(void)//开始信号
{
DHT11_IO=1;
Delay1();
DHT11_IO=0;
Delay2(20);//>18ms
DHT11_IO=1;
Delay1();//20-40us
Delay1();
Delay1();
Delay1();
Delay1();
}
ucharreceive_byte(void)//接收一个字节
{
uchari,temp,count,data_byte;
for(i=0;i<8;i++)
{
while(!
DHT11_IO);//等待50us低电平结束
temp=0;
Delay1();Delay1();Delay1();Delay1();
if(DHT11_IO==1)temp=1;
while(DHT11_IO);
data_byte<<=1;
data_byte|=temp;
}
returndata_byte;
}
voidreceive()//接收数据
{
ucharcheck,num_check,HZ,HX,WZ,WX;
start();//开始信号
DHT11_IO=1;
if(!
DHT11_IO)//读取DHT11响应信号
{
while(!
DHT11_IO);//DHT11高电平80us是否结束
while(DHT11_IO);
HZ=receive_byte();
HX=receive_byte();
WZ=receive_byte();
WX=receive_byte();
check=receive_byte();
DHT11_IO=0;//拉低延时50us
DHT11_IO=1;
num_check=HZ+HX+WZ+WX;
if(num_check=check)
{
check=num_check;
}
}
write_com(0x80);
write_data(table[HZ/10]);
write_data(table[HZ%10]);
write_data('.');
write_data(table[HX/10]);
write_data(table[HX%10]);
write_data('R');
write_data('H');
write_data('%');
// write_com(0x80+0x40);
// write_data(table[WZ/10]);
// write_data(table[WZ%10]);
// write_data('.');
// write_data(table[WX/10]);
// write_data(table[WX%10]);
//write_data('T');
}
voidmain()
{
init();
while
(1)
{
receive();
}
}