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

📄 weld_all.c

📁 电焊机点焊程序
💻 C
📖 第 1 页 / 共 4 页
字号:
		 case 3: segment(4,1); segment(5,0); break;  //// cool
		 case 4: segment(3,1); segment(4,0); break;  //// hold
		 case 5: segment(2,1); segment(3,0); break;  //// stop
		 default:_nop_();
	}
}
//// alarm of that there is something wrong of the Silicon Controlled Rectifier(SCR)
alarm_scr(void)
{
	//// display "FFF"
    display(0xcb,15); 
    display(0xcc,15);
    display(0xcd,15);
    //// blink the three data BCD LEDs
//***	display_parameter_value(counter);
    display(0x88,0xc7);
    parameter_all_off();
	parameter = current_n;
    parameter_switch();
} 
//// alarm of that there are some error datas in the 12 current parameters
alarm_data_error(void)
{
   display(0xcb,14); 
   display(0xcc,14);
   display(0xcd,14);   
   //// blink the three data BCD LEDs
   display(0x88,0xc7);   
   //// disable the Start-A\B interrupt 
   ET2 = 0; EXEN2 = 0; EXF2 = 0;
}
//// check wether there is any error in the 12 parameters of thr current criterion 
check_data(void)
{  //// three weld-current value
   if((parameter_value[3]<20)||(parameter_value[3]>180)||(parameter_value[6]<20)||(parameter_value[6]>180)||(parameter_value[9]<20)||(parameter_value[9]>180))
       alarm_data_error();
   else if((parameter_value[3+12]<20)||(parameter_value[3+12]>180)||(parameter_value[6+12]<20)||(parameter_value[6+12]>180)||(parameter_value[9+12]<20)||(parameter_value[9+12]>180))
       alarm_data_error();
   //// three weld-time
   else if((parameter_value[1]<1)||(parameter_value[1]>200)||(parameter_value[5]<1)||(parameter_value[5]>200)||(parameter_value[10]<1)||(parameter_value[10]>200))
       alarm_data_error();
   else if((parameter_value[1+12]<1)||(parameter_value[1+12]>200)||(parameter_value[5+12]<1)||(parameter_value[5+12]>200)||(parameter_value[10+12]<1)||(parameter_value[10+12]>200))
       alarm_data_error();
   //// other six time parameters
   else if((parameter_value[0]>200)||(parameter_value[2]>200)||(parameter_value[4]>200)||(parameter_value[7]>200)||(parameter_value[8]>200)||(parameter_value[11]>200))
       alarm_data_error();
   else if((parameter_value[0+12]>200)||(parameter_value[2+12]>200)||(parameter_value[4+12]>200)||(parameter_value[7+12]>200)||(parameter_value[8+12]>200)||(parameter_value[11+12]>200))
       alarm_data_error();
}
//// enable or disable a percific interrupt
//// interrupt_n is the interrupt number except interrupt_n=10,which is for enable\disable all interrupt
//// on_off:1--enable   0--disable
interrupt_set(char interrupt_n,char on_off)
{  
   switch(interrupt_n)
   {
     case 0:EX0 = on_off?1:0; break;
	 case 1:ET0 = on_off?1:0; break;
     case 2:EX1 = on_off?1:0; break;
	 case 3:ET1 = on_off?1:0; break;
	 case 5:ET2 = on_off?1:0; break;
// enable\disable all interrupts
	 case 10:EA = on_off?1:0; break;    
     default:_nop_();
   }
}

