uchar min=0; //定义分钟和秒变量
uchar jizhun=0;
/* 定义编码开关控制引脚 */ //中间脚(第2脚)接地
sbit CodingsWitch_B=P3^3; //A脚定义(即1脚) 这两脚必须接10K上拉电阻
sbit CodingsWitch_A=P3^4; //B脚定义(即3脚)
/********以下是步进电机1相励磁法正转函数********/
void motor_up(uint n)
{
uchar i;
uint j;
for (j=0; j<1*n; j++) //转n圈
{
for (i=0; i<4; i++) //4次共转7.5°×4=30度,这样,转12次可转360°(即1圈)
{
P1 = up_data[i]; //取正转数据
Delay_ms(3); //转一个角度停留的时间,可调节转速
}
}
}
/********步进电机1相励磁法反转函数********/
void motor_down(uint n)
{
uchar i;
uint j;
for (j=0; j<1*n; j++) //转n圈
{
for (i=0; i<4; i++) //4次共转7.5°×4=30度,这样,转12次可转360°(即1圈)
{
P1 = down_data[i]; //取反转数据
Delay_ms(3); //转一个角度停留的时间,可调节转速
}
}
}
/********************旋转编码开关判断函数***********************************************/
void CodingsWitch(void)
{
static uchar Aoid,Boid;
static uchar st=0;
if(CodingsWitch_A&&CodingsWitch_B)
st=1;
if(st)
{
if(CodingsWitch_A==0&&CodingsWitch_B==0)
{
if(Boid)
{
st=0;
if(min>=90)
min=90;
else
min++;
}
if(Aoid)
{
st=0;
if(min<1)
min=0;
else
min--;
}
}
}
Aoid=CodingsWitch_A;
Boid=CodingsWitch_B;
}
//以下是编码器控制步进电机方法
CodingsWitch(); //调旋转编码开关函数
if(min>jizhun)
{
motor_up(min-jizhun);
jizhun=min;
}
if(min<jizhun)
{
motor_down(jizhun-min);
jizhun=min;
} |