📄 main.c
字号:
{
//external interupt on INT0
next_gan=1;
next_ganwei=0-juli_jcd;
}
#pragma interrupt_handler int1_isr:3
void int1_isr(void)
{
//external interupt on INT1
unsigned char tmp;
unsigned int time0_jsq; //可控硅触发计时
// Place your code here
if (pidai_yunxing==1) //如果处于皮带运行状态,则继续。
{
TCNT0=0; //time0初始化计时值
TCCR0=2; //time0开始计时
time0_jsq=pre_jsq; //计算上一次的触发时间
if ((P_speed>(set_speed*1.01)) || (P_speed<(set_speed*0.99)) ) //发果速度波动超过1%,则进行速度调整
{
switch(dj_jibie) //逐步逼近法进行速度加减调整,tmp为速度调整的加减量
{
case 0: tmp=64; break; //依据逼近度确定加减量
case 1: tmp=32; break;
case 2: tmp=16; break;
case 3: tmp=8; break;
case 4: tmp=4; break;
case 5: tmp=2; break;
case 6: tmp=1; break;
}
if (P_speed<set_speed) // 如果小于设定速度,则减少触发时间
{
if (dj_fangxi==1)
{
time0_jsq=time0_jsq-tmp;
}
else
{
time0_jsq=time0_jsq-tmp;
dj_jibie++;
dj_fangxi=1;
}
}
else //反之,则增大触发时间
{
if (dj_fangxi==1)
{
time0_jsq=time0_jsq+tmp;
dj_jibie++;
dj_fangxi=0;
}
else
{
time0_jsq=time0_jsq+tmp;
}
}
}
else
{
dj_jibie=0;
dj_fangxi=0;
}
pre_jsq=time0_jsq;
time0_chi=(unsigned char)(time0_jsq/256-1); //计时量计算
time0_yu=(unsigned char)(256-time0_jsq % 256);
time0_fen=0;
if (time0_yu>100) //如果余数太小,则从次数中分出一次来,和余数加在一起分担剩余的时间
{
time0_chi--;
time0_yu=156;
time0_fen=time0_yu-156;
}
}
}
#pragma interrupt_handler int2_isr:19
void int2_isr(void)
{
//external interupt on INT2
step_num=0;
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
timer0_init();
timer1_init();
timer2_init();
twi_init();
adc_init();
MCUCR = 0x0C;
GICR = 0xE0;
TIMSK = 0x45; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void read_eeprom(void) //读取eeprom中的关键参数
{
EEPROM_READ(10,set_speed);
EEPROM_READ(14,dw_speed);
EEPROM_READ(18,juli_jcd);
EEPROM_READ(22,longth_guamian);
EEPROM_READ(26,ganju);
EEPROM_READ(30,longth_zongmian);
EEPROM_READ(34,caogan_speed);
EEPROM_READ(38,max_ganshu);
}
//
unsigned char check_gan=0;
void main(void)
{
unsigned int i,m;
char *tttt="1231231";
unsigned int n;
init_devices();
//insert your functional code here...
//开始全局变量的初始化
read_eeprom();
//结束全局变量的初始化
M_state=8;
PORTB &=0xef; //亮电源指示灯
for (i=0;i<10000;i++)
{
for (m=0;m<500;m++);
}
disstring(tttt);
while (1)
{
if (PORTD & 0b01000000)
{
check_gan=1;
}
if ((check_gan==1) && ((PORTD & 0x01000000)==0))
{
check_gan=0;
jileigan++;
}
if ((jileigan>max_ganshu) & (caoshu==0))
{
caoshu=1;
current_speed=set_speed;
set_speed=caogan_speed;
//亮超速指示灯
PORTB &=0xbf;
}
if ((jileigan<=3) & (caoshu==1))
{
caoshu=0;
set_speed=current_speed;
//关超速指示灯
PORTB |=0x40;
}
if (on_key==1)
{
on_key=0;
key=ZLG7290_GetKey();
if (key>0)
{
if (menu_jb==0)
switch (key)
{
case START :
{
pidai_yunxing=1;
guogan=1;
//亮运行指示灯
disstring(string1);
} break;
case INC_SPEED :
{
set_speed=set_speed+50;
if (set_speed>500) set_speed=500;
} break;
case DEC_SPEED :
{
set_speed=set_speed-50;
if (set_speed<100) set_speed=100;
} break;
case SET :
{
menu_gn=1;
menu_jb=1;
disstring(string2);
} break;
case STOP :
{
pidai_yunxing=0;
guogan=0;
//灭运行指示灯
disstring(string1);
} break;
case SPEED :
{
menu_gn=2;
ftoa(set_speed,8,str_dis); //给set_speed乘以一个数值,便于显示出来
disstring(str_dis);
} break;
// case COUNT :
// {
//
// } break;
// case SUM :
// {
// } break;
// case CLEAR :
// {
// } break;
case MIAN_LENGTH :
{
menu_gn=3;
menu_jb=1;
ftoa(longth_guamian,8,str_dis);
disstring(str_dis);
} break;
case CUT_NUM :
{
n=jidao;
menu_gn=4;
menu_jb=1;
itoa(n,str_dis);
disstring(str_dis);
} break;
case JIGAN :
{
n=max_ganshu;
menu_gn=5;
menu_jb=1;
itoa(n,str_dis);
disstring(str_dis);
} break;
}
if (menu_jb==1)
switch (key)
{
case K0:
{
tmp_string[cs_num]='0';
tmp_string[cs_num+1]=0;
cs_num++;
disstring(tmp_string);
} break;
case K1:
{
tmp_string[cs_num]='1';
tmp_string[cs_num+1]=0;
cs_num++;
disstring(tmp_string);
} break;
case K2:
{
tmp_string[cs_num]='2';
tmp_string[cs_num+1]=0;
cs_num++;
disstring(tmp_string);
} break;
case K3:
{
tmp_string[cs_num]='3';
tmp_string[cs_num+1]=0;
cs_num++;
disstring(tmp_string);
} break;
case K4:
{
tmp_string[cs_num]='4';
tmp_string[cs_num+1]=0;
cs_num++;
disstring(tmp_string);
} break;
case K5:
{
tmp_string[cs_num]='5';
tmp_string[cs_num+1]=0;
cs_num++;
disstring(tmp_string);
} break;
case K6:
{
tmp_string[cs_num]='6';
tmp_string[cs_num+1]=0;
cs_num++;
disstring(tmp_string);
} break;
case K7:
{
tmp_string[cs_num]='7';
tmp_string[cs_num+1]=0;
cs_num++;
disstring(tmp_string);
} break;
case K8:
{
tmp_string[cs_num]='8';
tmp_string[cs_num+1]=0;
cs_num++;
disstring(tmp_string);
} break;
case K9:
{
tmp_string[cs_num]='9';
tmp_string[cs_num+1]=0;
cs_num++;
disstring(tmp_string);
} break;
case ENTER:
{
cs_num=0;
disstring(string1);
switch (menu_gn)
{
case 1: //SET
{
n=atoi(tmp_string);
menu_gn=(unsigned char)(n+12);
} break;
case 2:
{
set_speed=atof(tmp_string); //除以一个数值,使结果准确
menu_jb=0;
} break;
case 3:
{
longth_guamian=atof(tmp_string);
menu_jb=0;
} break;
case 4:
{
jidao=(unsigned char)(atoi(tmp_string));
menu_jb=0;
} break;
case 5:
{
max_ganshu=(unsigned char)(atoi(tmp_string));
menu_jb=0;
} break;
case 12:
{
longth_zongmian=atof(tmp_string);
menu_jb=0;
} break;
case 13:
{
juli_jcd=atof(tmp_string);
menu_jb=0;
} break;
case 14:
{
dw_speed=atof(tmp_string);
menu_jb=0;
} break;
case 15:
{
ganju=atof(tmp_string);
menu_jb=0;
} break;
case 16:
{
// min_ganshu=(unsigned char)(atoi(tmp_string));
menu_jb=0;
} break;
case 17:
{
caogan_speed=atof(tmp_string);
menu_jb=0;
} break;
}
} break;
case RETURN:
{
cs_num=0;
disstring(string1);
menu_jb=0;
} break;
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -