关于stm32的延时流水灯相关

key0按下流水灯频率来回变化,最大延时300,最小延时10. key1按下维持当前延时不变。按下key0,又恢复原样。
有没有一种语句 可以按下按键0执行包括语句1 按下按键1 中断包括语句1并且执行包括语句2 再按下按键0又执行包括语句0
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "key.h"
#include "stdio.h"

int main(void)
{

int i=10;
int c=0;
u8 t=0;      
delay_init();             //延时函数初始化      
LED_Init();                   //初始化与LED连接的硬件接口
KEY_Init();              //初始化与按键连接的硬件接口
 


    
    while(1)
 {
    t=KEY_Scan(0);
        
    if(t==1&&t!=2)    
                 {
                    while(i<=300&&i>=10&&t!=2)
                    {t=KEY_Scan(0);
                    i++;
                    GPIO_ResetBits(GPIOA,GPIO_Pin_8); 
                    GPIO_SetBits(GPIOD,GPIO_Pin_2);
                    delay_ms(i);
                    GPIO_SetBits(GPIOA,GPIO_Pin_8);
                    GPIO_ResetBits(GPIOD,GPIO_Pin_2);
                    delay_ms(i);
                    if(i==300){i=10;} }
                                                
                  }
                                    
    else if    (t==2)    {    
                    c=i;
                                           
                    while(t==2)
                    {
                     GPIO_ResetBits(GPIOA,GPIO_Pin_8); 
                     GPIO_SetBits(GPIOD,GPIO_Pin_2);
                    delay_ms(c);
                    GPIO_SetBits(GPIOA,GPIO_Pin_8);
                    GPIO_ResetBits(GPIOD,GPIO_Pin_2);
                    delay_ms(c);
                                            
                     }
             }
            
        
    
}

}

你用switch case语句