在做一个51小车,用定时器扫描按键状态。来控制加速和减速。
想实现的功能是,按住加速按键,执行加速函数,同时LED亮,松开就不再加速,灯灭,跳出。
LED1=P1^0;
LED2=P1^1;
void main(void)
{
unsigned char Key_Value=0;
Timer0_Init();
while(1)
{
Key_Value=getKey_Value();
switch(Key_Value)
{
case 1:LED1=1;Speed_UP();break;
case 2:LED2=1;Speed_Down();break;
}
}
}
我把case1:改成
case 1:
{
while(Key_Value==1)
{
Speed_UP();
LED1=1;
Key_Value=getKey_Value();
}
LED1=0;
break;
}
case 2:
{
while(Key_Value==1)
{
Speed_Down();
LED2=1;
Key_Value=getKey_Value();
}
LED2=0;
break;
}
可是还是一直在执行。应该如何修改呢?
下面是中断函数:
void Timer0_ISR(void) interrupt 1
{
static unsigned int Timer0_Count=0;
TL0=0x18;
TH0=0xFC;
Timer0_Count++;
if(Timer0_Count>=20)
{
Timer0_Count=0;
Key_Scan_Loop();
}
}
这里是Key.c里的
unsigned char getKey_State(void)
{
unsigned char Key_Num=0;
if(Key_OpenHeadLights==0){Key_Num=1;}
if(Key_BrakeMotor==0){Key_Num=2;}
if(Key_SpeedUpMotor==0){Key_Num=3;}
if(Key_BackMotor==0){Key_Num=4;}
return Key_Num;
}
void Key_Scan_Loop(void)
{
static unsigned char Key_NowState=0; //按键现在状态
static unsigned char Key_LastState=0; //按键上次状态
Key_LastState=Key_NowState;
Key_NowState=getKey_State();
if(Key_LastState==0&&Key_NowState==1)
{
Key_Number=1;
}
if(Key_LastState==0&&Key_NowState==2)
{
Key_Number=2;
}
if(Key_LastState==0&&Key_NowState==3)
{
Key_Number=3;
}
if(Key_LastState==0&&Key_NowState==4)
{
Key_Number=4;
}
}
unsigned char getKey_Value(void)
{
unsigned char Key_Temp=0;
Key_Temp=Key_Number;
Key_Number=0;
return Key_Temp;
}