keil5修改一下程序,为什么一直循环(标签-ar|关键词-#include)

预想是:1.开启后灯亮,oled显示文字。2.按下k1后灯亮 oled显示文字。3.再按下k1后led灯亮 oled显示文字
我想让程序简单停留,而不是我按一下k1,它会无限循环我case1里的程序。可能我说的有点矛盾,详细可以再细说一下,一直改不成预想的成果。

delay_init(168);          //初始化延时函数
OLED_Init();                //初始化LED端口
delay_init(84);
GPIO_Num_Init();
Close_Display_Number();
LED_Init();                //初始化LED端口 
KEY_Init();       //初始化与按键连接的硬件接口
while(1)
{
    if(KEY1==0)
    {
        delay_ms(20);
        if(KEY1==0)
        {
            k1++;
            if(k1==3)
            {
                k1=0;
            }
            while(KEY1==0);
        }
    }
    switch(k1)
    {
        case 0:
            LED0 = 0;    
            OLED_Clear();
            OLED_ShowString(18,17,"Ready\r\n",16,1);
            OLED_ShowChinese(18,48,55,16,1);//
            OLED_ShowChinese(36,48,56,16,1);//
            OLED_ShowChinese(54,48,57,16,1);//
            OLED_ShowChinese(72,48,58,16,1);//准备就绪
            OLED_Refresh();
            Dispaly_Number(4,4);
            delay_ms(1000);
            Dispaly_Number(3,3);
            delay_ms(1000);        
            Dispaly_Number(2,2);
            delay_ms(1000);    
            Dispaly_Number(1,1);
            delay_ms(1000);            
            Close_Display_Number();    
        break;
        
        case    1:
            LED0=!LED0;
            OLED_Clear();
            OLED_ShowChinese(36,17,45,16,1);
            OLED_ShowChinese(54,17,46,16,1);
            OLED_ShowChinese(72,17,47,16,1);//姓名
            OLED_Refresh();        
            OLED_ShowChinese(18,48,48,16,1);//电
            OLED_ShowChinese(36,48,49,16,1);//气
            OLED_ShowChinese(54,48,50,16,1);//自
            OLED_ShowChinese(72,48,51,16,1);//动
            OLED_ShowChinese(90,48,52,16,1);//化
            OLED_Refresh();    
            Dispaly_Number_4(2, 0, 2, 3, 500);
            Close_Display_Number();    
        break;
        
        case    2:
            LED1=!LED1;    
            OLED_Clear();
            OLED_ShowString(18,48,"2023\r\n",16,1);
            OLED_ShowChinese(18,17,53,16,1);//
            OLED_ShowChinese(36,17,54,16,1);//年
        OLED_Refresh(); 
            Dispaly_Number_4(0, 5, 1, 9, 500);
            Close_Display_Number();    
        break;



k1初值多少。
流程也有点问题,即使没有检测到按键,也会执行switch语句进行刷新操作。

那就再case里再加判断呗,允许到你想要的事件后,给它跳出来

已经解决了,把switch case写到if语句里面