diff --git a/source/Application/APP/Key/Key_user.c b/source/Application/APP/Key/Key_user.c
index a2ce3a31ee818e07ab2c5076483e6fad34de4185..48eebf45cd7b0851b22e07f69b26fa87fa7b72bb 100644
--- a/source/Application/APP/Key/Key_user.c
+++ b/source/Application/APP/Key/Key_user.c
@@ -7,6 +7,7 @@
 #include "Sound_Scheduler.h"
 #include "System_Monitor.h"
 #include "RTE_ADC.h"
+#include "Popup_Scheduler.h"
 
 #include "CAN_Communication_Matrix.h"
 #include "GUI.h"
@@ -47,7 +48,9 @@ void Key_Operation_Up(Key_Event_en_t enKeyEvent)
 {
     uint8_t CanStatus1 = 0u;
     uint16_t DispVSpeed = 0u;
-    KeyTest.Up ++ ;
+    uint16_t popupID = 0U;
+
+    popupID = Popup_Get_Current_Message( );
     HMI_Set_KEY_UP(enKeyEvent);
 
     DispVSpeed =  Common_Get_Disp_V_Speed();
@@ -55,7 +58,7 @@ void Key_Operation_Up(Key_Event_en_t enKeyEvent)
 
     if (DispVSpeed <= DISPSPEEDNULLMAX)
     {
-        if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
+        if ((enKeyEvent == KEY_EVENT_SHORT_PRESS) && (popupID == 0xffffu ))
         {
             /*主界面 一级菜单 二级菜单那*/
             if (((bCurMenuIDX >= _MN_DSP_LEVEL1MENU_1) && (bCurMenuIDX <= _MN_DSP_LEVEL2_6_MENU_2)) ||
@@ -308,13 +311,15 @@ void Key_Operation_Up(Key_Event_en_t enKeyEvent)
 void Key_Operation_Down(Key_Event_en_t enKeyEvent)
 {
     uint16_t DispVSpeed = 0u;
-    KeyTest.Down ++ ;
+    uint16_t popupID = 0U;
+
+    popupID = Popup_Get_Current_Message( );
     HMI_Set_KEY_DOWN(enKeyEvent);
     DispVSpeed =  Common_Get_Disp_V_Speed();
 
     if (DispVSpeed <= DISPSPEEDNULLMAX)
     {
-        if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
+        if ((enKeyEvent == KEY_EVENT_SHORT_PRESS) && (popupID == 0xffffu ))
         {
             /*主界面 一级菜单 二级菜单*/
             if (((bCurMenuIDX >= _MN_DSP_LEVEL1MENU_1) && (bCurMenuIDX <= _MN_DSP_LEVEL2_6_MENU_2)) ||
@@ -558,14 +563,16 @@ void Key_Operation_Down(Key_Event_en_t enKeyEvent)
 void Key_Operation_Enter(Key_Event_en_t enKeyEvent)
 {
     uint16_t DispVSpeed = 0u;
-    KeyTest.Enter ++ ;
+    uint16_t popupID = 0U;
+
+    popupID = Popup_Get_Current_Message( );
     HMI_Set_KEY_CONFIRM(enKeyEvent);
 
     DispVSpeed =  Common_Get_Disp_V_Speed();
 
     if (DispVSpeed <= DISPSPEEDNULLMAX)
     {
-        if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
+        if ((enKeyEvent == KEY_EVENT_SHORT_PRESS) && (popupID == 0xffffu ))
         {
             if (((bCurMenuIDX >= _MN_DSP_LEVEL2MENU_1) && (bCurMenuIDX <= _MN_DSP_LEVEL2_6_MENU_2)) ||
                     ((bCurMenuIDX >= _MN_DSP_LEVEL3_4_MENU_41) && (bCurMenuIDX <= _MN_DSP_LEVEL3_4_MENU_47)))
@@ -620,13 +627,15 @@ void Key_Operation_Enter(Key_Event_en_t enKeyEvent)
 void Key_Operation_Return(Key_Event_en_t enKeyEvent)
 {
     uint16_t DispVSpeed = 0u;
-    KeyTest.Return ++ ;
+    uint16_t popupID = 0U;
+
+    popupID = Popup_Get_Current_Message( );
     HMI_Set_KEY_CANCEL(enKeyEvent);
     DispVSpeed =  Common_Get_Disp_V_Speed();
 
     if (DispVSpeed <= DISPSPEEDNULLMAX)
     {
-        if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
+        if ((enKeyEvent == KEY_EVENT_SHORT_PRESS) && (popupID == 0xffffu ))
         {
             if ((bCurMenuIDX >= _MN_DSP_LEVEL2_1_MENU_1) && (bCurMenuIDX < _MN_DSP_ENTER_MENU))
             {
@@ -699,8 +708,9 @@ void Key_Operation_Menu(Key_Event_en_t enKeyEvent)
 {
     uint8_t CanStatus1 = 0u;
     uint16_t DispVSpeed = 0u;
-    KeyTest.Menu ++ ;
+    uint16_t popupID = 0U;
 
+    popupID = Popup_Get_Current_Message( );
     HMI_Set_KEY_MENU(enKeyEvent);
     DispVSpeed =  Common_Get_Disp_V_Speed();
 
@@ -708,7 +718,7 @@ void Key_Operation_Menu(Key_Event_en_t enKeyEvent)
 
     if (DispVSpeed <= DISPSPEEDNULLMAX)
     {
-        if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
+        if ((enKeyEvent == KEY_EVENT_SHORT_PRESS) && (popupID == 0xffffu ))
         {
             /*记录进入menu菜单的位置*/
             if ((bCurMenuIDX >= _MN_DSP_LEVEL1MENU_1) && (bCurMenuIDX <= _MN_DSP_LEVEL1MENU_6))
diff --git a/source/Application/Alarm/Popup_List.h b/source/Application/Alarm/Popup_List.h
index b19c530b3b1c62dfd7c0b6429ccb819915233625..775f55bf08e0ba2cfad76bce1690fc961876565b 100644
--- a/source/Application/Alarm/Popup_List.h
+++ b/source/Application/Alarm/Popup_List.h
@@ -15,15 +15,18 @@
 ******************************************************************************/
 enum PopupName
 {
+    /*----第一组----*/
     POPUP1_BRAKE_BLACK     = 0x00u      ,/*00.紧急警报-刹车*/
     POPUP1_BRAKE_BRAKE                  ,/*01.紧急警报-紧急制动*/
     POPUP1_BRAKE_SPACING_R              ,/*02.车间距警报-刹车(红字)*/
     POPUP1_BRAKE_SPACING_COLLISION      ,/*03.车间距警报-碰撞报警*/
     POPUP1_BRAKE_SPACING_Y              ,/*04.车间距警报-刹车(黄字)*/
     POPUT1_ASR_OPERATE                  ,/*05.ASR工作*/
+    /*----第二组----*/
     POPUT2_PTO                          ,/*06.PTO紧急警报-刹车*/
     POPUP2_PARKING_BRAKE                ,/*07.忘记松手刹车*/
     POPUP2_AIRMATIC_HIGHT               ,/*08.遥控调整车辆高度(有车速)*/
+    /*----第三组----*/
     POPUP3_CRUISE                       ,/*09.自动巡航模式*/
     POPUP3_VARIABLE_SLD                 ,/*10.可变SLD 模式*/
     POPUT4_ABNORMAL_CHARGE              ,/*11.充电异常(系统检测)*/
diff --git a/source/Application/Alarm/Popups.c b/source/Application/Alarm/Popups.c
index 317b0d8ef4cfef2eb0026729af2ff957ad87aab9..938ff6bf9d21ff6ea60c553106c60e1898c6042c 100644
--- a/source/Application/Alarm/Popups.c
+++ b/source/Application/Alarm/Popups.c
@@ -19,6 +19,11 @@
 #include "Data_Voltmeter.h"
 #include "Data_Fuel_User.h"
 
+static uint8_t CRUISE_1_Time     = 0x00u;
+static uint8_t CRUISE_STUDY_Time = 0x00u;
+static uint8_t CRUISE_SLD1_Time  = 0x00u;
+static uint8_t CRUISE_SLD2_Time = 0x00u;
+
 void Popups_Management_Service(void)
 {
     Popups_Polling( );
@@ -167,6 +172,68 @@ void Popups_Polling(void)
                 Popup_Delete(POPUT1_ASR_OPERATE);
             }
 
+            /*----第二组---------------------------------------------------------------------*/
+            /*6.PTO紧急警报-刹车*/
+            variable_1 = Get_ID_18FED900_Sig_PTO_SW();
+            variable_2 = Line_In_Get_Status(LINE_IN_PTO);//B01
+
+            if ((variable_1 == 0x01u) || (variable_2 == LINE_IN_LOGIC_VALID))
+            {
+                Popup_Request(POPUT2_PTO);
+            }
+            else
+            {
+                Popup_Delete(POPUT2_PTO);
+            }
+
+            /*7.忘记松手刹车    LINE_IN_Get_PARK_BRAKE 驻车制动*/
+            variable_1 = Line_In_Get_Status(LINE_IN_PARK_BRAKE);
+
+            if (variable_1 == LINE_IN_LOGIC_VALID) //6.67Km
+            {
+                Popup_Request(POPUP2_PARKING_BRAKE);
+            }
+            else
+            {
+                Popup_Delete(POPUP2_PARKING_BRAKE);
+            }
+
+            /*8.遥控调整车辆高度(有车速)*/
+            variable_1 = Line_In_Get_Status(LINE_IN_AIR_SUS);
+
+            if (variable_1 == LINE_IN_LOGIC_VALID) //0.5Km
+            {
+                Popup_Request(POPUP2_AIRMATIC_HIGHT);
+            }
+            else
+            {
+                Popup_Delete(POPUP2_AIRMATIC_HIGHT);
+            }
+
+            /*----第三组---------------------------------------------------------------------*/
+            /*9.自动巡航模式*/
+            variable_1 = Get_ID_18FF4100_Sig_Cruise_VariableSLD_Disp();
+
+            if (variable_1 == 0x01u) //5s内不显示
+            {
+                Popup_Request(POPUP3_CRUISE);
+            }
+            else
+            {
+                Popup_Delete(POPUP3_CRUISE);
+            }
+
+            /*10.可变SLD 模式*/
+            variable_1 = Get_ID_18FF4100_Sig_Cruise_VariableSLD_Disp();
+
+            if (variable_1 == 0x03u) //5s内不显示
+            {
+                Popup_Request(POPUP3_VARIABLE_SLD);
+            }
+            else
+            {
+                Popup_Delete(POPUP3_VARIABLE_SLD);
+            }
         }
         else /*ig off*/
         {
@@ -176,11 +243,11 @@ void Popups_Polling(void)
             Popup_Clear(POPUP1_BRAKE_SPACING_COLLISION);/*03.车间距警报-碰撞报警*/
             Popup_Clear(POPUP1_BRAKE_SPACING_Y);/*04.车间距警报-刹车(黄字)*/
             Popup_Clear(POPUT1_ASR_OPERATE);/*05.ASR工作*/
-            /*06.PTO紧急警报-刹车*/
-            /*07.忘记松手刹车*/
-            /*08.遥控调整车辆高度(有车速)*/
-            /*09.自动巡航模式*/
-            /*10.可变SLD 模式*/
+            Popup_Clear(POPUT2_PTO);/*06.PTO紧急警报-刹车*/
+            Popup_Clear(POPUP2_PARKING_BRAKE);/*07.忘记松手刹车*/
+            Popup_Clear(POPUP2_AIRMATIC_HIGHT);/*08.遥控调整车辆高度(有车速)*/
+            Popup_Clear(POPUP3_CRUISE);/*09.自动巡航模式*/
+            Popup_Clear(POPUP3_VARIABLE_SLD);/*10.可变SLD 模式*/
             /*11.充电异常(系统检测)*/
             /*12.油压(系统检测)*/
             /*13.AMT初始化异常*/
@@ -270,63 +337,6 @@ void Popups_Polling(void)
 
 #if 0
 
-
-    //6.PTO紧急警报-刹车
-    variable_1 = Get_ID_18FED900_Sig_PTO_SW();
-    variable_2 = Line_In_Get_Status(LINE_IN_PTO);//B01
-    if (V_Speed && (variable_1 || variable_2))
-    {
-        Popup_Request(POPUT2_PTO);
-    }
-    else
-    {
-        Popup_Delete(POPUT2_PTO);
-    }
-    //7.忘记松手刹车    LINE_IN_Get_PARK_BRAKE 驻车制动
-    variable_1 = Line_In_Get_Status(LINE_IN_PARK_BRAKE);//获取硬线结果
-    if ((V_Speed > 66) && (variable_1 == LINE_IN_LOGIC_VALID)) //6.67Km
-    {
-        Popup_Request(POPUP2_PARKING_BRAKE);
-    }
-    else
-    {
-        Popup_Delete(POPUP2_PARKING_BRAKE);
-    }
-
-    //8.遥控调整车辆高度(有车速)
-    variable_1 = Line_In_Get_Status(LINE_IN_AIR_SUS);//获取硬线结果
-    if ((V_Speed > 5) && (variable_1 == LINE_IN_LOGIC_VALID)) //0.5Km
-    {
-        Popup_Request(POPUP2_AIRMATIC_HIGHT);
-    }
-    else
-    {
-        Popup_Delete(POPUP2_AIRMATIC_HIGHT);
-    }
-
-    //9.自动巡航模式
-
-    variable_1 = Get_ID_18FF4100_Sig_Cruise_VariableSLD_Disp();
-    if ((Ign_Time > 5000) && (variable_1 == 1)) //5s内不显示
-    {
-        Popup_Request(POPUP3_CRUISE);
-    }
-    else
-    {
-        Popup_Delete(POPUP3_CRUISE);
-    }
-
-    //10.可变SLD 模式
-    variable_1 = Get_ID_18FF4100_Sig_Cruise_VariableSLD_Disp();
-    if ((Ign_Time > 5000) && (variable_1 == 3)) //5s内不显示
-    {
-        Popup_Request(POPUP3_VARIABLE_SLD);
-    }
-    else
-    {
-        Popup_Delete(POPUP3_VARIABLE_SLD);
-    }
-
     //11.充电异常(系统检测)
     variable_1 = Line_In_Get_Status(LINE_IN_CHARGE);
     if (EOL == 0X00)
diff --git a/source/Application/Graphic/GUI/GUI.h b/source/Application/Graphic/GUI/GUI.h
index f5d71745158072c2b67bb049891fa79b67a39f37..45f9741147b98da7f55abefc52423a2c7932cda1 100644
--- a/source/Application/Graphic/GUI/GUI.h
+++ b/source/Application/Graphic/GUI/GUI.h
@@ -156,17 +156,19 @@ typedef struct
 *************************************************************************************************************/
 static const GUIGeneralPopupStruct GUIGeneralPopupTable[] =
 {
-    /*----图标--------有车速--------------------------------无车速--------------*/                          /* 第一组*/
+    /*----图标-----------------有车速--------------------------------无车速--------------*/
+    /*----第一组----*/
     {SpriteSize             , CN_Alarm_01_wenzi1     , SpriteSize, CN_Alarm_01_wenzi1     , SpriteSize}, /*00.紧急警报-刹车*/
     {SpriteSize             , CN_Alarm_01_wenzi4     , SpriteSize, CN_Alarm_01_wenzi4     , SpriteSize}, /*01.紧急警报-紧急制动*/
     {SpriteSize             , CN_Alarm_01_wenzi2     , SpriteSize, CN_Alarm_01_wenzi2     , SpriteSize}, /*02.车间距警报-刹车(红字)*/
     {SpriteSize             , CN_Alarm_01_wenzi5     , SpriteSize, CN_Alarm_01_wenzi5     , SpriteSize}, /*03.车间距警报-碰撞报警*/
     {SpriteSize             , CN_Alarm_01_wenzi3     , SpriteSize, CN_Alarm_01_wenzi3     , SpriteSize}, /*04.车间距警报-刹车(黄字)*/
     {CN_Alarm_drive_04_image, CN_Alarm_drive_04_wenzi, SpriteSize, CN_Alarm_drive_04_wenzi, SpriteSize}, /*05.ASR工作*/
-
+    /*----第二组----*/
     {CN_Alarm_drive_05_image, CN_Alarm_drive_05_wenzi, SpriteSize, SpriteSize             , SpriteSize}, /*06.PTO紧急警报-刹车*/
     {CN_Alarm_drive_06_image, CN_Alarm_drive_06_wenzi, SpriteSize, SpriteSize             , SpriteSize}, /*07.忘记松手刹车*/
     {CN_Alarm_drive_10_image, CN_Alarm_drive_10_wenzi, SpriteSize, SpriteSize             , SpriteSize}, /*08.遥控调整车辆高度(有车速)*/
+    /*----第三组----*/
     {0, 0, 0, 0, 0}, /*09.自动巡航模式*/
     {0, 0, 0, 0, 0}, /*10.可变SLD 模式*/
     {0, 0, 0, 0, 0}, /*11.充电异常(系统检测)*/