專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

51單片機(jī)驅(qū)動(dòng)數(shù)字溫濕度DHT11 lcd1602顯示

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年04月10日   【字體:

//   濕度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};
      
//**************************延時(shí)函數(shù)
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響應(yīng)80us
 for(num=0;num<24;num++);    //DTH拉高80us
 return flag;
}
//****************************讀DTH11數(shù)據(jù)
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;
 }
}
//***********************************顯示函數(shù)
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] );     //顯示溫度
}
//*******************************主函數(shù)
main()
{
 tem=0;
 hum=0;
 delay_ms(1000);    //DTH11開(kāi)始1s有錯(cuò)誤輸出
 InitLCM();
 while(1)
 {
  DTH11_DUSHU();
  Display_DTH11();
  delay_ms(2000);
 }
}

用到的LCD1602display.h頭文件這里有:http://www.torrancerestoration.com/mcu/3292.html

關(guān)閉窗口