|
功能要求:當安鍵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;
}
}
}
|
-
51.png
(38.4 KB, 下載次數: 106)
下載附件
2020-9-10 16:38 上傳
|