(单片机)显示温湿度程序

* 【实验平台】: QX-MINI51 单片机开发版

* 【外部晶振】: 11.0592mhz

* 【主控芯片】: STC89C52

* 【显示器    】: 1602

* 【传感器    】: DHT11

* 【编译环境】: Keil μVisio3

* 【程序功能】: DHT11  第三脚悬空    DHT11孔面面向开发板外                    

* 【使用说明】: 

*  说明:免费开源,不提供源代码分析.

**********************************************************************************/

//   湿度20-90   温度0-50  采样间隔1S 
#include 
#include "lcd.h"
sbit DQ=P3^7;    //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;
 
 LcdShowStr(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;
 LcdShowStr(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有错误输出
 InitLcd1602();
 while(1)
 {
  DTH11_DUSHU();
  Display_DTH11();
  delay_ms(2000);
 }
}





你可能感兴趣的:(单片机,单片机)