温湿度传感器 sht11 仿真程序

sbit out =P3^0; //加热口

 //sbit input =P1^1;//检测口

 //sbit speek =P2^0;//报警

 sbit clo =P3^7;//时钟

 sbit ST =P3^5;//开始

 sbit EOC =P3^6;//成功信号

 sbit gwei =P3^4;//个位

 sbit swei =P3^3;//十位

sbit bwei =P3^2;//百位

sbit qwei =P3^1;//千位

sbit speak =P0^0;//报警音

sbit bjled =P0^1;//报警灯

sbit zcled =P0^2;//正常LED

 int count;

 uchar xianzhi;//取转换结果

uchar seth;//高时间

uchar setl;//低时间

uchar seth_mi;//高时间

uchar setl_mi;//低时间

 bit  hlbz;//高低标志

 bit  clbz;

 bit  spbz;

 

 

 

///定时中断程序///

void t0 (void) interrupt 1 using 0

{

    TH0=(65536-200)/256;//5ms*200=1000ms=1s

  TL0=(65536-200)%256;

 clo=!clo;//产生时钟

     if(count>5000)

  {

    if(hlbz)

           {

      if(seth_mi==0){seth_mi=seth;hlbz=0;out=0;}

   else seth_mi--;

      }

    if(!hlbz)

           {

      if(setl_mi==0){setl_mi=setl;hlbz=1;out=1;}

   else setl_mi--;

      }

  count=0;

  }

     else count++;

       

}

/////////////

///////延时///////

delay(int i)

{

   while(--i);    

    

}    

///////显示处理///////

xianshi()

{

   

 int   abcd=0;

    int i;

 

  for (i=0;i<5;i++)

 abcd=xianzhi;

 gwei=1;

 swei=1;

 bwei=1;

 qwei=1;

 P1=dispcode[abcd/1000];

  qwei=0;

 delay(70);

  qwei=1;

 abcd=abcd%1000;

 P1=dispcode[abcd/100];

 bwei=0;

 delay(70);

 bwei=1; 

 abcd=abcd%100;

 P1=dispcode[abcd/10];

 swei=0;

 delay(70);

 swei=1;

 abcd=abcd%10;

 P1=dispcode[abcd];

 gwei=0;

 delay(70);

 gwei=1;

 }

}

  doing()

  {

    if(xianzhi>100)

    {bjled=0;speak=1;zcled=1;}

 else {bjled=1;speak=0;zcled=0;}

  }

 

void main(void)

 {

 seth=60;//h60秒

 setl=90;//l90秒

 seth_mi=60;//h60秒

 setl_mi=90;//l90秒

 TMOD=0X01;//定时0 16位工作模式

  TH0=(65536-200)/256;

  TL0=(65536-200)%256;

 

 TR0=1; //开始计时

 ET0=1;   //开定时0中断

 EA=1;    //开全中断

 while(1)

 {

     ST=0;

   _nop_();

    ST=1;

   _nop_();

    ST=0;

 //   EOC=0;

         xianshi();

   

  while(!EOC)

  {

        xianshi();

   }

       xianzhi=P2;

            xianshi();

    doing();

 }

 }