功能要求:当安键KEY1安下且长安时步进电机正转70度停止,当松开时电机反转原位置。
小白写了个程序控制不了,安下键只能正转70度就停了,松开安键不能反转,没反应。问题在哪里,请大侠指点,非常感谢!
#include <reg51.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
sbit P10=P1^0;
#define KEY_Status P10
#define UP 20
#define DOWN 30
#define STOP 40
void delay()//延时程序
{
unsigned i,j,k;
for(i=0;i<0x02;i++)
for(j=0;j<0x02;j++)
for(k=0;k<0xff;k++);
}
void SetpP() //步进电机正转70度停止
{
uint j;
j=155; //正转70度
while(j--)
{
P2=0X08;//控制正转
delay();
delay();
P2=0X04;
delay();
delay();
P2=0X02;
delay();
delay();
P2=0X01;
delay();
delay();
}
while(1) ;
}
void SetpN()
{
uint j;
j=155; //反转70度
while(j--)
{
P2=0X01;//控制反转 //0011
delay();
delay();
P2=0X02;//0110
delay();
delay();
P2=0X04;//1100
delay();
delay();
P2=0X08;//1001
delay();
delay();
}
while(1) ;
}
void Stop()
{
P2=0X00;//电机停止
delay();
delay();
}
main()
{
unsigned char i;
i=0; //将i初始化为0
P2=0x00;
while(1)
{
if(KEY_Status==0) //如果键按下
{
delay(); //延时一段时间 按键消抖
delay();
if(KEY_Status==0) //如果再次检测到S1键按下
i++; //i自增1
if(i==3) //如果i=4,重新将其置为1
i=1;
}
switch(i)
{
case 1:KEY_Status==0;SetpP();break; //步进电机正转70度停止
case 2:KEY_Status==1;SetpN();break; //步进电机反转70度回原位
// case 3:P2=0x00; Stop();break; //步进电机停止
default:P2=0x00;
}
}
}
|