#include
#define uchar unsigned char
#define uint unsigned int
int num=0;
uchar flag_1=0,flag_2=0,flag_3=0;
int i=0,ii=0,iii=0,iiii=0;
uint count=0,jd=1;
sbit pwm=P3^5;
uchar code table_1[]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; // 反转
uchar code table_2[]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe}; // 正转
void delay(uint t)
{
uint i,j;
for(i=t;i>0;i--)
for(j=80;j>0;j--);
}
void TMOD_init(void)
{
TMOD=0x01;
TH0=(65536-917)/256; //1ms中断初始化
TL0=(65536-917)%256;
EA=1;
ET0=1;
TR0=1;
}
/* 函数功能:步进电机1 转N圈,修改变量t可调整圈数。*/
void motor_1(uint t,uchar tt)
{
uchar i;
uint j,a;
if(tt==1) // 如果Z=1,t代表减速后圈数,就是输出轴转一圈 t=t*43;
else // 如果Z=0,t代表减速前圈数,
t=t;
for(a=0;a
{
for (j=0; j
{
for (i=0; i
{
P0=table_1[i]; //取数据
delay(1); //调节转速
}
}
}
P0=0xff;
flag_1=1;
}
/* 函数功能:步进电机2 转N圈,修改变量t可调整圈数。此函数在中断中运行*/ void motor_2(uint t,uchar tt,uchar z)
{
if(num==1)
{
num=0;
if(i==8) //一个周期转30度
{
i=0;
ii++;
if(ii==12) { ii=0; iii++; //转1圈 (减速前) if(tt==1) { if(iii==43) //转1圈 (减速后)减速比1/43 { iii=0; iiii++; if(iiii==t) //转n圈 { flag_2=0; iiii=0; } } } else { if(iii==t)
flag_2=0;
iii=0;
}
}
}
}
if(z==1) //z=1,正转 P2=table_2[i];
else
P2=table_1[i];
i++;
}
}
void main()
{
TMOD_init();
while(1)
{
switch(flag_1)
{
case 0: //开电机2,印印泥,同时电机1开动 jd=3; //舵机打脚
flag_2=1; //开电机2,正转,直到印到印泥 flag_3=1;
motor_1(1,1); //开电机 //void 圈小圈
//delay(200);
flag_1=1;
break; 圈 (2,1)转两圈 (2,0)转2/43圈
case 1:
flag_2=1; // 开电机2
flag_3=2; //反转
jd=1; //舵机收回
motor_1(1,1); //开电机1
//delay(200);
flag_1=2; motor_1(uint t,uchar tt) t 圈数 tt 大 //例如(1,1)转一圈 (1,0)转1/43
case 2:
flag_2=1; //开电机2,
flag_3=3; //正转 // motor_1(1,1); //开电机1
delay(500);
flag_1=3;
break;
case 3:
flag_2=1; // 开电机2
flag_3=4; //反转
delay(100);
motor_1(1,1); //开电机1
//delay(200);
flag_1=0;
break;
}
}
}
void T0_time() interrupt 1
{
TH0=(65536-917)/256;
TL0=(65536-917)%256;
if(flag_2==1)
{
num++;
switch(flag_3)
{
case 0:
P2=0xff;
break;
case 1:
//1ms中断服务,步进电机2控制
motor_2(30,0,1); break; 正反转
case 2:
motor_2(30,0,0); break;
case 3:
motor_2(30,0,1); break;
case 4:
motor_2(30,0,0); break; }
}
else
P2=0xff;
}
//正转 //void motor_2(uint t,uchar tt,uchar z) t 圈数 tt 大圈小圈 z //反转