温湿度集成传感器DHT11部分程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

void delayNOP()
{
_nop_();
_nop_();
_nop_();
_nop_();
}
// 毫秒级延时子程序
/*********************************************************************************/ void delay_ms(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i<250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/*********************************************************************************/ //5us级延时程序
/*********************************************************************************/ void delay_us()
{
unint8 i;
i--;
i--;
i--;
i--;
i--;
i--;
}
/****************************************************************************/
//收发信号检测,数据读取
/****************************************************************************/ char receive()
{
unint8 i;
ST=0;
com_data=0;
for(i=0;i<=7;i++)
{
respond=2;
while((!TRH)&&respond++);
delay_us();
delay_us();
delay_us();
if(TRH)
{
temp=1;
respond=2;
while((TRH)&&respond++);
}
else
temp=0;
com_data<<=1;
com_data|=temp;
}
return(com_data);
}
/****************************************************************************/ //湿度读取子程序
//温度高8位== TL_data
//温度低8位== TH_data
//湿度高8位== RH_data
//湿度低8位== RH_data
//校验8位== CK_data
//调用的程序有delay();, Delay_5us();,RECEIVE();
/***************************************************************************/ void read_TRH()
{
int m;
//主机拉低18ms
TRH=0;
delay_ms(18);
TRH=1;
//DA TA总线由上拉电阻拉高主机延时20us
delay_us();
delay_us();
delay_us();
delay_us();
//主机设为输入判断从机响应信号
TRH=1;
//判断DHT11是否有低电平响应信号如不响应则跳出,响应则向下运行if(!TRH)
{
respond=2;
//判断DHT11发出80us 的低电平响应信号是否结束
while((!TRH)&& respond++);
respond=2;
//判断从机是否发出80us 的高电平,如发出则进入数据接收状态
while(TRH && respond++);
//数据接收状态
RH_temp = receive();
RL_temp = receive();
TH_temp = receive();
TL_temp = receive();
CK_temp = receive();
TRH=1;ST=1;
//数据校验
untemp=(RH_temp+RL_temp+TH_temp+TL_temp);
if(untemp==CK_temp)
{
RH_data = RH_temp;
RL_data = RL_temp;
TH_data = TH_temp;
TL_data = TL_temp;
CK_data = CK_temp;
}
}
//湿度整数部分
str1[0] = (char)(0X30+RH_data/10);
str1[1] = (char)(0X30+RH_data%10);
//温度整数部分
str2[0] = (char)(0X30+TH_data/10);
str2[1] = (char)(0X30+TH_data%10);
m=(int)(RH_data);
if(m>=35)//可改变相应数值,以此控制其他设备
{
XS=0;
//Beep =1; //可适当加一个延迟
}
else
{
XS=1;
//Beep =0;
}
}
void welcome()
{
unsigned char i;
lcd_dis_pos(1,0);
for(i=0;i<16;i++) //显示字符
lcd_wdata(wel1[i]);
lcd_dis_pos(2,0);
for(i=0;i<16;i++) //显示字符
lcd_wdata(wel2[i]);
lcd_dis_pos(3,0);
for(i=0;i<16;i++) //显示字符
lcd_wdata(wel3[i]);
lcd_dis_pos(4,0);
for(i=0;i<16;i++) //显示字符
lcd_wdata(wel4[i]);
}
/****************************************************************************/ //主函数
//TH,TL,RH,RL分别代表温湿度的整数和小数部分
/****************************************************************************/ void main()
{
unsigned char i;
lcd_init();
delay_us();
welcome();
for(i=0;i<=10;i++)
{
delay_ms(10000);
delay_ms(10000);
delay_ms(10000);
delay_ms(10000);
delay_ms(10000);
}
while(1)
{
read_TRH();
//写字符
lcd_dis_pos(1,0);
for(i=0;i<16;i++) //显示字符
lcd_wdata(dis1[i]);
lcd_dis_pos(2,0);
for(i=0;i<16;i++) //显示字符
lcd_wdata(dis2[i]);
lcd_dis_pos(3,0);
for(i=0;i<16;i++) //显示字符
lcd_wdata(dis3[i]);
lcd_dis_pos(4,0);
for(i=0;i<16;i++) //显示字符
lcd_wdata(dis4[i]);
//写湿度数据
for(i=0;i<2;i++)
{
lcd_pos(2,i+3);
lcd_wdata(str1[i]);
}
for(i=0;i<2;i++)
{
lcd_pos(3,i+3);
lcd_wdata(str2[i]);
}
//延时
delay_ms(1000) ;
//clr_screen(); //清屏}
}。

相关文档
最新文档