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

📄 valve control figures programme.c

📁 阀门控制器程序
💻 C
📖 第 1 页 / 共 2 页
字号:
}

void inp3(void)               //波特率设定程序2
{
    kcc1=P3;
    kcc1=kcc1>>2;
    kcc1=kcc1&0x03;
    if (kcc1==0) {bote=0xe8; goto in2;}    //1200
    if (kcc1==1) {bote=0xf4; goto in2;}    //2400
    if (kcc1==2) {bote=0xfa; goto in2;}    //4800
    if (kcc1==3) {bote=0xfd; goto in2;}    //9600
in2:delay2();
}
void delay2(void)               /* 延时程序  */
{
    uchar ii;
    for (ii=0;ii<=3;ii++){
    timedelay(1000);
    }
}
void delay3(void)               /* 延时程序  */
{
    uchar ii;
    for (ii=0;ii<=10;ii++){    
    weidog=0;
    weidog=1;
    delay1(1000);
    }
}
void delay4(void)              /* 包含查寻开关量的延时程序  */
{
    uchar ii;
    for (ii=0;ii<=8;ii++){
    weidog=0;
    weidog=1;
    inp2();
    kcc1=kcc1&0x70;
    if (kcc1==0x30) {error1=0;fan=1; zhan=1;delay1(10);} else  error1=1;
    if (kcc1==0x60) {opentop1=0; zhan=1; delay1(10);} else  opentop1=1;
    if (kcc1==0x50) {closetop1=0; fan=1; delay1(10);} else  closetop1=1;
    delay1(1000);
    }
}
void timedelay(uint timess)        /* 延时程序  */
{
 uint tj;
 for (tj=timess;tj>0;tj--){;}
}
void delay1(uint x)                 /* 延时程序  */
{
 uchar tw;
 while (x-->0){
 for (tw=0;tw<125;tw++){;}
 }
}

void pick()                         /* 采样程序  */
{
  uchar temp11,temp22,temp111,temp222;
  uint pick0[2];
  chai=a_func(0x03);                /* 采样第1路 */
  temp1=chai;
  chai=a_func(0x07);                /* 采样第2路 */
  temp2=chai;
  timedelay(200);
  chai=a_func(0x03);
  temp11=chai;
  chai=a_func(0x07);
  temp22=chai;
  timedelay(200);
  chai=a_func(0x03);
  temp111=chai;
  chai=a_func(0x07);
  temp222=chai;
  timedelay(200);
  pick0[0]=(int)temp1+(int)temp11+(int)temp111; /* 三次采样求和 */
  pick0[1]=(int)temp2+(int)temp22+(int)temp222;
  ad1=(pick0[0]/3.0/255.0)*100.0;               /* 求平均值,标度变换 */
  ad2=(pick0[1]/3.0/255.0)*100.0;
  if (ad1>100.0)  ad1=100.0;
  if (ad2>100.0)  ad2=100.0;
  if (ad1<0.0)  ad1=0.0;
  if (ad2<0.0)  ad2=0.0;
  ad11=(uchar)ad1;
  ad22=(uchar)ad2;
}

