📄 valve control figures programme.c
字号:
}
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 + -