⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 theprogramofsupervisesandcontrol.c

📁 本源码实现了在下位机上对室内温湿度的监控
💻 C
📖 第 1 页 / 共 2 页
字号:
    for(m=error_num;m<=9;m++)
      da[m+10]=da[m];
    da[13]+=0x80;
    da[17]=error_co;
  }
 int process(int re_data,uint number)
 {
    int temp_rt;
    uint a,case_num,error_code;
    switch(number)
      {
         case 0: {
                    da[11]=0x3A;
                   if(re_data!=0x3A)
                    {
                      error_code=3;
                      case_num=0;
                      error(error_code,case_num);
                    }
                 }break;

         case 1: {
                    da[12]=0x02;
                   if(re_data!=0x02)
                    {
                      error_code=0x02;
                      case_num=0x02;
                      error(error_code,case_num);
                    }
                 }break;

         case 2: { da[13]=re_data;
                   if(re_data==0x14)
                      {
                        w_r=0;
                        da[13]=0x14;
                      }
                   else if(re_data==0x15)
                      {
                        w_r=1;
                        da[13]=0x15;
                      }
                   else
                      { error_code=0x01;
                        case_num=0x04;
                        error(error_code,case_num);
                      }
                  } break;
          case 3: { if(w_r==0)
                     da[14]=state=re_data;
                    else if(w_r==1)
                      {
                        state=re_data;
                        re_data&=0x80;
                        da[14]=state_RT+re_data;
                        state_RT=0;
                      }
                   } break;

          case 4: {
                    da[15]=da[4];
                    if(w_r==0)
                       { if(state&0x10)
                          {
                             temp_high=re_data;
                          }
                         else if(state&0x08)
                          {
                             temp_low=re_data;
                          }
                       }
                    else if(w_r==1)
                        { temp_rt=value_temp;
                          da[15]=temp_rt;

                        }
                   }break;
           case 5: { da[16]=re_data;
                     if(w_r==0)
                     { if(state&0x04)
                        {
                          humd_high=re_data;

                        }
                     }
                     else if(w_r==1)
                       da[16]=value_humi;
                   }break;
           case 6: {
                     da[17]=re_data;
                     if(w_r==0)
                       {
                        if(state&0x01)
                          {
                            vol_low=re_data;
                          }
                       }
                     else if(w_r==1)
                       da[17]=vol_RT;
                    }break;

           case 7: {
                     da[7]&=0x0F;
                     da[18]=da[7];
                    }break;
           case 8: {
                       da[19]=0;
                       for(a=7;a>=1;a--)
                        {
                          R_LRC^=da[a];

                          da[19]^=da[a+11];
                        }
                      if(w_r==0)
                        { if(R_LRC!=re_data)
                           {
                             error_code=0x03;
                             case_num=0x0B;
                             error(error_code,case_num);
                           }
                        }
                     }break;
           case 9: {
                        da[20]=0x0D;
                        if(re_data!=0x0D)
                          {
                            error_code=0x04;
                            case_num=0x0C;
                            error(error_code,case_num);
                          }
                    }break;
           case 10: {
                       da[21]=0x0A;
                       if(re_data!=0x0A)
                         {
                           error_code=0x04;
                           case_num=0x0D;
                           error(error_code,case_num);
                         }
                    }break;
           default: break;
       }
 }