void main()                //主程序
{
      SP=0xcf;
      timedelay(10000);
      delay1(1000);
      flag=0;
      EA=0;
      aaa=0xff;
      bbb=0xff;
      DBYTE[0x50]=0x0;
      DBYTE[0x51]=0x0;
      DBYTE[0x52]=0x0;
      DBYTE[0x53]=0x0;
      DBYTE[0x54]=0x0;
      DBYTE[0x55]=0x0;
      DBYTE[0x56]=0x0;
      DBYTE[0x57]=0x0;
      DBYTE[0x58]=0x0;
begin:;
      inp0();
      kcc1=kcc1&0x1f;
      addr=kcc1;
      PCON=0;         //smod=0
#ifdef PRIVILEGE      //条件编译
      inp4();
#else
      inp3();
#endif
      TMOD=0x20;     //用T1作波特率发生器
      TL1=bote;      
      TH1=bote;      //11.0592mhz,smod=0;9600==0xfd
      TR1=1;         
      SCON=0x70;
      ES=1;
      ctr1 = 1;       //准备接收
      EA=1;
loop: if (p17==0) {goto control;}
      if (p27==0) {goto far2;}
      weidog=0;
      weidog=1;
      inp2();
      kcc1=kcc1&0x0f8;
      pick();
      DBYTE[0x50]=DBYTE[0xa8];
      DBYTE[0x51]=DBYTE[0xa7];
      DBYTE[0x52]=DBYTE[0xa6];
      DBYTE[0x53]=DBYTE[0xa5];
      DBYTE[0x54]=DBYTE[0xac];
      DBYTE[0x55]=DBYTE[0xab];
      DBYTE[0x56]=DBYTE[0xaa];
      DBYTE[0x57]=DBYTE[0xa9];
      DBYTE[0x58]=0x55;
      kcc1=kcc1&0x08; 
      if (kcc1==0) {goto far0;}
near: weidog=0;                      //就地方式
      weidog=1;
      inp2();
      kcc0=kcc1;
      kcc1=kcc1&0x70;
      if (kcc1==0x30) {error1=0; fan=1; zhan=1;delay1(100);} else  error1=1; //011 - 故障
      if (kcc1==0x60) {opentop1=0; zhan=1; delay1(100);} else  opentop1=1;   //110 - 开足
      if (kcc1==0x50) {closetop1=0; fan=1; delay1(100);} else  closetop1=1;  //101 - 关足
      kcc1=kcc0;
      kcc1=kcc1&0x07;
      if (kcc1==5) {goto stop1;}
      if (kcc1==6) {goto open1;}
      if (kcc1==3) {goto close9;}
      goto near;
close9:if (closetop==0) {goto stop1;}
      zhan=1;
      fan=0;
      delay1(200);
      goto  loop;
stop1:fan=1;
      zhan=1;
      delay1(300);
      goto  loop;
open1: if (opentop==0) {goto stop1;}
      fan=1;
      zhan=0;
      delay1(200);
      goto  loop;
far0: weidog=0;                       // 远程方式1
      weidog=1;
      inp2();
      kcc0=kcc1&0x78;
      kcc1=kcc1&0x70;
      if (kcc1==0x30) {error1=0;fan=1; zhan=1;delay1(100);} else  error1=1;
      if (kcc1==0x60) {opentop1=0; zhan=1; delay1(100);} else  opentop1=1;
      if (kcc1==0x50) {closetop1=0; fan=1; delay1(100);} else  closetop1=1;
      if (aaa==0x00&&bbb==0xff) {goto open2;}     //正转
      if (aaa==0xff&&bbb==0x00) {goto close2;}    //反转
      goto stop2;
close2:if (closetop==0) {goto stop2;}                //反转
      if (error==0) {goto stop2;}
      zhan=1;
      fan=0;
      delay1(200);
      goto  loop;
stop2:fan=1;
      zhan=1;
      delay1(300);
      goto  loop;
open2:if (opentop==0) {goto stop2;}                   //正转
      if (error==0) {goto stop2;}
      fan=1;
      zhan=0;
      delay1(200);
      goto  loop;
far2: weidog=0;                   // 远程方式2
      weidog=1;
      inp2();
      kcc0=kcc1;
      kcc1=kcc1&0x70;
      if (kcc1==0x30) {error1=0; fan=1; zhan=1;delay1(100);} else  error1=1; //011 - 故障
      if (kcc1==0x60) {opentop1=0; zhan=1; delay1(100);} else  opentop1=1;   //110 - 开足
      if (kcc1==0x50) {closetop1=0; fan=1; delay1(100);} else  closetop1=1;  //101 - 关足
      inp0();
      kcc1=kcc1&0xe0; //11100000
      if (kcc1==0x60) {goto open3;  }   //0110 - 远开
      if (kcc1==0xc0) {goto stop7;  }   //1100 - 远停
      if (kcc1==0xa0) {goto close8; }   //1010 - 远关
      goto far2;
close8:if (closetop==0) {goto stop7;}
      zhan=1;
      fan=0;
      delay1(200);
      goto  loop;
stop7:fan=1;
      zhan=1;
      delay1(300);
      goto  loop;
open3:if (opentop==0) {goto stop7;}
      fan=1;
      zhan=0;
      delay1(200);
      goto  loop;
control:/*自控方式-根据设定电位器所设定的阀门大小,与现在阀门实际开度
	          作比较:如设定值大于实际值,则把阀门调大;如设定值小于实际值,
	          则把阀门调小;如设定值接近实际值,则不动.总之,通过调节,阀
	          门将停到所需的位置。)*/
      while(1);      
      {	
	    weidog=0;     
      weidog=1;
      inp2();
      kcc1=kcc1&0x70;
      if (kcc1==0x30) {error1=0;fan=1; zhan=1;delay1(100);} else  error1=1;
      if (kcc1==0x60) {opentop1=0; zhan=1; delay1(10);} else  opentop1=1;
      if (kcc1==0x50) {closetop1=0;fan=1; delay1(10);} else  closetop1=1;
      pick();
      if (ad1-ad2>10.0) {
          if (opentop==0)  {
                            opentop1=0;goto stop3;
                           }
                    else   {
                           opentop1=1;fan=1; zhan=0;delay4(); goto control;
                           }
                        }
      if (ad2-ad1>10.0) {
           if (closetop==0) {
                             closetop1=0;goto stop3;
                            }
                     else   {
                             closetop1=1;zhan=1; fan=0;delay4(); goto control;
                            }
                         }
  stop3:fan=1;
      zhan=1;
      delay3();
     }
}


⌨️ 快捷键说明

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