📄 spotwelder.c
字号:
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 + -