//// external interrup 1 of AT89S51 is used for ZLG7289
void int1(void) interrupt IE1_VECTOR
{   unsigned int n=0;
    switch(value_key(0x15))
	{
//// switch criterion 
	    case 62:if(criterion==0)
		            criterion = 12;
				else if(criterion==12)
				    criterion = 24;
                else 
				    criterion = 0;
		        criterion_switch(); 
                //// if criterion=24 display 0,else display the value of current parameter
				if(criterion==24)
				{
				    if((parameter==6)||(parameter==11))
					{
					    read_eerom(parameter+criterion);
		                display_parameter_value(parameter_value[parameter+criterion]);
					}
					else
					{
                        display_parameter_value(0);
					}
				}
				else
				{
		           read_eerom(parameter+criterion);
		           display_parameter_value(parameter_value[parameter+criterion]);
                }
			    display(0x88,0xff);
                break;
//// increase the value of the current parameter
		case 61:if(mode==0)
                {
                   display(0x88,0xff);
                   if(criterion==24)
				   {
                        while(KEY==0)
                        {
                            temp = temp + 1;
							parameter_value[parameter+criterion] = temp;
				            display_parameter_value(temp);
				            if(!n) 
					             delay(6000);
					        else 
					             delay(2000);
					        n=n+1;
                         }              
				   }
				   else
				   {
		              while(KEY==0)
		              {
                          if((parameter==3)||(parameter==6)||(parameter==9))
						  {
                               if(parameter_value[parameter+criterion]>179)
							          parameter_value[parameter+criterion] = 20;
							   else
							          parameter_value[parameter+criterion] = parameter_value[parameter+criterion] + 1;
						  }
						  else if((parameter==1)||(parameter==5)||(parameter==10))
						  {
                               if(parameter_value[parameter+criterion]>179)
							          parameter_value[parameter+criterion] = 1;
							   else
							          parameter_value[parameter+criterion] = parameter_value[parameter+criterion] + 1;
						  }
						  else
						  {    if(parameter_value[parameter+criterion]>199)
						             parameter_value[parameter+criterion] = 0;
							   else
                                     parameter_value[parameter+criterion] = parameter_value[parameter+criterion] + 1;
						  }
				          display_parameter_value(parameter_value[parameter+criterion]);
				          if(!n) 
					           delay(6000);
					      else 
					           delay(2000);					   
					      n=n+1;
				      }
                   }
				   display(0x88,0xdf);
                }				
		        break;
//// decrease the value of the current parameter
		case 60:if(mode==0)
                {
                   display(0x88,0xff);
                   if(criterion==24)
                   {
                        while(KEY==0)
                        {
                            temp = temp - 1;
							parameter_value[parameter+criterion] = temp;
				            display_parameter_value(temp);
				            if(!n) 
					             delay(6000);
					        else 
					             delay(2000);
					        n=n+1;
                         }                 
				   }
				   else
				   {  //// weld current must be bigger than 20
                      if((parameter==3)||(parameter==6)||(parameter==9))
                      {
                         while((parameter_value[parameter+criterion]>19)&&(KEY==0))
                         {
						    if(parameter_value[parameter+criterion]==20)
							     parameter_value[parameter+criterion] = 180;
							else
                                 parameter_value[parameter+criterion] = parameter_value[parameter+criterion] - 1;
				            display_parameter_value(parameter_value[parameter+criterion]);
				            if(!n) 
					             delay(6000);
					        else 
					             delay(2000);
					        n=n+1;
                         }                    
                      }
				      //// some parameters must be bigger than 1
                      else if((parameter==1)||(parameter==5)||(parameter==10))
                      {
                         while((parameter_value[parameter+criterion]>0)&&(KEY==0))
                         {
						    if(parameter_value[parameter+criterion]==1)
							     parameter_value[parameter+criterion] = 200;
							else
                                 parameter_value[parameter+criterion] = parameter_value[parameter+criterion] - 1;
				            display_parameter_value(parameter_value[parameter+criterion]);
				            if(!n) 
					             delay(6000);
					        else 
					             delay(2000);
					        n=n+1;
                         }                    
                      }
		              else
                      {
                        while(KEY==0)
		                {   if(parameter_value[parameter+criterion]==0)
						         parameter_value[parameter+criterion] = 200;
					        else
		                         parameter_value[parameter+criterion] = parameter_value[parameter+criterion] - 1;
				            display_parameter_value(parameter_value[parameter+criterion]);
				            if(!n) 
					             delay(6000);
					        else 
					             delay(2000);
					        n=n+1;
				        }
                      }
				   }
				   display(0x88,0xdf);
                }
     	        break;
//// enter the value of the current parameter  
		case 59:if(mode==0)
                {
                   display(0x88,0xff);   // enter
				   ///// check whether it is to set parameter_value[24+6] or parameter[24+7] 
				   if(((parameter==6)||(parameter==7))&&(criterion==24))
				   {   //// only if the licence is valid can the parameter_value[24+6] and parameter[24+7] be set
                       if((parameter_value[24+0]==72)&&(parameter_value[24+1]==89))
					   {
					      write_eerom(parameter+criterion,parameter_value[parameter+criterion]);
					   }
					   else
					   {
                          display_parameter_value(0);
					   }
				   }
				   else
				   {
		               write_eerom(parameter+criterion,parameter_value[parameter+criterion]);
				   }
                }
                temp = 0;
		        break;
//// switch mode  
		case 58:  if(mode<2)
		          {
		             mode = mode + 1;		
			 		 //// stop blinking
					 display(0x88,0xff);   				 		 
					 //// swicth the criterion to 0 if criterion=24
					 if(criterion==24)
					 {
					      criterion = 0;
					      criterion_switch();
					 }
                     //// turn on the LED of weld-2 current
					 parameter_all_off();
                     parameter = 6;
                     parameter_switch();					 
                     //// display the value of weld-2 current
                     display_parameter_value(parameter_value[parameter+criterion]);
					 //// check the current 12 parameter datas
					 eeprom_36_byte_ram();
                     check_data();
				  }
				  else 
				  {
				      mode = 0; 
			      }
				  mode_switch();
				  write_eerom(36,mode);
				  if(mode==0)
				  {  //// disable interrupt of Start-A\B
					 EXEN2 = 0; EXF2 = 0; ET2 = 0;
				  }
				  else
				  {
                     //// enable interrupt of Start-A\B
					 EXEN2 = 1;  EXF2 = 0; ET2 = 1;	
				  }
		          break;
//// decrease the number of parameter
		case 57:if(mode==0)
                {
                   if(parameter>0) 
	                      parameter = parameter - 1;
                   else if(parameter==0)
	                      parameter = 11;
                   parameter_switch();
				   //// if criterion=24 display 0,else display the value of current parameter 
				   if(criterion==24)
				   {
                      //// dispay the value of the current parameter if parameter=6,7 and 11 when criterion==24
                      if((parameter==6)||(parameter==7)||(parameter==11))
					  {
					     read_eerom(parameter+criterion);
				         display_parameter_value(parameter_value[parameter+criterion]);
					  }
					  else
					  {
                         display_parameter_value(0);
					  }
				   }
				   else
                   {
				      read_eerom(parameter+criterion);
				      display_parameter_value(parameter_value[parameter+criterion]);
				   }
				   display(0x88,0xff);  //  stop blinking
                }
		           break;
//// increase the number of parameter
		case 56:if(mode==0)
                {
                   if(parameter<11) 
	                      parameter = parameter + 1;
                   else if(parameter==11)
	                      parameter = 0;
                   parameter_switch();
				   //// if criterion=24 display 0,else display the value of current parameter 
				   if(criterion==24)
				   {  //// dispay the value of the current parameter if parameter=6,7 and 11 when criterion==24
                      if((parameter==6)||(parameter==7)||(parameter==11))
			   		  {
					     read_eerom(parameter+criterion);
				         display_parameter_value(parameter_value[parameter+criterion]);
					  }
					  else
					  {
                         display_parameter_value(0);
					  }
				   }
				   else
				   {
				      read_eerom(parameter+criterion);
				      display_parameter_value(parameter_value[parameter+criterion]);
				   }
				   display(0x88,0xff);   //  stop blinking
                }
		           break;
		default: _nop_();
	}
}

//// Syn interrupt at INT0
void int0(void) interrupt IE0_VECTOR
{
  //// disable Syn interrupt
  EX0 = 0;
  switch(mode)
  {
   ////  for reduced mode  *********************************************************************************** 
   case 1:switch(current_n)
		  {
           //// the press time
		   case 0: if(start==0) 
		           {				       
					   start = 1;
					   //// two relays
					   relay_A = a_state;
					   relay_B = b_state;					     
					   counter = 2*parameter_value[1+criterion];
					   //// turn on the press LED
				       segment(6,1);
				   }
                   counter = counter - 1;  			   
				   if(counter==0) 
				   {
				      //// turn on the weld LED
				      segment(6,0); 
					  segment(5,1);
				      counter = 2*parameter_value[5+criterion]; current_n = 1;
  					  weld_current = parameter_value[6+criterion];
			  		  //// timer = 66535-(9900-48*weld_current)
					  timer = 55635 + 48*weld_current;  
					  high_byte_0 = timer/256; low_byte_0 = timer%256;	
					  //// wether the weld current is bigger than 100
					  if(weld_current>100)

⌨️ 快捷键说明

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