void initial(void)
{
 DataInput(0x09,0xff); 	   //7219初始化
 DataInput(0x0C,0x01);
 DataInput(0x0b,0x03);
 DataInput(0x0a,0x0f);
 DataInput(0x0f,0x00);
 set8155=0x03;		      //8155初始化
 pa8155=0xff;             //初始化使得光藕不导通
 pb8155=0xff;             //初始化使得指示灯不亮
  IE=0x90;	 //定时器初始化,开窜行口中断,关闭定时器1中断定时器1作为串口波特率2400发生器,开定时器0中断和外部中断
 PCON=0x00;               //波特率加倍
 SCON=0x50;          //窜行口工作方式1(十位异步收发),同意接受,TI=0,RI=0;
 TCON=0x40;          //外部中断0电平触发,中断标志清0,定时器运行标志关,无定时器溢出标志
 TMOD=0x20;	         //定时器1工作于方式2,8位自动,做波特率发生器,定时器2 工作于方式1

 TH1=0xFD;
 TL1=0xFD;
 IP=0x00;
   r_in=0;
    r_out=22;
    t_in=22;
    t_out=0;
    buf_empty=1;
    buf_full=0;
    done=0;
    humd_high=50;
    temp_high=30;
    temp_low=10;
    vol_low=130;
    

}

void main()
{
 uint h,l,p;

  value humi_val,temp_val;
  uchar error,checksum;

   initial();
  s_connectionreset();


  while(1)
  { error=0;
    error+=s_measure((unsigned char*) &humi_val.i,&checksum,HUMI);  //measure humidity
    error+=s_measure((unsigned char*) &temp_val.i,&checksum,TEMP);  //measure temperature
    if(error!=0) s_connectionreset();                 //in case of an error: connection reset
    else
    { humi_val.f=(float)humi_val.i;                   //converts integer to float
      temp_val.f=(float)temp_val.i;                   //converts integer to float
      calc_sth11(&humi_val.f,&temp_val.f);            //calculate humidity, temperature
      value_humi=(uint)humi_val.f;
      value_temp=(uint)temp_val.f;
      real[0]=value_temp/10;
      real[2]=value_temp%10;
      real[1]=value_humi/10;
      real[3]=value_humi%10;
      DataInput(0x04,real[0]);
      DataInput(0x03,real[2]);
      DataInput(0x02,real[1]);
      DataInput(0x01,real[3]);
    }
          while(done)
          {
            r_in=0;
            r_out=22;
            t_in=22;
            t_out=0;
            buf_full=0;
            buf_empty=1;
            done=0;
            state=0;
            PCON=0x00;
            SCON=0x50;
            TCON=0x40;
            TMOD=0x20;
            IE=0x90;
            TH1=0xFD;
            TL1=0xFD;
            IP=0x00;
            R_LRC=0;
            for(h=0;h<=21;h++)
               da[h]=0;
          }

       P1_4=0;

       while(r_in!=r_out)
           {}

         for(l=0;l<=21;l++)
          {
            if(da[l]>47&&da[l]<58)
               da[l]-=48;
            else if(da[l]>64&&da[l]<71)
               da[l]-=55;
          }
          for(l=0;l<=10;l++)
          {
            p=2*l;
            da[l]=da[p]*16+da[p+1];
          }


          for(r_in=0;r_in<=21;r_in++)
            {
              process(da[r_in],r_in);
              if(da[18]!=0)
              break;
            }

             	 AlarmDetect();

      TmpCompare();        //进入电炉处理程序
      HumCompare();        //进入湿机处理程序
      VoltCompare();

          for(l=0;l<=10;l++)
            {
              p=da[l+11];
              p>>=4;
              da[2*l]=p;
              da[2*l+1]=da[l+11]&0x0F;
            }
           for(l=0;l<=21;l++)
            {
            if(da[l]>=0&&da[l]<=9)
               da[l]+=48;
            else if(da[l]>9&&da[l]<16)
               da[l]+=55;
            }
            IE=0x90;
            P1_4=1;
          for(t_out=0;t_out<=21;t_out++)
            {
               TI=0;
               SBUF=da[t_out];
               while(TI!=1);
               if(t_out==21)
                {
                  buf_full=0;
                  buf_empty=1;
                  IE=0;
                }
            }

            done=1;

   }
}
 serial()interrupt 4 using 1
 {
   if(RI&~buf_full)
     {
       da[r_in]=SBUF;
       RI=0;
       if(r_in==21)
         {
           buf_full=1;
           buf_empty=0;
         }
       r_in++;
      }

 }


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -