编辑代码

#include <reg51.h>

sbit j1=P3^1;//按键
sbit j2=P3^0;
sbit j3=P3^2;
sbit j4=P3^3;

sbit d1=P1^0;//uln2003四个引脚控制步进电机4个转角
sbit d2=P1^1;
sbit d3=P1^2;
sbit d4=P1^3;

void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}

//按键
int anJ(){

 static	int s=0;
	
if(s==0&&j1==0){//按键1且s==0:防止一直按着
	Delay(1);//消除抖动
	s=1;
return 1;
}else  if(j1==1&&j2==1&&j3==1&&j4==1){//?????
    s=0;//s=0为下次按下成功做准备
}
return 0;
}


//步进电机8步:因为sln2003是低电位转高电位
void  dian(int step){//转到哪一步

    if(step==0){
        d1=0;d2=1;d3=1;d4=1;
    }else if(step ==1){
          d1=0;d2=0;d3=1;d4=1;
    }else if(step ==2){
          d1=1;d2=0;d3=1;d4=1;
    }else if(step ==3){
          d1=1;d2=0;d3=0;d4=1;
    }else if(step ==4){
          d1=1;d2=1;d3=0;d4=1;
    }else if(step ==5){
          d1=1;d2=1;d3=0;d4=0;
    }else if(step ==6){
          d1=1;d2=1;d3=1;d4=0;
    }else if(step ==7){
          d1=0;d2=1;d3=1;d4=0;
    }

}




void main () {

int i;//按键
int sfyx=1;//是否运行
int step=0;//电机运行步骤

int j;

int speed=5;//速度5ms

    while(1){
i=anJ();

if(i==1){//按键1控制停止或者运行
sfyx=!sfyx;//取反
}

if(sfyx==1){//运行

if(j>=8){j=0;}//遍历八个位置
dian(j++);
Delay(speed);//速度5ms

}
    }
  

}