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

📄 spotwelder.c

📁 点焊机控制器C51源码+SCH & DDB
💻 C
📖 第 1 页 / 共 2 页
字号:
		  else if((position==5)&&(i==11))P0=0xff;
		  else if((position==6)&&(i==12))P0=0xff;
		  else if((position==7)&&(i==13))P0=0xff;
		  else if((position==8)&&(i==14))P0=0xff;
		  else if((position==9)&&(i==3))P0=0xff;
		  else if((position==10)&&(i==4))P0=0xff;
		  else if((position==11)&&(i==5))P0=0xff;
		  else if((position==12)&&(i==0))P0=0xff;
		  else if((position==13)&&(i==1))P0=0xff;
		  else if((position==14)&&(i==2))P0=0xff;
		  else P0=DisData[i];
       }
	}
   else P0=DisData[i];
   if((i==1)||(i==3) ||(i==6)||(i==9))P2_7=0;	 //小数点
   i++;
   if(i==15)i=0;
}

/**************************    initail()    ***************************************/
void Initail()
{
  TCON=0x01;       //IT0=1,下降沿触发中断
  IP=0x04;         //PX0=1;外部中断优先级最高
  IE=0x8b;         //EA=1,ET1=1,ET0=1,EX0=1;
  TMOD=0x11;
  TL1=71;
  TH1=243;
  TR1=1;
  TH0=216;
  TL0=239;
  TR0=1;
  bExecute=0;
  KeyCode=0;
  KeyState=0;
  Program=RUN;
  //DownCT=0;
}

void InitValue()
{
  PrrzTime=50;
  WeldTime=50;
  PrrzLTime=50;
  WorkCount=10;
  SpaceTime=5;
  Program=RUN;
  WorkMode=MAN;
}
//****************************
void delay(uchar i,uchar j)
{
  uchar n,m;
  for(n=i;n>0;n--)
    for(m=j;m>0;m--);
}
//*************************     void main()    ************************************

unsigned char data FSTBuf[2]={0,0};

void main(void)
{
  unsigned char i;
  unsigned int data *rptr;
  for(i=5;i>0;i--)
     IRcvStr(AT24WC01,0x20,FSTBuf,2);
  i=FSTBuf[0]+FSTBuf[1];
  if(i!=0xcc)
   {
      FSTBuf[0]=0x39;
	  FSTBuf[1]=0x93;
	  for(i=5;i>0;i--)
	    ISendStr(AT24WC01,0x20,FSTBuf,2);
	  InitValue();
	  flag_run=1;
   }
  else
    {
	  do { i=IRcvStr(AT24WC01,0x00,trnscv,11);
         }while(!i);
	  rptr=trnscv;
	  PrrzTime=*rptr;
	  rptr+=1;
	  WeldTime=*rptr;
	  rptr+=1;
	  WorkCount=*rptr;
	  rptr+=1;
	  PrrzLTime=*rptr;
	  rptr+=1;
	  SpaceTime=*rptr;
	  WorkMode=trnscv[10];
	  if( (PrrzTime>999) ||(WeldTime>999)
	    ||(WorkCount>999)||(PrrzLTime>999)||(SpaceTime>999))
	    { 
		  InitValue();flag_run=1;
		}
	  if(WorkMode==AUTO)bMode_led=0;
   }
  Initail();  
  while(1)
    {
	   Key_Server();
	   DisData_DSP();
       if(flag_run==1)
	    {  
		   flag_run=0;
		   rptr=trnscv;
		   *rptr=PrrzTime;
		   rptr+=1;
		   *rptr=WeldTime;
		   rptr+=1;
		   *rptr=WorkCount;
		   rptr+=1;
		   *rptr=PrrzLTime;
		   rptr+=1;
		   *rptr=SpaceTime;
		   trnscv[10]=WorkMode;
		   do{ i=ISendStr(AT24WC01,0x00,trnscv,8);
		     }while(!i);
		   delay(50,50);  //10ms
		   do{ i=ISendStr(AT24WC01,0x08,&trnscv[8],3);
		     }while(!i);
		   delay(50,50);  //10ms
		   do{ i=IRcvStr(AT24WC01,0x00,trnscv,11);
		     }while(!i);
	       rptr=trnscv;
	       PrrzTime=*rptr;
	       rptr+=1;
	       WeldTime=*rptr;
	       rptr+=1;
	       WorkCount=*rptr;
	       rptr+=1;
	       PrrzLTime=*rptr;
	       rptr+=1;
	       SpaceTime=*rptr;
		   WorkMode=trnscv[10];
		 }
    }	   
}

