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

📄 wenkongyi.c

📁 用STC单片机作为控制芯片
💻 C
📖 第 1 页 / 共 2 页
字号:
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 + -