分享

51单片机驱动数字温湿度DHT11 lcd1602显示

 快乐读书法 2015-11-16
//   湿度20-90   温度0-50  采样间隔1S
#include <reg52.h>
#include <intrins.h>
#include "LCD1602display.h"
sbit DQ=P2^3;    //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;
 
 DisplayListChar(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;
 DisplayListChar(0,  1, table1);
 DisplayOneChar (8,  1, ASCII[ display1[1] ] );
 DisplayOneChar (9,  1, ASCII[ display1[0] ] );
 DisplayOneChar (10, 1, 0xdf );
 DisplayOneChar (11, 1, ASCII[11] );     //显示温度
}
//*******************************主函数
main()
{
 tem=0;
 hum=0;
 delay_ms(1000);    //DTH11开始1s有错误输出
 InitLCM();
 while(1)
 {
  DTH11_DUSHU();
  Display_DTH11();
  delay_ms(2000);
 }
}

用到的LCD1602display.h头文件这里有:http://www./mcu/3292.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约