//*************************************
void ISR_Timer1()interrupt 3    //1 ,l00p;./ms中断
{
  TL1=23;
  TH1=252;
  LED_Display();
}
//**************************************

void ISR_Timer0()interrupt 1  using 1	 //10 ms 中断
{
  static unsigned char i;
  unsigned int data *resume_ptr;
    
  TL0=239;
  TH0=216;
  switch(Work)
   {
     case Prrz:							//pressrize 加压
	           bPrrz_led=0;
		       bPrrz_RlyDr=0;
	           if(i>0)						//count from tail
                {
	              i=0;
                  if(PrrzTime>0)PrrzTime--;
                  else
	               {
                      Work=Weld;
			          break;
	               }
                }
		       i++;
		       break;
     case Weld:							//点焊
	           bWeld_led=0;
		       bWeld_RlyDr=0;
               if(i>0)
		        {	
		          i=0;
	              if(WeldTime>0)WeldTime--;
                  else
				   {
			         bWeld_led=1;
			         bWeld_RlyDr=1;
                     resume_ptr=trnscv;		//取接收/发送数据缓冲区地址
                     PrrzTime=*resume_ptr;	//恢复数据
			         resume_ptr+=1;
			         WeldTime=*resume_ptr;	//恢复数据
                     Work=PrrzL; 
			         break; 
		           }
		       }
		      i++;
	          break;
     case PrrzL:
	           bPrrzL_led=0;
		       bPrrzL_RlyDr=0;
               if(i>0)
		        {
		          i=0;
		          if(PrrzLTime>0)PrrzLTime--;
                  else
				   { 
		             bPrrz_led=1;		
			         bPrrz_RlyDr=1;			         
					 bPrrzL_led=1;
			         bPrrzL_RlyDr=1;
			         resume_ptr=&trnscv[6];
			         PrrzLTime=*resume_ptr;
			         Work=Space;
			         break;
			       }
		        }
		        i++;
	            break;
	 case Space:
		        if(WorkMode==AUTO)
				 {
	 	           bSpace_led=0;
		           bSpace_RlyDr=0;
		           if(i>9)
				    { 
					  i=0;
			          if(SpaceTime>0)SpaceTime--;
		        	  else
					   {
			             bSpace_led=1;
			             bSpace_RlyDr=1;
			             resume_ptr=&trnscv[8];
			             SpaceTime=*resume_ptr;
			             if(--WorkCount==0)
				          {
				            bFshCnt_led=0;
					        bFshCnt_RlyDr=0;
						    resume_ptr=&trnscv[4];
	                        WorkCount=*resume_ptr;
                            Work=0;
					        break;
				          }
				         else{ Work=Prrz;break;}
                       }
		            }
			      i++;
				  break;
		        }
			   else
			    {
				   resume_ptr=&trnscv[4];
	               WorkCount=*resume_ptr;
			   	   resume_ptr=&trnscv[8];
			       SpaceTime=*resume_ptr;
			       Work=0;break;
				}
	case check:
	           if(bcheck==0)
			    {
				  PrrzTime=prrz_buf;
				  bPrrz_led=1;
				  bPrrz_RlyDr=1;
				  Work=0;
				  break;
				}
	           else if(i>0)					
                {
	              i=0;
				  PrrzTime++;
                  if(PrrzTime>999)PrrzTime=0;
                }
		       i++;
   		       break;
    case Emergency:
               bPrrz_led=1;
               bPrrz_RlyDr=1;
               bWeld_led=1;
               bWeld_RlyDr=1;
               bPrrzL_led=1;
               bPrrzL_RlyDr=1;
               bSpace_led=1;
               bSpace_RlyDr=1;
               bFshCnt_led=1;
               bFshCnt_RlyDr=1;
               resume_ptr=trnscv;
               PrrzTime=*resume_ptr;
               resume_ptr+=1;
               WeldTime=*resume_ptr;
               resume_ptr+=1;
               WorkCount=*resume_ptr;
               resume_ptr+=1;
               PrrzLTime=*resume_ptr;
               resume_ptr+=1;
               SpaceTime=*resume_ptr;
			   Work=0;
			   break;
        default:
	           current_state=stop;
			   if(bFshCnt_RlyDr==0)
			    {
				  if(i++>199)
				   {
					 i=0;
					 bFshCnt_led=1;
					 bFshCnt_RlyDr=1;
				   }
				}
	           break; 
   }
  keyscan();
}
//***************************************
 
void ISR_INT0()interrupt 0 
{
  if((Program==RUN)&&(current_state==stop)&&(!bcheck))
   {
      Work=Prrz;
	  bFshCnt_led=1;
	  bFshCnt_RlyDr=1;
	  current_state=runing;
   }
}





⌨️ 快捷键说明

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