📄 wenkongyi.c
字号:
outled(3);led3=0;delay(100);led3=1;
outled(4);led4=0;delay(100);led4=1;
outled(5);led5=0;delay(100);led5=1;
//outled(6);led6=0;delay(100);led6=1;
if(doublekey==2){keycode=0;}
if(csset1==0&&csset0==0&&doublekey==2){doujs++;if(doujs>2000)doujs=2000;}
if(keyout==0){
if(doujs>=2000&&csset1==0&&csset0==0){csset2=1;keycode=0;}
switch(keycode){
case 21:if(csset2==1){csset2=0;savedata();break;}//参数设定按键所有要进行的操作和标志位
if(chang==40){
chang=0;csset1=!csset1;csset0=0;//csset1是决定主菜单和调参数菜单切换的标志位
if(csset1==1){index=1;}//chang==40,csset1==1
else {savedata();}
break;
}
chang=0;
if(csset1==0){
csset0=!csset0;//切换主菜单和SP菜单
if(csset0==0){savedata();}//csset1==0,csset0==0
}
else{index++;if(index>7)index=1;}//csset1==0,csset0==1//
break;
case 20:if(zhengding==400){zhengding=501;shang=1;break;}//加值键
zhengding=0;
if(csset2==1){xtcs[8]++;if(xtcs[8]>200)xtcs[8]=200;break;}//xtcs[8]----温度修正
if(csset0==1&&xtcs[7]!=2){xtcs[0]++;if(xtcs[0]>400)xtcs[0]=400;break;}//lc!=2,才可以调节给定参数,xtcs[0],sp
if(csset1==1){
if(index!=7&&xtcs[7]==0)xtcs[index]++;//lc==0,现场参数修改
if(index==7)xtcs[index]++;
switch(index){
case 1:if(xtcs[index]>1000)xtcs[index]=1000;break;
case 2:if(xtcs[index]>200)xtcs[index]=200;break;
case 3:if(xtcs[index]>100)xtcs[index]=100;break;
case 4:if(xtcs[index]>400)xtcs[index]=400;break;
case 5:if(xtcs[index]>100)xtcs[index]=100;break;
case 6:if(xtcs[index]>999)xtcs[index]=999;break;
case 7:if(xtcs[index]>2)xtcs[index]=2;break;
}
}
break;
case 22:if(csset2==1){if(xtcs[8]!=0)xtcs[8]--;break;}//减值键
if(csset0==1&&xtcs[7]!=2){if(xtcs[0]!=0)xtcs[0]--;break;}//csset0==1时,xtcs[7]!=2时,修改输出设定值
if(csset1==1){ //csset1==1时修改现场PID调节参数
if(index!=7&&xtcs[7]==0){if(xtcs[index]!=0)xtcs[index]--;if(xtcs[1]<1)xtcs[1]=1;if(xtcs[5]<1)xtcs[5]=1;}
if(index==7){if(xtcs[index]!=0)xtcs[index]--;}
}
break;
}
keycode=0;keyinjs=0;keyjs=0;changjj1=0;doujs=0;//zhengding=0;
}
else{///////////////////////////////////////////////////// Keyout=1
keyinjs++;
if(keyjs>15){//////////////////////////////////////////15个keyinjs=8
switch(keycode){
case 21:if(csset2==1){break;}
keyjs=10;chang++;if(chang>40)chang=40;break;
case 20:if(csset0==0&&csset1==0&&csset2==0&&doublekey==1){zhengding++;if(zhengding>400)zhengding=400;}
changjj1++;if(changjj1<20)keyjs=9;else{changjj1=20;keyjs=14;}/////////加速加原理 Keyinjs++ 从设定值到15的时间间隔为加一个数值
if(csset0==1&&xtcs[7]!=2){xtcs[0]++;if(xtcs[0]>400)xtcs[0]=400;break;}
if(csset1==1){
if(index!=7&&xtcs[7]==0)xtcs[index]++;
if(index==7)xtcs[index]++;
switch(index){
case 1:if(xtcs[index]>1000)xtcs[index]=1000;break;
case 2:if(xtcs[index]>200)xtcs[index]=200;break;
case 3:if(xtcs[index]>100)xtcs[index]=100;break;
case 4:if(xtcs[index]>400)xtcs[index]=400;break;
case 5:if(xtcs[index]>100)xtcs[index]=100;break;
case 6:if(xtcs[index]>999)xtcs[index]=999;break;
case 7:if(xtcs[index]>2)xtcs[index]=2;break;
}
}
break;
case 22:changjj1++;if(changjj1<20)keyjs=9;else{changjj1=20;keyjs=14;}//加速减速原理 Keyinjs++ 从设定值到15的时间间隔为减一个数值
if(csset0==1&&xtcs[7]!=2){if(xtcs[0]!=0)xtcs[0]--;break;}
if(csset1==1){
if(index!=7&&xtcs[7]==0){if(xtcs[index]!=0)xtcs[index]--;if(xtcs[1]<1)xtcs[1]=1;if(xtcs[5]<1)xtcs[5]=1;}
if(index==7){if(xtcs[index]!=0)xtcs[index]--;}
}
break;
}
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////
bit pid=0;
uint t0js=0;
uint cr=0;///相对比例系数
void intt0() interrupt 1 using 1//定时器、计数器0,第一组寄存器R0~R7
{
TH0=0x3c;
TL0=0xb0;//50ms
t0js++;
if(t0js>cr){kekong=1;zhong=0;}//
if(t0js>=(xtcs[5]*20)){TR0=0;pid=0;t0js=0;}//关中断及PID调节 滞后时间的20倍之后停止调节
}
void intt1() interrupt 3 using 1//定时器、计数器1
{TH1=0x00;TL1=0x00;}
//////////////////////////
main()
{
uchar err=0;
uchar cyjs=0;
uint wendu=0;
ulong tempwen=0,jscr=0,thjs;
uint i,thtime,talarm,shan=0;
kekong=1;//~INRO 不加热
P1M0=0x20;P1M1=0xa7;//00110000 10100111 P1.7 01 强推挽输出模式 P1.6 00准双向口 P1.5 11开漏 P1.4 10仅为输入 P1.3准双向口 P1.2强推挽输出模式 P1.1强推挽输出模式 P1.0强推挽输出模式
P2M0=0x00;P2M1=0x38;//00000000 00111000
P3M0=0x00;P3M1=0x20;//00000000 00100000
adcpoweron();//开A/D转换电源
getdata();//读取初始值,即上一次设定值
IE=0x00;
TMOD=0x11;//16位定时器
TH0=0x3c;TL0=0xb0;//50ms
TH1=0x00;TL1=0x00;//65ms
ET0=1;//允许定时器0中断
ET1=1;//允许定时器1中断
TR1=1;//启动定时器1运行
EA=1;//全部中断允许
cyjs=0;t0js=0;
wdtcontr=0x3d;//0011 1101 允许看门狗 空闲模式计数 1.25S
///////////////////////////////////////////////////
disbuf[0]= 1;disbuf[1]=25;disbuf[2]=14;
disbuf[3]=10;disbuf[4]=10;disbuf[5]=24;
for(i=0;i<4800;i++){led_key();wdtcontr=0x3d;}
///////////////////////////////////////////////////
disbuf[0]= 4;disbuf[1]= 0;disbuf[2]=0;
disbuf[3]=10;disbuf[4]=10;disbuf[5]=0;
for(i=0;i<4800;i++){led_key();wdtcontr=0x3d;}
////////////////////////////////////////////////
shang=0;alarm=1;
startad();
start:
if(csset2==0){
if(csset1==0){
if(csset0==0){
if(err==0){
disbuf[0]=wendu/100%10;if(disbuf[0]==0)disbuf[0]=10;
disbuf[1]=wendu/10%10;if(disbuf[0]==10&&disbuf[1]==0)disbuf[1]=10;
disbuf[2]=wendu%10;
}
if(err==1){disbuf[0]=disbuf[1]=disbuf[2]=22;}
if(err==2){disbuf[0]=disbuf[1]=disbuf[2]=23;}
}
else{disbuf[0]=tishi[0][0];disbuf[1]=tishi[0][1];disbuf[2]=tishi[0][2];}//csset0==1 显示 sp
///////////////////////////////////
disbuf[3]=xtcs[0]/100%10;if(disbuf[3]==0)disbuf[3]=10;
disbuf[4]=xtcs[0]/10%10;if(disbuf[3]==10&&disbuf[4]==0)disbuf[4]=10;
disbuf[5]=xtcs[0]%10;
}
else{ ////////////////////////////////////////////////////////////////csset1==1显示参数设置
disbuf[0]=tishi[index][0];disbuf[1]=tishi[index][1];disbuf[2]=tishi[index][2];
switch(index){
case 1:if(xtcs[1]>=200){/////////////////////////AL
disbuf[3]=(xtcs[index]-200)/100%10;if(disbuf[3]==0)disbuf[3]=10;
disbuf[4]=(xtcs[index]-200)/10%10;if(disbuf[3]==10&&disbuf[4]==0)disbuf[4]=10;
disbuf[5]=(xtcs[index]-200)%10;
}
else{
disbuf[3]=(200-xtcs[index])/100%10;if(disbuf[3]==0)disbuf[3]=20;else disbuf[3]=21;
disbuf[4]=(200-xtcs[index])/10%10;if(disbuf[3]==20&&disbuf[4]==0)disbuf[4]=10;
disbuf[5]=(200-xtcs[index])%10;
}
break;
case 2:if(xtcs[2]>=100){////////////////////////////rt
disbuf[3]=(xtcs[index]-100)/100%10;if(disbuf[3]==0)disbuf[3]=10;
disbuf[4]=(xtcs[index]-100)/10%10;if(disbuf[3]==10&&disbuf[4]==0)disbuf[4]=10;
disbuf[5]=(xtcs[index]-100)%10;
}
else{
disbuf[3]=(100-xtcs[index])/100%10;if(disbuf[3]==0)disbuf[3]=20;else disbuf[3]=21;
disbuf[4]=(100-xtcs[index])/10%10;if(disbuf[3]==20&&disbuf[4]==0)disbuf[4]=10;
disbuf[5]=(100-xtcs[index])%10;
}
break;
default:disbuf[3]=xtcs[index]/100%10;if(disbuf[3]==0)disbuf[3]=10;
disbuf[4]=xtcs[index]/10%10;if(disbuf[3]==10&&disbuf[4]==0)disbuf[4]=10;
disbuf[5]=xtcs[index]%10;break;
}
}
if(chang==40){
if(csset1==1){//大--显示参数AL
disbuf[0]=tishi[1][0];disbuf[1]=tishi[1][1];disbuf[2]=tishi[1][2];
disbuf[3]=xtcs[1]/100%10;if(disbuf[3]==0)disbuf[3]=10;
disbuf[4]=xtcs[1]/10%10;if(disbuf[3]==10&&disbuf[4]==0)disbuf[4]=10;
disbuf[5]=xtcs[1]%10;
}
else{//实际检测温度值
disbuf[0]=wendu/100%10;if(disbuf[0]==0)disbuf[0]=10;
disbuf[1]=wendu/10%10;if(disbuf[0]==10&&disbuf[1]==0)disbuf[1]=10;
disbuf[2]=wendu%10;
disbuf[3]=xtcs[0]/100%10;if(disbuf[3]==0)disbuf[3]=10;
disbuf[4]=xtcs[0]/10%10;if(disbuf[3]==10&&disbuf[4]==0)disbuf[4]=10;
disbuf[5]=xtcs[0]%10;
}
}
}
else{/////////////////////////////////////////////////csset2==1显示双按键补偿值
if(err==0){
disbuf[0]=wendu/100%10;if(disbuf[0]==0)disbuf[0]=10;
disbuf[1]=wendu/10%10;if(disbuf[0]==10&&disbuf[1]==0)disbuf[1]=10;
disbuf[2]=wendu%10;
}
if(err==1){disbuf[0]=disbuf[1]=disbuf[2]=22;}
if(err==2){disbuf[0]=disbuf[1]=disbuf[2]=23;}
if(xtcs[8]>=100){
disbuf[3]=(xtcs[8]-100)/100%10;if(disbuf[3]==0)disbuf[3]=10;
disbuf[4]=(xtcs[8]-100)/10%10;if(disbuf[3]==10&&disbuf[4]==0)disbuf[4]=10;
disbuf[5]=(xtcs[8]-100)%10;
}
else{
disbuf[3]=(100-xtcs[8])/100%10;if(disbuf[3]==0)disbuf[3]=20;else disbuf[3]=21;
disbuf[4]=(100-xtcs[8])/10%10;if(disbuf[3]==20&&disbuf[4]==0)disbuf[4]=10;
disbuf[5]=(100-xtcs[8])%10;
}
}
if(xia==0){alarm=1;}else{alarm=0;}//如果xia==1,报警
if(zhengding==501){
////////////////////////////zhengding
shan++;if((shan%200)==0){shang=!shang;}
if(shan>20000){zhengding=0;shang=0;shan=0;}
}
led_key();
wdtcontr=0x3d;
getad();
if(adok==1){ ////////////////成功取值
tempwen=tempwen+adt;cyjs++;startad();
if(cyjs>199){//////////////////取值时间分为200份
cyjs=0;tempwen=tempwen/200;wendu=tempwen;tempwen=0;
err=0;xia=0;
if(wendu>700){err=1;xia=1;kekong=1;zhong=0;pid=0;TR0=0;xia=1;goto start;}//报警
if(wendu<2) {err=2;xia=1;kekong=1;zhong=0;pid=0;TR0=0;xia=1;goto start;}
////////////////////////////////////温度补偿 两个
wendu=wendu+xtcs[8];if(wendu>=100)wendu=wendu-100;else wendu=0;
wendu=wendu+xtcs[2];if(wendu>=100)wendu=wendu-100;else wendu=0;
//wendu=wendu+wendu/53;
if(wendu>410){err=1;xia=1;kekong=1;zhong=0;pid=0;TR0=0;xia=1;goto start;}//?????
talarm=xtcs[1]+xtcs[0];if(talarm<200)talarm=0;else talarm=talarm-200;//sp+al大于200
//////////////judge alarm ???????????????????????
if(xtcs[1]>200){if(wendu>=talarm){xia=1;}}//al
if(xtcs[1]<200){if(wendu<=talarm){xia=1;}}
//////////////system control///////////////////////////////////////////
if(wendu>xtcs[0]){TR0=0;pid=0;kekong=1;zhong=0;goto end;}
if(wendu+xtcs[4]<=xtcs[0]){TR0=0;pid=0;kekong=0;zhong=1;goto end;}//p
thjs=0;thtime=0;thtime=xtcs[5]*20;thjs=thtime;//20t
jscr=thjs*(1000-xtcs[6])/1000;//cr
if(xtcs[6]==0){thtime=xtcs[5]*14;jscr=0;jscr=thtime;}
if((wendu+2)<xtcs[0]){jscr=jscr*xtcs[3]/100;cr=jscr;goto control;}
if((wendu+1)<xtcs[0]){jscr=jscr*xtcs[3]/140;cr=jscr;goto control;}
if(wendu<xtcs[0]) {jscr=jscr*xtcs[3]/180;cr=jscr;goto control;}
jscr=jscr*xtcs[3]/220;cr=jscr;
control:
if(pid==0){pid=1;kekong=0;zhong=1;TH0=0x3c;TL0=0xb3;t0js=0;TR0=1;}
end:_nop_();
}
}
goto start;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -