这里只粘贴了部分代码,但是基本上能看出作用。这个代码的作用是根据定义的四个独立按键来控制电机的正转,反转,加速和减速。现在我做的比较简单(因为是新手,还在逐渐摸索中)。我采用的定时中断对键盘进行实时扫描,但是出现了一个问题,按下一个键,比如K1的时候,如果不放的话程序就会停止运行,这就意味着电机在这个时候不会转。哪位大神帮我看看,这个问题怎么解决?
/*****************独立键盘按键扫描函数**********************/
void Key_Selfscan()
{
if(K1==0) //检测按键K1是否按下
{
Delay(2); //消除抖动
if(K1==0)
{
Direc
tion = 1; //正转方向标识
}
while((i<50)&&(K1==0)) //检测按键是否松开
{
Delay(2);
i++;
}
i=0;
}
if(K2==0) //检测按键K2是否按下
{
Delay(2);
if(K2==0)
{
Direction = 2; //反转方向标识
}
while((i<50)&&(K2==0))
{
Delay(2);
i++;
}
i=0;
}
if(K3==0) //检测按键K3是否按下
{
Delay(2);
if(K3==0)
{
Speed = Speed+2; //加速
}
while((i<50)&&(K3==0))
{
Delay(2);
i++;
}
i=0;
}
if(K4==0) //检测按键K4是否按下
{
Delay(2);
if(K4==0)
{
Speed = Speed-2; //减速
}
while((i<50)&&(K4==0))
{
Delay(2);
i++;
}
i=0;
}
}
/*******************电机旋转函数****************/
void Motor_Whirl()
{ for(i=0;i<4;i++)
{ if(Direction==1)
{Motor = Double_pos[i]; //取正转链表
if(Direction==2)
{ Motor = Double_rev[i]; //取反转链表}
Delay(Speed); //调节转速
} }
/******************定时中断****************/
void Timer_Configuration()
{ TMOD = 0x01;//选择工作方式1
TH0 = 0x3c; //设置初始值,定时50ms
TL0 = 0xb0;
EA =1; //打开总中断
ET0 = 1; //打开定时器0中断
TR0 = 1;//启动定时器0
}
void Timer0() interrupt 1
{ TH0 = 0x3c;
TL0 = 0xb0;
Key_Selfscan();
}
/***************主函数********************/
void main(void)
{ Speed=100;
P2=0xf0; //电机端口初始化
Timer_Configuration();
while(1)
{
Motor_Whirl();
}
}
4