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