51单片机如何实现 按下按键执行某函数或语句,松开后停止执行这个函数或语句

在做一个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;
}