标题:
基于51单片机的DHT11温湿度传感器程序,1602显示
[打印本页]
作者:
sxz197
时间:
2018-12-15 14:12
标题:
基于51单片机的DHT11温湿度传感器程序,1602显示
DHT11温湿度传感器,用51单片机驱动,并用1602液晶显示屏显示。请大家多多指教!
单片机源程序如下:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit Data=P2^0;
uchar rec_dat[9]="12369566";
extern void InitLcd1602();
extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
void DHT11_delay_us(uchar n)
{
while(--n);
}
void DHT11_delay_ms(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void DHT11_start()
{
Data=1;
DHT11_delay_us(2);
Data=0;
DHT11_delay_ms(20);
Data=1;
DHT11_delay_us(30);
}
uchar DHT11_rec_byte()
{
uchar i,dat=0;
for(i=0;i<8;i++)
{
while(!Data);
DHT11_delay_us(8);
dat<<=1;
if(Data==1)
dat+=1;
while(Data);
}
return dat;
}
void DHT11_receive()
{
uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
DHT11_start();
if(Data==0)
{
while(Data==0); //等待数据
DHT11_delay_us(40); //延时80us
R_H=DHT11_rec_byte(); //湿度高位
R_L=DHT11_rec_byte(); //湿度低位
T_H=DHT11_rec_byte(); //温度高位
T_L=DHT11_rec_byte(); //温度低位
revise=DHT11_rec_byte(); //获取数据
DHT11_delay_us(25); //延时
if((R_H+R_L+T_H+T_L)==revise) //校验
{
RH=R_H;
RL=R_L;
TH=T_H;
TL=T_L;
}
/*数据分解*/
rec_dat[0]='0'+(RH/10);
rec_dat[1]='0'+(RH%10);
rec_dat[2]='R';
rec_dat[3]='H';
rec_dat[4]=' ';
rec_dat[5]=' ';
rec_dat[6]='0'+(TH/10);
rec_dat[7]='0'+(TH%10);
rec_dat[8]='C';
}
}
void main()
{
InitLcd1602(); //1602初始化
while(1)
{
DHT11_delay_ms(1500); //DHT11初始1S延时
DHT11_receive();
LcdShowStr(0,0,rec_dat); //显示温湿度
}
}
复制代码
所有资料51hei提供下载:
51温湿度传感器1602显示.zip
(27.84 KB, 下载次数: 113)
2018-12-15 14:11 上传
点击文件名下载附件
下载积分: 黑币 -5
Sheet2.pdf
(61.89 KB, 下载次数: 54)
2018-12-26 18:43 上传
点击文件名下载附件
原理图
下载积分: 黑币 -5
作者:
admin
时间:
2018-12-15 15:41
补全原理图或者详细说明一下电路连接即可获得100+黑币
作者:
sxz197
时间:
2018-12-26 18:44
admin 发表于 2018-12-15 15:41
补全原理图或者详细说明一下电路连接即可获得100+黑币
原理图已补充
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1