下面的程序要完成以下任务:
按下按键1使其“以任意速度启动”,
按下按键2使其“正转”,
按下按键3使其“反转”,
按下按键4使其“加速2s”,
按下按键5使其“减速2s”,
按下按键6使其“停止”。
是程序有问题还是电机连接问题?
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define GPIO_KEY P1
uchar phasecw[4] ={0x08,0x04,0x02,0x01};//正转 电机导通相序 D-C-B-A
uchar phaseccw[4]={0x01,0x02,0x04,0x08};//反转 电机导通相序 A-B-C-D
uchar speed;
sbit moto=P1^0;
void delay(uint i)
{
while(i--);
}
//电机顺时针转动
void MotorCW(void)
{
uchar i;
for(i=0;i<4;i++)
{
GPIO_KEY=phasecw[i];
delay(speed);
}
}
//停转
void MotorStop()
{
GPIO_KEY=0x00;
}
//电机逆时针转动
void MotorCCW()
{
uchar i;
for(i=0;i<4;i++)
{
GPIO_KEY=phaseccw[i];
delay(speed);
}
}
//电机启动
void MotorOpen()
{
uchar num;
moto=0;
for(num=0;num<100;num++)
{
moto=1;
delay(5000);
}
}
void keydown()
{
uchar x = 5, y = 5;
char a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)
{
delay(1000);
if(GPIO_KEY!=0x0f)
{
switch(GPIO_KEY)
{
case(0x07):y=1;break;
case(0x0b):y=2;break;
case(0x0d):y=3;break;
case(0x0e):y=4;break;
default: y = 5; break;
}
GPIO_KEY=0xf0;
switch(GPIO_KEY)
{
case(0x70):x=1;break;
case(0xb0):x=2;break;
case(0xd0):x=3;break;
case(0xe0):x=4;break;
default: x = 5; break;
}
if(x=1,y=1)
{
MotorOpen();
}
if(x=1,y=2)
{
MotorCW();
}
if(x=1,y=3)
{
MotorCCW();
}
if(x=1,y=4)
{
uchar b;
for(b=0;b<=200;b++)
{
speed++;
delay(1000);
}
}
if(x=2,y=1)
{
uchar c;
for(c=0;c<=200;c++)
{
speed--;
delay(1000);
}
}
if(x=2,y=2)
{
MotorStop();
}
}
}
}
void main()
{
moto=0;
while(1)
{
keydown();
}
}
嗷嗷,我再去试试
那改完之后这个程序是没有错误的,那是我连接电机连的不对么?为什么不能用矩阵键盘控制