Просмотр исходного кода

Add MKS Robin E3P, improve LVGL UI (#19442)

makerbase 4 лет назад
Родитель
Сommit
d8ed749045

+ 2 - 0
Marlin/src/HAL/STM32F1/tft/tft_fsmc.cpp

@@ -201,6 +201,8 @@ uint32_t TFT_FSMC::GetID() {
     id = ReadID(LCD_READ_ID);
   if ((id & 0xFFFF) == 0 || (id & 0xFFFF) == 0xFFFF)
     id = ReadID(LCD_READ_ID4);
+  if ((id & 0xFF00) == 0 && (id & 0xFF) != 0)
+    id = ReadID(LCD_READ_ID4);
   return id;
 }
 

+ 11 - 0
Marlin/src/MarlinCore.cpp

@@ -796,6 +796,10 @@ void kill(PGM_P const lcd_error/*=nullptr*/, PGM_P const lcd_component/*=nullptr
     UNUSED(lcd_component);
   #endif
 
+  #if HAS_TFT_LVGL_UI
+    lv_draw_error_message(lcd_error);
+  #endif
+
   #ifdef ACTION_ON_KILL
     host_action_kill();
   #endif
@@ -920,6 +924,13 @@ void setup() {
     SERIAL_ECHO_MSG("start");
   #endif
 
+  #if BOTH(HAS_TFT_LVGL_UI, USE_WIFI_FUNCTION)
+    mks_esp_wifi_init();
+    WIFISERIAL.begin(WIFI_BAUDRATE);
+    serial_connect_timeout = millis() + 1000UL;
+    while (/*!WIFISERIAL && */PENDING(millis(), serial_connect_timeout)) { /*nada*/ }
+  #endif
+
   SETUP_RUN(HAL_init());
 
   #if HAS_L64XX

+ 37 - 36
Marlin/src/core/boards.h

@@ -282,42 +282,43 @@
 // STM32 ARM Cortex-M3
 //
 
-#define BOARD_STM32F103RE             4000  // STM32F103RE Libmaple-based STM32F1 controller
-#define BOARD_MALYAN_M200             4001  // STM32C8T6  Libmaple-based STM32F1 controller
-#define BOARD_MALYAN_M200_V2          4002  // STM32F070CB  STM32F0 controller
-#define BOARD_STM3R_MINI              4003  // STM32F103RE  Libmaple-based STM32F1 controller
-#define BOARD_GTM32_PRO_VB            4004  // STM32F103VET6 controller
-#define BOARD_MORPHEUS                4005  // STM32F103C8 / STM32F103CB  Libmaple-based STM32F1 controller
-#define BOARD_CHITU3D                 4006  // Chitu3D (STM32F103RET6)
-#define BOARD_MKS_ROBIN               4007  // MKS Robin (STM32F103ZET6)
-#define BOARD_MKS_ROBIN_MINI          4008  // MKS Robin Mini (STM32F103VET6)
-#define BOARD_MKS_ROBIN_NANO          4009  // MKS Robin Nano (STM32F103VET6)
-#define BOARD_MKS_ROBIN_NANO_V2       4010  // MKS Robin Nano V2 (STM32F103VET6)
-#define BOARD_MKS_ROBIN_LITE          4011  // MKS Robin Lite/Lite2 (STM32F103RCT6)
-#define BOARD_MKS_ROBIN_LITE3         4012  // MKS Robin Lite3 (STM32F103RCT6)
-#define BOARD_MKS_ROBIN_PRO           4013  // MKS Robin Pro (STM32F103ZET6)
-#define BOARD_BTT_SKR_MINI_V1_1       4014  // BigTreeTech SKR Mini v1.1 (STM32F103RC)
-#define BOARD_BTT_SKR_MINI_E3_V1_0    4015  // BigTreeTech SKR Mini E3 (STM32F103RC)
-#define BOARD_BTT_SKR_MINI_E3_V1_2    4016  // BigTreeTech SKR Mini E3 V1.2 (STM32F103RC)
-#define BOARD_BTT_SKR_MINI_E3_V2_0    4017  // BigTreeTech SKR Mini E3 V2.0 (STM32F103RC)
-#define BOARD_BTT_SKR_E3_DIP          4018  // BigTreeTech SKR E3 DIP V1.0 (STM32F103RC / STM32F103RE)
-#define BOARD_JGAURORA_A5S_A1         4019  // JGAurora A5S A1 (STM32F103ZET6)
-#define BOARD_FYSETC_AIO_II           4020  // FYSETC AIO_II
-#define BOARD_FYSETC_CHEETAH          4021  // FYSETC Cheetah
-#define BOARD_FYSETC_CHEETAH_V12      4022  // FYSETC Cheetah V1.2
-#define BOARD_LONGER3D_LK             4023  // Alfawise U20/U20+/U30 (Longer3D LK1/2) / STM32F103VET6
-#define BOARD_GTM32_MINI              4024  // STM32F103VET6 controller
-#define BOARD_GTM32_MINI_A30          4025  // STM32F103VET6 controller
-#define BOARD_GTM32_REV_B             4026  // STM32F103VET6 controller
-#define BOARD_MKS_ROBIN_E3D           4027  // MKS Robin E3D (STM32F103RCT6)
-#define BOARD_MKS_ROBIN_E3            4028  // MKS Robin E3 (STM32F103RCT6)
-#define BOARD_MALYAN_M300             4029  // STM32F070-based delta
-#define BOARD_CCROBOT_MEEB_3DP        4030  // ccrobot-online.com MEEB_3DP (STM32F103RC)
-#define BOARD_CHITU3D_V5              4031  // Chitu3D TronXY X5SA V5 Board
-#define BOARD_CHITU3D_V6              4032  // Chitu3D TronXY X5SA V5 Board
-#define BOARD_CREALITY_V4             4033  // Creality v4.x (STM32F103RE)
-#define BOARD_CREALITY_V427           4034  // Creality v4.2.7 (STM32F103RE)
-#define BOARD_TRIGORILLA_PRO          4035  // Trigorilla Pro (STM32F103ZET6)
+#define BOARD_MALYAN_M200_V2          4000  // STM32F070CB  STM32F0 controller
+#define BOARD_MALYAN_M300             4001  // STM32F070-based delta
+#define BOARD_STM32F103RE             4002  // STM32F103RE Libmaple-based STM32F1 controller
+#define BOARD_MALYAN_M200             4003  // STM32C8T6  Libmaple-based STM32F1 controller
+#define BOARD_STM3R_MINI              4004  // STM32F103RE  Libmaple-based STM32F1 controller
+#define BOARD_GTM32_PRO_VB            4005  // STM32F103VET6 controller
+#define BOARD_GTM32_MINI              4006  // STM32F103VET6 controller
+#define BOARD_GTM32_MINI_A30          4007  // STM32F103VET6 controller
+#define BOARD_GTM32_REV_B             4008  // STM32F103VET6 controller
+#define BOARD_MORPHEUS                4009  // STM32F103C8 / STM32F103CB  Libmaple-based STM32F1 controller
+#define BOARD_CHITU3D                 4010  // Chitu3D (STM32F103RET6)
+#define BOARD_MKS_ROBIN               4011  // MKS Robin (STM32F103ZET6)
+#define BOARD_MKS_ROBIN_MINI          4012  // MKS Robin Mini (STM32F103VET6)
+#define BOARD_MKS_ROBIN_NANO          4013  // MKS Robin Nano (STM32F103VET6)
+#define BOARD_MKS_ROBIN_NANO_V2       4014  // MKS Robin Nano V2 (STM32F103VET6)
+#define BOARD_MKS_ROBIN_LITE          4015  // MKS Robin Lite/Lite2 (STM32F103RCT6)
+#define BOARD_MKS_ROBIN_LITE3         4016  // MKS Robin Lite3 (STM32F103RCT6)
+#define BOARD_MKS_ROBIN_PRO           4017  // MKS Robin Pro (STM32F103ZET6)
+#define BOARD_MKS_ROBIN_E3            4018  // MKS Robin E3  (STM32F103RCT6)
+#define BOARD_MKS_ROBIN_E3D           4019  // MKS Robin E3D (STM32F103RCT6)
+#define BOARD_MKS_ROBIN_E3P           4020  // MKS Robin E3p (STM32F103VET6)
+#define BOARD_BTT_SKR_MINI_V1_1       4021  // BigTreeTech SKR Mini v1.1 (STM32F103RC)
+#define BOARD_BTT_SKR_MINI_E3_V1_0    4022  // BigTreeTech SKR Mini E3 (STM32F103RC)
+#define BOARD_BTT_SKR_MINI_E3_V1_2    4023  // BigTreeTech SKR Mini E3 V1.2 (STM32F103RC)
+#define BOARD_BTT_SKR_MINI_E3_V2_0    4024  // BigTreeTech SKR Mini E3 V2.0 (STM32F103RC)
+#define BOARD_BTT_SKR_E3_DIP          4025  // BigTreeTech SKR E3 DIP V1.0 (STM32F103RC / STM32F103RE)
+#define BOARD_JGAURORA_A5S_A1         4026  // JGAurora A5S A1 (STM32F103ZET6)
+#define BOARD_FYSETC_AIO_II           4027  // FYSETC AIO_II
+#define BOARD_FYSETC_CHEETAH          4028  // FYSETC Cheetah
+#define BOARD_FYSETC_CHEETAH_V12      4029  // FYSETC Cheetah V1.2
+#define BOARD_LONGER3D_LK             4030  // Alfawise U20/U20+/U30 (Longer3D LK1/2) / STM32F103VET6
+#define BOARD_CCROBOT_MEEB_3DP        4031  // ccrobot-online.com MEEB_3DP (STM32F103RC)
+#define BOARD_CHITU3D_V5              4032  // Chitu3D TronXY X5SA V5 Board
+#define BOARD_CHITU3D_V6              4033  // Chitu3D TronXY X5SA V5 Board
+#define BOARD_CREALITY_V4             4034  // Creality v4.x (STM32F103RE)
+#define BOARD_CREALITY_V427           4035  // Creality v4.2.7 (STM32F103RE)
+#define BOARD_TRIGORILLA_PRO          4036  // Trigorilla Pro (STM32F103ZET6)
 
 //
 // ARM Cortex-M4F

+ 2 - 0
Marlin/src/lcd/extui/lib/mks_ui/SPIFlashStorage.cpp

@@ -27,6 +27,8 @@
 #include "../../../../inc/MarlinConfig.h"
 #include "SPIFlashStorage.h"
 
+extern W25QXXFlash W25QXX;
+
 uint8_t SPIFlashStorage::m_pageData[SPI_FLASH_PageSize];
 uint32_t SPIFlashStorage::m_currentPage;
 uint16_t SPIFlashStorage::m_pageDataUsed;

+ 3 - 2
Marlin/src/lcd/extui/lib/mks_ui/SPI_TFT.cpp

@@ -26,6 +26,7 @@
 
 #include "SPI_TFT.h"
 #include "pic_manager.h"
+#include "tft_lvgl_configuration.h"
 
 #include "../../../../inc/MarlinConfig.h"
 
@@ -74,6 +75,7 @@ void TFT::SetWindows(uint16_t x, uint16_t y, uint16_t with, uint16_t height) {
 }
 
 void TFT::LCD_init() {
+  TFT_BLK_L;
   TFT_RST_H;
   delay(150);
   TFT_RST_L;
@@ -92,8 +94,7 @@ void TFT::LCD_init() {
   LCD_WR_DATA(0x96);
 
   LCD_WR_REG(0x36);
-  LCD_WR_DATA(0x28);
-
+  LCD_WR_DATA(0x28 + TERN0(GRAPHICAL_TFT_ROTATE_180, 0x80));
   LCD_WR_REG(0x3A);
   LCD_WR_DATA(0x55);
 

+ 20 - 21
Marlin/src/lcd/extui/lib/mks_ui/draw_about.cpp

@@ -33,8 +33,9 @@
 #include "../../../../MarlinCore.h"
 #include "../../../../module/temperature.h"
 
+extern lv_group_t * g;
 static lv_obj_t * scr;
-static lv_obj_t * fw_type, *board, *fw_version;
+static lv_obj_t * fw_type, *board; //*fw_version;
 
 #define ID_A_RETURN   1
 
@@ -73,17 +74,18 @@ void lv_draw_about(void) {
 
   lv_refr_now(lv_refr_get_disp_refreshing());
 
-  LV_IMG_DECLARE(bmp_pic);
-
   // Create an Image button
   buttonBack = lv_imgbtn_create(scr, NULL);
 
   #if 1
-    lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_A_RETURN, "bmp_return.bin", 0);
-    lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
-    lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
+    lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_A_RETURN, NULL, 0);
+    lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_return.bin");
+    lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_return.bin");
     lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
     lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
+    #if HAS_ROTARY_ENCODER
+      if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonBack);
+    #endif
   #endif
 
   lv_obj_set_pos(buttonBack, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
@@ -97,30 +99,27 @@ void lv_draw_about(void) {
     lv_obj_align(label_Back, buttonBack, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
   }
 
-  fw_version = lv_label_create(scr, NULL);
-  lv_obj_set_style(fw_version, &tft_style_label_rel);
-  lv_label_set_text(fw_version, SHORT_BUILD_VERSION);
-  lv_obj_align(fw_version, NULL, LV_ALIGN_CENTER, 0, -60);
+  //fw_version = lv_label_create(scr, NULL);
+  //lv_obj_set_style(fw_version, &tft_style_label_rel);
+  //lv_label_set_text(fw_version, SHORT_BUILD_VERSION);
+  //lv_obj_align(fw_version, NULL, LV_ALIGN_CENTER, 0, -60);
 
   fw_type = lv_label_create(scr, NULL);
   lv_obj_set_style(fw_type, &tft_style_label_rel);
-  lv_label_set_text(fw_type,
-    #if MB(MKS_ROBIN_PRO)
-      "Firmware: Robin_Pro35"
-    #elif MB(MKS_ROBIN_NANO, MKS_ROBIN_NANO_V2)
-      "Firmware: Robin_Nano35"
-    #else
-      CUSTOM_MACHINE_NAME
-    #endif
-  );
+  lv_label_set_text(fw_type, "Firmware: Marlin " SHORT_BUILD_VERSION);
   lv_obj_align(fw_type, NULL, LV_ALIGN_CENTER, 0, -20);
 
   board = lv_label_create(scr, NULL);
   lv_obj_set_style(board, &tft_style_label_rel);
   lv_label_set_text(board, "Board: " BOARD_INFO_NAME);
-  lv_obj_align(board, NULL, LV_ALIGN_CENTER, 0, 20);
+  lv_obj_align(board, NULL, LV_ALIGN_CENTER, 0, -60);
 }
 
-void lv_clear_about() { lv_obj_del(scr); }
+void lv_clear_about() {
+  #if HAS_ROTARY_ENCODER
+    if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+  #endif
+  lv_obj_del(scr);
+}
 
 #endif // HAS_TFT_LVGL_UI

+ 144 - 178
Marlin/src/lcd/extui/lib/mks_ui/draw_acceleration_settings.cpp

@@ -29,6 +29,7 @@
 #include "../../../../MarlinCore.h"
 #include "../../../../module/planner.h"
 
+extern lv_group_t * g;
 static lv_obj_t * scr;
 
 #define ID_ACCE_RETURN  1
@@ -160,14 +161,14 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
 
 void lv_draw_acceleration_settings(void) {
   lv_obj_t *buttonBack = NULL, *label_Back = NULL, *buttonTurnPage = NULL, *labelTurnPage = NULL;
-  lv_obj_t *buttonPrintText = NULL, *labelPrintText = NULL, *buttonPrintValue = NULL, *labelPrintValue = NULL;
-  lv_obj_t *buttonRetraText = NULL, *labelRetraText = NULL, *buttonRetraValue = NULL, *labelRetraValue = NULL;
-  lv_obj_t *buttonTravelText = NULL, *labelTravelText = NULL, *buttonTravelValue = NULL, *labelTravelValue = NULL;
-  lv_obj_t *buttonXText = NULL, *labelXText = NULL, *buttonXValue = NULL, *labelXValue = NULL;
-  lv_obj_t *buttonYText = NULL, *labelYText = NULL, *buttonYValue = NULL, *labelYValue = NULL;
-  lv_obj_t *buttonZText = NULL, *labelZText = NULL, *buttonZValue = NULL, *labelZValue = NULL;
-  lv_obj_t *buttonE0Text = NULL, *labelE0Text = NULL, *buttonE0Value = NULL, *labelE0Value = NULL;
-  lv_obj_t *buttonE1Text = NULL, *labelE1Text = NULL, *buttonE1Value = NULL, *labelE1Value = NULL;
+  lv_obj_t *labelPrintText = NULL, *buttonPrintValue = NULL, *labelPrintValue = NULL;
+  lv_obj_t *labelRetraText = NULL, *buttonRetraValue = NULL, *labelRetraValue = NULL;
+  lv_obj_t *labelTravelText = NULL, *buttonTravelValue = NULL, *labelTravelValue = NULL;
+  lv_obj_t *labelXText = NULL, *buttonXValue = NULL, *labelXValue = NULL;
+  lv_obj_t *labelYText = NULL, *buttonYValue = NULL, *labelYValue = NULL;
+  lv_obj_t *labelZText = NULL, *buttonZValue = NULL, *labelZValue = NULL;
+  lv_obj_t *labelE0Text = NULL, *buttonE0Value = NULL, *labelE0Value = NULL;
+  lv_obj_t *labelE1Text = NULL, *buttonE1Value = NULL, *labelE1Value = NULL;
   lv_obj_t * line1 = NULL, * line2 = NULL, * line3 = NULL, * line4 = NULL;
   if (disp_state_stack._disp_state[disp_state_stack._disp_index] != ACCELERATION_UI) {
     disp_state_stack._disp_index++;
@@ -188,231 +189,202 @@ void lv_draw_acceleration_settings(void) {
 
   lv_refr_now(lv_refr_get_disp_refreshing());
 
-  LV_IMG_DECLARE(bmp_para_back);
-  // LV_IMG_DECLARE(bmp_para_arrow);
-  LV_IMG_DECLARE(bmp_para_bank);
-
   if (uiCfg.para_ui_page != 1) {
-    buttonPrintText = lv_btn_create(scr, NULL);                                 /*Add a button the current screen*/
-    lv_obj_set_pos(buttonPrintText, PARA_UI_POS_X, PARA_UI_POS_Y);              /*Set its position*/
-    lv_obj_set_size(buttonPrintText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y);     /*Set its size*/
-    lv_obj_set_event_cb(buttonPrintText, event_handler);
-    lv_btn_set_style(buttonPrintText, LV_BTN_STYLE_REL, &tft_style_label_rel);  /*Set the button's released style*/
-    lv_btn_set_style(buttonPrintText, LV_BTN_STYLE_PR, &tft_style_label_pre);   /*Set the button's pressed style*/
-    lv_btn_set_layout(buttonPrintText, LV_LAYOUT_OFF);
-    labelPrintText = lv_label_create(buttonPrintText, NULL);                    /*Add a label to the button*/
-
-    buttonPrintValue = lv_imgbtn_create(scr, NULL);
+
+    labelPrintText = lv_label_create(scr, NULL);
+    lv_obj_set_style(labelPrintText, &tft_style_label_rel);
+    lv_obj_set_pos(labelPrintText, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+    lv_label_set_text(labelPrintText, machine_menu.PrintAcceleration);
+
+    buttonPrintValue = lv_btn_create(scr, NULL);
     lv_obj_set_pos(buttonPrintValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y + PARA_UI_VALUE_V);
-    lv_obj_set_event_cb_mks(buttonPrintValue, event_handler, ID_ACCE_PRINT, "bmp_value_blank.bin", 0);
-    lv_imgbtn_set_src(buttonPrintValue, LV_BTN_STATE_REL, &bmp_para_bank);
-    lv_imgbtn_set_src(buttonPrintValue, LV_BTN_STATE_PR, &bmp_para_bank);
-    lv_imgbtn_set_style(buttonPrintValue, LV_BTN_STATE_PR, &style_para_value_pre);
-    lv_imgbtn_set_style(buttonPrintValue, LV_BTN_STATE_REL, &style_para_value_rel);
-    lv_btn_set_layout(buttonPrintValue, LV_LAYOUT_OFF);
+    lv_obj_set_size(buttonPrintValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+    lv_obj_set_event_cb_mks(buttonPrintValue, event_handler, ID_ACCE_PRINT, NULL, 0);
+    lv_btn_set_style(buttonPrintValue, LV_BTN_STYLE_REL, &style_para_value);
+    lv_btn_set_style(buttonPrintValue, LV_BTN_STYLE_PR, &style_para_value);
     labelPrintValue = lv_label_create(buttonPrintValue, NULL);
 
     line1 = lv_line_create(scr, NULL);
     lv_ex_line(line1, line_points[0]);
 
-    buttonRetraText = lv_btn_create(scr, NULL);                                 /*Add a button the current screen*/
-    lv_obj_set_pos(buttonRetraText, PARA_UI_POS_X, PARA_UI_POS_Y * 2);          /*Set its position*/
-    lv_obj_set_size(buttonRetraText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y);     /*Set its size*/
-    lv_obj_set_event_cb(buttonRetraText, event_handler);
-    lv_btn_set_style(buttonRetraText, LV_BTN_STYLE_REL, &tft_style_label_rel);  /*Set the button's released style*/
-    lv_btn_set_style(buttonRetraText, LV_BTN_STYLE_PR, &tft_style_label_pre);   /*Set the button's pressed style*/
-    lv_btn_set_layout(buttonRetraText, LV_LAYOUT_OFF);
-    labelRetraText = lv_label_create(buttonRetraText, NULL);                    /*Add a label to the button*/
+    labelRetraText = lv_label_create(scr, NULL);
+    lv_obj_set_style(labelRetraText, &tft_style_label_rel);
+    lv_obj_set_pos(labelRetraText, PARA_UI_POS_X, PARA_UI_POS_Y * 2 + 10);
+    lv_label_set_text(labelRetraText, machine_menu.RetractAcceleration);
 
-    buttonRetraValue = lv_imgbtn_create(scr, NULL);
+    buttonRetraValue = lv_btn_create(scr, NULL);
     lv_obj_set_pos(buttonRetraValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 2 + PARA_UI_VALUE_V);
-    lv_obj_set_event_cb_mks(buttonRetraValue, event_handler, ID_ACCE_RETRA, "bmp_value_blank.bin", 0);
-    lv_imgbtn_set_src(buttonRetraValue, LV_BTN_STATE_REL, &bmp_para_bank);
-    lv_imgbtn_set_src(buttonRetraValue, LV_BTN_STATE_PR, &bmp_para_bank);
-    lv_imgbtn_set_style(buttonRetraValue, LV_BTN_STATE_PR, &style_para_value_pre);
-    lv_imgbtn_set_style(buttonRetraValue, LV_BTN_STATE_REL, &style_para_value_rel);
-    lv_btn_set_layout(buttonRetraValue, LV_LAYOUT_OFF);
+    lv_obj_set_size(buttonRetraValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+    lv_obj_set_event_cb_mks(buttonRetraValue, event_handler, ID_ACCE_RETRA, NULL, 0);
+    lv_btn_set_style(buttonRetraValue, LV_BTN_STYLE_REL, &style_para_value);
+    lv_btn_set_style(buttonRetraValue, LV_BTN_STYLE_PR, &style_para_value);
     labelRetraValue = lv_label_create(buttonRetraValue, NULL);
 
     line2 = lv_line_create(scr, NULL);
     lv_ex_line(line2, line_points[1]);
 
-    buttonTravelText = lv_btn_create(scr, NULL);                                /*Add a button the current screen*/
-    lv_obj_set_pos(buttonTravelText, PARA_UI_POS_X, PARA_UI_POS_Y * 3);         /*Set its position*/
-    lv_obj_set_size(buttonTravelText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y);    /*Set its size*/
-    lv_obj_set_event_cb(buttonTravelText, event_handler);
-    lv_btn_set_style(buttonTravelText, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
-    lv_btn_set_style(buttonTravelText, LV_BTN_STYLE_PR, &tft_style_label_pre);  /*Set the button's pressed style*/
-    lv_btn_set_layout(buttonTravelText, LV_LAYOUT_OFF);
-    labelTravelText = lv_label_create(buttonTravelText, NULL);                  /*Add a label to the button*/
+    labelTravelText = lv_label_create(scr, NULL);
+    lv_obj_set_style(labelTravelText, &tft_style_label_rel);
+    lv_obj_set_pos(labelTravelText, PARA_UI_POS_X, PARA_UI_POS_Y * 3 + 10);
+    lv_label_set_text(labelTravelText, machine_menu.TravelAcceleration);
 
-    buttonTravelValue = lv_imgbtn_create(scr, NULL);
+    buttonTravelValue = lv_btn_create(scr, NULL);
     lv_obj_set_pos(buttonTravelValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 3 + PARA_UI_VALUE_V);
-    lv_obj_set_event_cb_mks(buttonTravelValue, event_handler, ID_ACCE_TRAVEL, "bmp_value_blank.bin", 0);
-    lv_imgbtn_set_src(buttonTravelValue, LV_BTN_STATE_REL, &bmp_para_bank);
-    lv_imgbtn_set_src(buttonTravelValue, LV_BTN_STATE_PR, &bmp_para_bank);
-    lv_imgbtn_set_style(buttonTravelValue, LV_BTN_STATE_PR, &style_para_value_pre);
-    lv_imgbtn_set_style(buttonTravelValue, LV_BTN_STATE_REL, &style_para_value_rel);
-    lv_btn_set_layout(buttonTravelValue, LV_LAYOUT_OFF);
+    lv_obj_set_size(buttonTravelValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+    lv_obj_set_event_cb_mks(buttonTravelValue, event_handler, ID_ACCE_TRAVEL, NULL, 0);
+    lv_btn_set_style(buttonTravelValue, LV_BTN_STYLE_REL, &style_para_value);
+    lv_btn_set_style(buttonTravelValue, LV_BTN_STYLE_PR, &style_para_value);
     labelTravelValue = lv_label_create(buttonTravelValue, NULL);
 
     line3 = lv_line_create(scr, NULL);
     lv_ex_line(line3, line_points[2]);
 
-    buttonXText = lv_btn_create(scr, NULL);                                 /*Add a button the current screen*/
-    lv_obj_set_pos(buttonXText, PARA_UI_POS_X, PARA_UI_POS_Y * 4);          /*Set its position*/
-    lv_obj_set_size(buttonXText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y);     /*Set its size*/
-    lv_obj_set_event_cb(buttonXText, event_handler);
-    lv_btn_set_style(buttonXText, LV_BTN_STYLE_REL, &tft_style_label_rel);  /*Set the button's released style*/
-    lv_btn_set_style(buttonXText, LV_BTN_STYLE_PR, &tft_style_label_pre);   /*Set the button's pressed style*/
-    lv_btn_set_layout(buttonXText, LV_LAYOUT_OFF);
-    labelXText = lv_label_create(buttonXText, NULL);                        /*Add a label to the button*/
+    labelXText = lv_label_create(scr, NULL);
+    lv_obj_set_style(labelXText, &tft_style_label_rel);
+    lv_obj_set_pos(labelXText, PARA_UI_POS_X, PARA_UI_POS_Y * 4 + 10);
+    lv_label_set_text(labelXText, machine_menu.X_Acceleration);
 
-    buttonXValue = lv_imgbtn_create(scr, NULL);
+    buttonXValue = lv_btn_create(scr, NULL);
     lv_obj_set_pos(buttonXValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 4 + PARA_UI_VALUE_V);
-    lv_obj_set_event_cb_mks(buttonXValue, event_handler, ID_ACCE_X, "bmp_value_blank.bin", 0);
-    lv_imgbtn_set_src(buttonXValue, LV_BTN_STATE_REL, &bmp_para_bank);
-    lv_imgbtn_set_src(buttonXValue, LV_BTN_STATE_PR, &bmp_para_bank);
-    lv_imgbtn_set_style(buttonXValue, LV_BTN_STATE_PR, &style_para_value_pre);
-    lv_imgbtn_set_style(buttonXValue, LV_BTN_STATE_REL, &style_para_value_rel);
-    lv_btn_set_layout(buttonXValue, LV_LAYOUT_OFF);
+    lv_obj_set_size(buttonXValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+    lv_obj_set_event_cb_mks(buttonXValue, event_handler, ID_ACCE_X, NULL, 0);
+    lv_btn_set_style(buttonXValue, LV_BTN_STYLE_REL, &style_para_value);
+    lv_btn_set_style(buttonXValue, LV_BTN_STYLE_PR, &style_para_value);
     labelXValue = lv_label_create(buttonXValue, NULL);
 
     line4 = lv_line_create(scr, NULL);
     lv_ex_line(line4, line_points[3]);
 
-    buttonTurnPage = lv_imgbtn_create(scr, NULL);
-    lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_ACCE_DOWN, "bmp_back70x40.bin", 0);
-    lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_REL, &bmp_para_back);
-    lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_PR, &bmp_para_back);
-    lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_PR, &tft_style_label_pre);
-    lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_REL, &tft_style_label_rel);
+    buttonTurnPage = lv_btn_create(scr, NULL);
+    lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_ACCE_DOWN, NULL, 0);
+    lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_REL, &style_para_back);
+    lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_PR, &style_para_back);
+
+    #if HAS_ROTARY_ENCODER
+      if (gCfgItems.encoder_enable) {
+        lv_group_add_obj(g, buttonPrintValue);
+        lv_group_add_obj(g, buttonRetraValue);
+        lv_group_add_obj(g, buttonTravelValue);
+        lv_group_add_obj(g, buttonXValue);
+        lv_group_add_obj(g, buttonTurnPage);
+      }
+    #endif
   }
   else {
-    buttonYText = lv_btn_create(scr, NULL);                                 /*Add a button the current screen*/
-    lv_obj_set_pos(buttonYText, PARA_UI_POS_X, PARA_UI_POS_Y);              /*Set its position*/
-    lv_obj_set_size(buttonYText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y);     /*Set its size*/
-    lv_obj_set_event_cb(buttonYText, event_handler);
-    lv_btn_set_style(buttonYText, LV_BTN_STYLE_REL, &tft_style_label_rel);  /*Set the button's released style*/
-    lv_btn_set_style(buttonYText, LV_BTN_STYLE_PR, &tft_style_label_pre);   /*Set the button's pressed style*/
-    lv_btn_set_layout(buttonYText, LV_LAYOUT_OFF);
-    labelYText = lv_label_create(buttonYText, NULL);                        /*Add a label to the button*/
-
-    buttonYValue = lv_imgbtn_create(scr, NULL);
+    labelYText = lv_label_create(scr, NULL);
+    lv_obj_set_style(labelYText, &tft_style_label_rel);
+    lv_obj_set_pos(labelYText, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+    lv_label_set_text(labelYText, machine_menu.Y_Acceleration);
+
+    buttonYValue = lv_btn_create(scr, NULL);
     lv_obj_set_pos(buttonYValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y + PARA_UI_VALUE_V);
-    lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_ACCE_Y, "bmp_value_blank.bin", 0);
-    lv_imgbtn_set_src(buttonYValue, LV_BTN_STATE_REL, &bmp_para_bank);
-    lv_imgbtn_set_src(buttonYValue, LV_BTN_STATE_PR, &bmp_para_bank);
-    lv_imgbtn_set_style(buttonYValue, LV_BTN_STATE_PR, &style_para_value_pre);
-    lv_imgbtn_set_style(buttonYValue, LV_BTN_STATE_REL, &style_para_value_rel);
-    lv_btn_set_layout(buttonYValue, LV_LAYOUT_OFF);
+    lv_obj_set_size(buttonYValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+    lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_ACCE_Y, NULL, 0);
+    lv_btn_set_style(buttonYValue, LV_BTN_STYLE_REL, &style_para_value);
+    lv_btn_set_style(buttonYValue, LV_BTN_STYLE_PR, &style_para_value);
     labelYValue = lv_label_create(buttonYValue, NULL);
 
     line1 = lv_line_create(scr, NULL);
     lv_ex_line(line1, line_points[0]);
 
-    buttonZText = lv_btn_create(scr, NULL);                                 /*Add a button the current screen*/
-    lv_obj_set_pos(buttonZText, PARA_UI_POS_X, PARA_UI_POS_Y * 2);          /*Set its position*/
-    lv_obj_set_size(buttonZText, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y);     /*Set its size*/
-    lv_obj_set_event_cb(buttonZText, event_handler);
-    lv_btn_set_style(buttonZText, LV_BTN_STYLE_REL, &tft_style_label_rel);  /*Set the button's released style*/
-    lv_btn_set_style(buttonZText, LV_BTN_STYLE_PR, &tft_style_label_pre);   /*Set the button's pressed style*/
-    lv_btn_set_layout(buttonZText, LV_LAYOUT_OFF);
-    labelZText = lv_label_create(buttonZText, NULL);                        /*Add a label to the button*/
+    labelZText = lv_label_create(scr, NULL);
+    lv_obj_set_style(labelZText, &tft_style_label_rel);
+    lv_obj_set_pos(labelZText, PARA_UI_POS_X, PARA_UI_POS_Y * 2 + 10);
+    lv_label_set_text(labelZText, machine_menu.Z_Acceleration);
 
-    buttonZValue = lv_imgbtn_create(scr, NULL);
+    buttonZValue = lv_btn_create(scr, NULL);
     lv_obj_set_pos(buttonZValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 2 + PARA_UI_VALUE_V);
-    lv_obj_set_event_cb_mks(buttonZValue, event_handler, ID_ACCE_Z, "bmp_value_blank.bin", 0);
-    lv_imgbtn_set_src(buttonZValue, LV_BTN_STATE_REL, &bmp_para_bank);
-    lv_imgbtn_set_src(buttonZValue, LV_BTN_STATE_PR, &bmp_para_bank);
-    lv_imgbtn_set_style(buttonZValue, LV_BTN_STATE_PR, &style_para_value_pre);
-    lv_imgbtn_set_style(buttonZValue, LV_BTN_STATE_REL, &style_para_value_rel);
-    lv_btn_set_layout(buttonZValue, LV_LAYOUT_OFF);
+    lv_obj_set_size(buttonZValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);    lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_ACCE_Y, NULL, 0);
+    lv_obj_set_event_cb_mks(buttonZValue, event_handler, ID_ACCE_Z, NULL, 0);
+    lv_btn_set_style(buttonZValue, LV_BTN_STYLE_REL, &style_para_value);
+    lv_btn_set_style(buttonZValue, LV_BTN_STYLE_PR, &style_para_value);
     labelZValue = lv_label_create(buttonZValue, NULL);
 
+
     line2 = lv_line_create(scr, NULL);
     lv_ex_line(line2, line_points[1]);
 
-    buttonE0Text = lv_btn_create(scr, NULL);                                /*Add a button the current screen*/
-    lv_obj_set_pos(buttonE0Text, PARA_UI_POS_X, PARA_UI_POS_Y * 3);         /*Set its position*/
-    lv_obj_set_size(buttonE0Text, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y);    /*Set its size*/
-    lv_obj_set_event_cb(buttonE0Text, event_handler);
-    lv_btn_set_style(buttonE0Text, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
-    lv_btn_set_style(buttonE0Text, LV_BTN_STYLE_PR, &tft_style_label_pre);  /*Set the button's pressed style*/
-    lv_btn_set_layout(buttonE0Text, LV_LAYOUT_OFF);
-    labelE0Text = lv_label_create(buttonE0Text, NULL);                      /*Add a label to the button*/
+    labelE0Text = lv_label_create(scr, NULL);
+    lv_obj_set_style(labelE0Text, &tft_style_label_rel);
+    lv_obj_set_pos(labelE0Text, PARA_UI_POS_X, PARA_UI_POS_Y * 3 + 10);
+    lv_label_set_text(labelE0Text, machine_menu.E0_Acceleration);
 
-    buttonE0Value = lv_imgbtn_create(scr, NULL);
+    buttonE0Value = lv_btn_create(scr, NULL);
     lv_obj_set_pos(buttonE0Value, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 3 + PARA_UI_VALUE_V);
-    lv_obj_set_event_cb_mks(buttonE0Value, event_handler, ID_ACCE_E0, "bmp_value_blank.bin", 0);
-    lv_imgbtn_set_src(buttonE0Value, LV_BTN_STATE_REL, &bmp_para_bank);
-    lv_imgbtn_set_src(buttonE0Value, LV_BTN_STATE_PR, &bmp_para_bank);
-    lv_imgbtn_set_style(buttonE0Value, LV_BTN_STATE_PR, &style_para_value_pre);
-    lv_imgbtn_set_style(buttonE0Value, LV_BTN_STATE_REL, &style_para_value_rel);
-    lv_btn_set_layout(buttonE0Value, LV_LAYOUT_OFF);
+    lv_obj_set_size(buttonE0Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);    lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_ACCE_Y, NULL, 0);
+    lv_obj_set_event_cb_mks(buttonE0Value, event_handler, ID_ACCE_E0, NULL, 0);
+    lv_btn_set_style(buttonE0Value, LV_BTN_STYLE_REL, &style_para_value);
+    lv_btn_set_style(buttonE0Value, LV_BTN_STYLE_PR, &style_para_value);
     labelE0Value = lv_label_create(buttonE0Value, NULL);
 
+
     line3 = lv_line_create(scr, NULL);
     lv_ex_line(line3, line_points[2]);
 
-    buttonE1Text = lv_btn_create(scr, NULL);                                /*Add a button the current screen*/
-    lv_obj_set_pos(buttonE1Text, PARA_UI_POS_X, PARA_UI_POS_Y * 4);         /*Set its position*/
-    lv_obj_set_size(buttonE1Text, PARA_UI_VALUE_SIZE_X, PARA_UI_SIZE_Y);    /*Set its size*/
-    lv_obj_set_event_cb(buttonE1Text, event_handler);
-    lv_btn_set_style(buttonE1Text, LV_BTN_STYLE_REL, &tft_style_label_rel); /*Set the button's released style*/
-    lv_btn_set_style(buttonE1Text, LV_BTN_STYLE_PR, &tft_style_label_pre);  /*Set the button's pressed style*/
-    lv_btn_set_layout(buttonE1Text, LV_LAYOUT_OFF);
-    labelE1Text = lv_label_create(buttonE1Text, NULL);                      /*Add a label to the button*/
+    labelE1Text = lv_label_create(scr, NULL);
+    lv_obj_set_style(labelE1Text, &tft_style_label_rel);
+    lv_obj_set_pos(labelE1Text, PARA_UI_POS_X, PARA_UI_POS_Y * 4 + 10);
+    lv_label_set_text(labelE1Text, machine_menu.E1_Acceleration);
 
-    buttonE1Value = lv_imgbtn_create(scr, NULL);
+    buttonE1Value = lv_btn_create(scr, NULL);
     lv_obj_set_pos(buttonE1Value, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 4 + PARA_UI_VALUE_V);
-    lv_obj_set_event_cb_mks(buttonE1Value, event_handler, ID_ACCE_E1, "bmp_value_blank.bin", 0);
-    lv_imgbtn_set_src(buttonE1Value, LV_BTN_STATE_REL, &bmp_para_bank);
-    lv_imgbtn_set_src(buttonE1Value, LV_BTN_STATE_PR, &bmp_para_bank);
-    lv_imgbtn_set_style(buttonE1Value, LV_BTN_STATE_PR, &style_para_value_pre);
-    lv_imgbtn_set_style(buttonE1Value, LV_BTN_STATE_REL, &style_para_value_rel);
-    lv_btn_set_layout(buttonE1Value, LV_LAYOUT_OFF);
+    lv_obj_set_size(buttonE1Value, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);    lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_ACCE_Y, NULL, 0);
+    lv_obj_set_event_cb_mks(buttonE1Value, event_handler, ID_ACCE_E1, NULL, 0);
+    lv_btn_set_style(buttonE1Value, LV_BTN_STYLE_REL, &style_para_value);
+    lv_btn_set_style(buttonE1Value, LV_BTN_STYLE_PR, &style_para_value);
     labelE1Value = lv_label_create(buttonE1Value, NULL);
 
+
     line4 = lv_line_create(scr, NULL);
     lv_ex_line(line4, line_points[3]);
 
-    buttonTurnPage = lv_imgbtn_create(scr, NULL);
-    lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_ACCE_UP, "bmp_back70x40.bin", 0);
-    lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_REL, &bmp_para_back);
-    lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_PR, &bmp_para_back);
-    lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_PR, &tft_style_label_pre);
-    lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_REL, &tft_style_label_rel);
+    buttonTurnPage = lv_btn_create(scr, NULL);
+    lv_obj_set_event_cb_mks(buttonTurnPage, event_handler, ID_ACCE_UP, NULL, 0);
+    //lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_REL, "F:/bmp_back70x40.bin");
+    //lv_imgbtn_set_src(buttonTurnPage, LV_BTN_STATE_PR, "F:/bmp_back70x40.bin");
+    //lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_PR, &tft_style_label_pre);
+    //lv_imgbtn_set_style(buttonTurnPage, LV_BTN_STATE_REL, &tft_style_label_rel);
+    lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_REL, &style_para_back);
+    lv_btn_set_style(buttonTurnPage, LV_BTN_STYLE_PR, &style_para_back);
+
+    #if HAS_ROTARY_ENCODER
+      if (gCfgItems.encoder_enable) {
+        lv_group_add_obj(g, buttonYValue);
+        lv_group_add_obj(g, buttonZValue);
+        lv_group_add_obj(g, buttonE0Value);
+        lv_group_add_obj(g, buttonE1Value);
+        lv_group_add_obj(g, buttonTurnPage);
+      }
+    #endif
   }
 
+  //lv_obj_set_pos(buttonTurnPage, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y);
+  //lv_btn_set_layout(buttonTurnPage, LV_LAYOUT_OFF);
+  //labelTurnPage = lv_label_create(buttonTurnPage, NULL);
   lv_obj_set_pos(buttonTurnPage, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y);
-  lv_btn_set_layout(buttonTurnPage, LV_LAYOUT_OFF);
+  lv_obj_set_size(buttonTurnPage, PARA_UI_BACK_BTN_X_SIZE, PARA_UI_BACK_BTN_Y_SIZE);
   labelTurnPage = lv_label_create(buttonTurnPage, NULL);
 
-  buttonBack = lv_imgbtn_create(scr, NULL);
-  lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_ACCE_RETURN, "bmp_back70x40.bin", 0);
-  lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_para_back);
-  lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_para_back);
-  lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
-  lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
-
+  buttonBack = lv_btn_create(scr, NULL);
+  lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_ACCE_RETURN, NULL, 0);
+  //lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_back70x40.bin");
+  //lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_back70x40.bin");
+  //lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
+  //lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
+  lv_btn_set_style(buttonBack, LV_BTN_STYLE_REL, &style_para_back);
+  lv_btn_set_style(buttonBack, LV_BTN_STYLE_PR, &style_para_back);
   lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
-  lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
+  lv_obj_set_size(buttonBack, PARA_UI_BACK_BTN_X_SIZE, PARA_UI_BACK_BTN_Y_SIZE);
   label_Back = lv_label_create(buttonBack, NULL);
+  #if HAS_ROTARY_ENCODER
+    if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonBack);
+  #endif
+
+  //lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
+  //lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
 
   if (gCfgItems.multiple_language != 0) {
     if (uiCfg.para_ui_page != 1) {
-      lv_label_set_text(labelPrintText, machine_menu.PrintAcceleration);
-      lv_obj_align(labelPrintText, buttonPrintText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
-      lv_label_set_text(labelRetraText, machine_menu.RetractAcceleration);
-      lv_obj_align(labelRetraText, buttonRetraText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
-      lv_label_set_text(labelTravelText, machine_menu.TravelAcceleration);
-      lv_obj_align(labelTravelText, buttonTravelText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
-      lv_label_set_text(labelXText, machine_menu.X_Acceleration);
-      lv_obj_align(labelXText, buttonXText, LV_ALIGN_IN_LEFT_MID, 0, 0);
 
       lv_label_set_text(labelTurnPage, machine_menu.next);
       lv_obj_align(labelTurnPage, buttonTurnPage, LV_ALIGN_CENTER, 0, 0);
@@ -438,17 +410,6 @@ void lv_draw_acceleration_settings(void) {
       lv_obj_align(labelXValue, buttonXValue, LV_ALIGN_CENTER, 0, 0);
     }
     else {
-      lv_label_set_text(labelYText, machine_menu.Y_Acceleration);
-      lv_obj_align(labelYText, buttonYText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
-      lv_label_set_text(labelZText, machine_menu.Z_Acceleration);
-      lv_obj_align(labelZText, buttonZText, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
-      lv_label_set_text(labelE0Text, machine_menu.E0_Acceleration);
-      lv_obj_align(labelE0Text, buttonE0Text, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
-      lv_label_set_text(labelE1Text, machine_menu.E1_Acceleration);
-      lv_obj_align(labelE1Text, buttonE1Text, LV_ALIGN_IN_LEFT_MID, 0, 0);
 
       lv_label_set_text(labelTurnPage, machine_menu.previous);
       lv_obj_align(labelTurnPage, buttonTurnPage, LV_ALIGN_CENTER, 0, 0);
@@ -478,6 +439,11 @@ void lv_draw_acceleration_settings(void) {
   }
 }
 
-void lv_clear_acceleration_settings() { lv_obj_del(scr); }
+void lv_clear_acceleration_settings() {
+  #if HAS_ROTARY_ENCODER
+    if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+  #endif
+  lv_obj_del(scr);
+}
 
 #endif // HAS_TFT_LVGL_UI

+ 214 - 20
Marlin/src/lcd/extui/lib/mks_ui/draw_advance_settings.cpp

@@ -28,11 +28,18 @@
 
 #include "../../../../MarlinCore.h"
 
+extern lv_group_t * g;
 static lv_obj_t * scr;
 
-#define ID_ADVANCE_RETURN   1
-#define ID_PAUSE_POS        2
-#define ID_PAUSE_POS_ARROW  3
+#define ID_ADVANCE_RETURN           1
+#define ID_PAUSE_POS                2
+#define ID_PAUSE_POS_ARROW          3
+#define ID_WIFI_PARA                4
+#define ID_WIFI_PARA_ARROW          5
+#define ID_FILAMENT_SETTINGS        6
+#define ID_FILAMENT_SETTINGS_ARROW  7
+#define ID_ENCODER_SETTINGS         8
+#define ID_ENCODER_SETTINGS_ARROW   9
 
 static void event_handler(lv_obj_t * obj, lv_event_t event) {
   switch (obj->mks_obj_id) {
@@ -63,13 +70,79 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
         lv_draw_pause_position();
       }
       break;
+    case ID_FILAMENT_SETTINGS:
+      if (event == LV_EVENT_CLICKED) {
+
+      }
+      else if (event == LV_EVENT_RELEASED) {
+        lv_clear_advance_settings();
+        lv_draw_filament_settings();
+      }
+      break;
+    case ID_FILAMENT_SETTINGS_ARROW:
+      if (event == LV_EVENT_CLICKED) {
+
+      }
+      else if (event == LV_EVENT_RELEASED) {
+        lv_clear_advance_settings();
+        lv_draw_filament_settings();
+      }
+      break;
+    #if ENABLED(USE_WIFI_FUNCTION)
+      case ID_WIFI_PARA:
+      if (event == LV_EVENT_CLICKED) {
+
+      }
+      else if (event == LV_EVENT_RELEASED) {
+        lv_clear_advance_settings();
+        lv_draw_wifi_settings();
+      }
+      break;
+      case ID_WIFI_PARA_ARROW:
+      if (event == LV_EVENT_CLICKED) {
+
+      }
+      else if (event == LV_EVENT_RELEASED) {
+        lv_clear_advance_settings();
+        lv_draw_wifi_settings();
+      }
+      break;
+    #endif
+    #if HAS_ROTARY_ENCODER
+      case ID_ENCODER_SETTINGS:
+        if (event == LV_EVENT_CLICKED) {
+
+        }
+        else if (event == LV_EVENT_RELEASED) {
+          lv_clear_advance_settings();
+          lv_draw_encoder_settings();
+        }
+        break;
+      case ID_ENCODER_SETTINGS_ARROW:
+        if (event == LV_EVENT_CLICKED) {
+
+        }
+        else if (event == LV_EVENT_RELEASED) {
+          lv_clear_advance_settings();
+          lv_draw_encoder_settings();
+        }
+        break;
+    #endif
   }
 }
 
 void lv_draw_advance_settings(void) {
   lv_obj_t *buttonBack, *label_Back;
   lv_obj_t *buttonPausePos, *labelPausePos, *buttonPausePosNarrow;
-  lv_obj_t * line1;
+  lv_obj_t *buttonFilamentSettings, *labelFilamentSettings, *buttonFilamentSettingsNarrow;
+  lv_obj_t * line1,* line2;
+  #if ENABLED(USE_WIFI_FUNCTION)
+    lv_obj_t *buttonWifiSet,*labelWifiSet,*buttonWifiSetNarrow;
+  #endif
+  #if HAS_ROTARY_ENCODER
+    lv_obj_t *buttonEcoder,*labelEcoder,*buttonEcoderNarrow;
+  #endif
+
   if (disp_state_stack._disp_state[disp_state_stack._disp_index] != ADVANCED_UI) {
     disp_state_stack._disp_index++;
     disp_state_stack._disp_state[disp_state_stack._disp_index] = ADVANCED_UI;
@@ -89,24 +162,24 @@ void lv_draw_advance_settings(void) {
 
   lv_refr_now(lv_refr_get_disp_refreshing());
 
-  LV_IMG_DECLARE(bmp_para_back);
-  LV_IMG_DECLARE(bmp_para_arrow);
-
-  buttonPausePos = lv_btn_create(scr, NULL);   /*Add a button the current screen*/
-  lv_obj_set_pos(buttonPausePos, PARA_UI_POS_X, PARA_UI_POS_Y);                         /*Set its position*/
-  lv_obj_set_size(buttonPausePos, PARA_UI_SIZE_X, PARA_UI_SIZE_Y);                       /*Set its size*/
+  buttonPausePos = lv_btn_create(scr, NULL);
+  lv_obj_set_pos(buttonPausePos, PARA_UI_POS_X, PARA_UI_POS_Y);
+  lv_obj_set_size(buttonPausePos, PARA_UI_SIZE_X, PARA_UI_SIZE_Y);
   //lv_obj_set_event_cb(buttonMachine, event_handler);
   lv_obj_set_event_cb_mks(buttonPausePos, event_handler, ID_PAUSE_POS, NULL, 0);
-  lv_btn_set_style(buttonPausePos, LV_BTN_STYLE_REL, &tft_style_label_rel);  /*Set the button's released style*/
-  lv_btn_set_style(buttonPausePos, LV_BTN_STYLE_PR, &tft_style_label_pre);    /*Set the button's pressed style*/
+  lv_btn_set_style(buttonPausePos, LV_BTN_STYLE_REL, &tft_style_label_rel);
+  lv_btn_set_style(buttonPausePos, LV_BTN_STYLE_PR, &tft_style_label_pre);
   lv_btn_set_layout(buttonPausePos, LV_LAYOUT_OFF);
-  labelPausePos = lv_label_create(buttonPausePos, NULL);        /*Add a label to the button*/
+  labelPausePos = lv_label_create(buttonPausePos, NULL);
+  #if HAS_ROTARY_ENCODER
+    if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonPausePos);
+  #endif
 
   buttonPausePosNarrow = lv_imgbtn_create(scr, NULL);
   lv_obj_set_pos(buttonPausePosNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y + PARA_UI_ARROW_V);
-  lv_obj_set_event_cb_mks(buttonPausePosNarrow, event_handler, ID_PAUSE_POS_ARROW, "bmp_arrow.bin", 0);
-  lv_imgbtn_set_src(buttonPausePosNarrow, LV_BTN_STATE_REL, &bmp_para_arrow);
-  lv_imgbtn_set_src(buttonPausePosNarrow, LV_BTN_STATE_PR, &bmp_para_arrow);
+  lv_obj_set_event_cb_mks(buttonPausePosNarrow, event_handler, ID_PAUSE_POS_ARROW, NULL, 0);
+  lv_imgbtn_set_src(buttonPausePosNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+  lv_imgbtn_set_src(buttonPausePosNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
   lv_imgbtn_set_style(buttonPausePosNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
   lv_imgbtn_set_style(buttonPausePosNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
   lv_btn_set_layout(buttonPausePosNarrow, LV_LAYOUT_OFF);
@@ -114,13 +187,117 @@ void lv_draw_advance_settings(void) {
   line1 = lv_line_create(lv_scr_act(), NULL);
   lv_ex_line(line1, line_points[0]);
 
+  buttonFilamentSettings = lv_btn_create(scr, NULL);
+  lv_obj_set_pos(buttonFilamentSettings, PARA_UI_POS_X, PARA_UI_POS_Y*2);
+  lv_obj_set_size(buttonFilamentSettings, PARA_UI_SIZE_X, PARA_UI_SIZE_Y);
+  lv_obj_set_event_cb_mks(buttonFilamentSettings, event_handler, ID_FILAMENT_SETTINGS, NULL, 0);
+  lv_btn_set_style(buttonFilamentSettings, LV_BTN_STYLE_REL, &tft_style_label_rel);
+  lv_btn_set_style(buttonFilamentSettings, LV_BTN_STYLE_PR, &tft_style_label_pre);
+  lv_btn_set_layout(buttonFilamentSettings, LV_LAYOUT_OFF);
+  labelFilamentSettings = lv_label_create(buttonFilamentSettings, NULL);
+  #if HAS_ROTARY_ENCODER
+    if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonFilamentSettings);
+  #endif
+
+  buttonFilamentSettingsNarrow = lv_imgbtn_create(scr, NULL);
+  lv_obj_set_pos(buttonFilamentSettingsNarrow, PARA_UI_POS_X + PARA_UI_SIZE_X, PARA_UI_POS_Y*2 + PARA_UI_ARROW_V);
+  lv_obj_set_event_cb_mks(buttonFilamentSettingsNarrow, event_handler, ID_FILAMENT_SETTINGS_ARROW, NULL, 0);
+  lv_imgbtn_set_src(buttonFilamentSettingsNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+  lv_imgbtn_set_src(buttonFilamentSettingsNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
+  lv_imgbtn_set_style(buttonFilamentSettingsNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
+  lv_imgbtn_set_style(buttonFilamentSettingsNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
+  lv_btn_set_layout(buttonFilamentSettingsNarrow, LV_LAYOUT_OFF);
+
+  line2 = lv_line_create(lv_scr_act(), NULL);
+  lv_ex_line(line2, line_points[1]);
+
+  #if ENABLED(USE_WIFI_FUNCTION)
+
+    buttonWifiSet = lv_btn_create(scr, NULL);     /*Add a button the current screen*/
+    lv_obj_set_pos(buttonWifiSet, PARA_UI_POS_X,PARA_UI_POS_Y*3);
+    lv_obj_set_size(buttonWifiSet, PARA_UI_SIZE_X,PARA_UI_SIZE_Y);
+    lv_obj_set_event_cb_mks(buttonWifiSet, event_handler,ID_WIFI_PARA,NULL,0);
+    lv_btn_set_style(buttonWifiSet, LV_BTN_STYLE_REL, &tft_style_label_rel);
+    lv_btn_set_style(buttonWifiSet, LV_BTN_STYLE_PR, &tft_style_label_pre);
+    lv_btn_set_layout(buttonWifiSet, LV_LAYOUT_OFF);
+    labelWifiSet = lv_label_create(buttonWifiSet, NULL);
+    #if HAS_ROTARY_ENCODER
+      if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonWifiSet);
+    #endif
+
+    buttonWifiSetNarrow = lv_imgbtn_create(scr, NULL);
+    lv_obj_set_pos(buttonWifiSetNarrow,PARA_UI_POS_X+PARA_UI_SIZE_X,PARA_UI_POS_Y*3+PARA_UI_ARROW_V);
+    lv_obj_set_event_cb_mks(buttonWifiSetNarrow, event_handler,ID_WIFI_PARA_ARROW, NULL,0);
+    lv_imgbtn_set_src(buttonWifiSetNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+    lv_imgbtn_set_src(buttonWifiSetNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
+    lv_imgbtn_set_style(buttonWifiSetNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
+    lv_imgbtn_set_style(buttonWifiSetNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
+    lv_btn_set_layout(buttonWifiSetNarrow, LV_LAYOUT_OFF);
+
+    lv_obj_t * line3 = lv_line_create(scr, NULL);
+    lv_ex_line(line3,line_points[2]);
+
+    #if HAS_ROTARY_ENCODER
+      buttonEcoder = lv_btn_create(scr, NULL);     /*Add a button the current screen*/
+      lv_obj_set_pos(buttonEcoder, PARA_UI_POS_X,PARA_UI_POS_Y*4);
+      lv_obj_set_size(buttonEcoder, PARA_UI_SIZE_X,PARA_UI_SIZE_Y);
+      lv_obj_set_event_cb_mks(buttonEcoder, event_handler,ID_ENCODER_SETTINGS,NULL,0);
+      lv_btn_set_style(buttonEcoder, LV_BTN_STYLE_REL, &tft_style_label_rel);
+      lv_btn_set_style(buttonEcoder, LV_BTN_STYLE_PR, &tft_style_label_pre);
+      lv_btn_set_layout(buttonEcoder, LV_LAYOUT_OFF);
+      labelEcoder = lv_label_create(buttonEcoder, NULL);
+
+      if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonEcoder);
+
+      buttonEcoderNarrow = lv_imgbtn_create(scr, NULL);
+      lv_obj_set_pos(buttonEcoderNarrow,PARA_UI_POS_X+PARA_UI_SIZE_X,PARA_UI_POS_Y*4+PARA_UI_ARROW_V);
+      lv_obj_set_event_cb_mks(buttonEcoderNarrow, event_handler,ID_ENCODER_SETTINGS_ARROW, NULL,0);
+      lv_imgbtn_set_src(buttonEcoderNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+      lv_imgbtn_set_src(buttonEcoderNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
+      lv_imgbtn_set_style(buttonEcoderNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
+      lv_imgbtn_set_style(buttonEcoderNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
+      lv_btn_set_layout(buttonEcoderNarrow, LV_LAYOUT_OFF);
+
+      lv_obj_t * line4 = lv_line_create(scr, NULL);
+      lv_ex_line(line4,line_points[3]);
+    #endif
+
+  #elif HAS_ROTARY_ENCODER
+    buttonEcoder = lv_btn_create(scr, NULL);     /*Add a button the current screen*/
+    lv_obj_set_pos(buttonEcoder, PARA_UI_POS_X,PARA_UI_POS_Y*3);
+    lv_obj_set_size(buttonEcoder, PARA_UI_SIZE_X,PARA_UI_SIZE_Y);
+    lv_obj_set_event_cb_mks(buttonEcoder, event_handler,ID_ENCODER_SETTINGS,NULL,0);
+    lv_btn_set_style(buttonEcoder, LV_BTN_STYLE_REL, &tft_style_label_rel);
+    lv_btn_set_style(buttonEcoder, LV_BTN_STYLE_PR, &tft_style_label_pre);
+    lv_btn_set_layout(buttonEcoder, LV_LAYOUT_OFF);
+    labelEcoder = lv_label_create(buttonEcoder, NULL);
+
+    if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonEcoder);
+
+    buttonEcoderNarrow = lv_imgbtn_create(scr, NULL);
+    lv_obj_set_pos(buttonEcoderNarrow,PARA_UI_POS_X+PARA_UI_SIZE_X,PARA_UI_POS_Y*3+PARA_UI_ARROW_V);
+    lv_obj_set_event_cb_mks(buttonEcoderNarrow, event_handler,ID_ENCODER_SETTINGS_ARROW, NULL,0);
+    lv_imgbtn_set_src(buttonEcoderNarrow, LV_BTN_STATE_REL, "F:/bmp_arrow.bin");
+    lv_imgbtn_set_src(buttonEcoderNarrow, LV_BTN_STATE_PR, "F:/bmp_arrow.bin");
+    lv_imgbtn_set_style(buttonEcoderNarrow, LV_BTN_STATE_PR, &tft_style_label_pre);
+    lv_imgbtn_set_style(buttonEcoderNarrow, LV_BTN_STATE_REL, &tft_style_label_rel);
+    lv_btn_set_layout(buttonEcoderNarrow, LV_LAYOUT_OFF);
+
+    lv_obj_t * line3 = lv_line_create(scr, NULL);
+    lv_ex_line(line3,line_points[2]);
+  #endif
+
   buttonBack = lv_imgbtn_create(scr, NULL);
-  lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_ADVANCE_RETURN, "bmp_back70x40.bin", 0);
-  lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_para_back);
-  lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_para_back);
+  lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_ADVANCE_RETURN, NULL, 0);
+  lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_back70x40.bin");
+  lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_back70x40.bin");
   lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
   lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
 
+  #if HAS_ROTARY_ENCODER
+    if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonBack);
+  #endif
+
   lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
   lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
   label_Back = lv_label_create(buttonBack, NULL);
@@ -131,10 +308,27 @@ void lv_draw_advance_settings(void) {
 
     lv_label_set_text(labelPausePos, machine_menu.PausePosition);
     lv_obj_align(labelPausePos, buttonPausePos, LV_ALIGN_IN_LEFT_MID, 0, 0);
+
+    lv_label_set_text(labelFilamentSettings, machine_menu.FilamentConf);
+    lv_obj_align(labelFilamentSettings, buttonFilamentSettings, LV_ALIGN_IN_LEFT_MID, 0, 0);
+
+    #if ENABLED(USE_WIFI_FUNCTION)
+      lv_label_set_text(labelWifiSet, machine_menu.WifiSettings);
+      lv_obj_align(labelWifiSet, buttonWifiSet, LV_ALIGN_IN_LEFT_MID,0, 0);
+    #endif
+    #if HAS_ROTARY_ENCODER
+      lv_label_set_text(labelEcoder, machine_menu.EncoderSettings);
+      lv_obj_align(labelEcoder, buttonEcoder, LV_ALIGN_IN_LEFT_MID,0, 0);
+    #endif
   }
 
 }
 
-void lv_clear_advance_settings() { lv_obj_del(scr); }
+void lv_clear_advance_settings() {
+  #if HAS_ROTARY_ENCODER
+    if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+  #endif
+  lv_obj_del(scr);
+}
 
 #endif // HAS_TFT_LVGL_UI

+ 203 - 0
Marlin/src/lcd/extui/lib/mks_ui/draw_auto_level_offset_settings.cpp

@@ -0,0 +1,203 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+#include "../../../../inc/MarlinConfigPre.h"
+
+#if BOTH(HAS_TFT_LVGL_UI, HAS_BED_PROBE)
+
+#include "lv_conf.h"
+#include "draw_ui.h"
+
+#include "../../../../MarlinCore.h"
+#include "../../../../module/planner.h"
+#include "../../../../module/probe.h"
+
+extern lv_group_t * g;
+static lv_obj_t * scr;
+
+#define ID_OFFSET_RETURN   1
+#define ID_OFFSET_X        2
+#define ID_OFFSET_Y        3
+#define ID_OFFSET_Z        4
+
+static void event_handler(lv_obj_t * obj, lv_event_t event) {
+  switch (obj->mks_obj_id) {
+    case ID_OFFSET_RETURN:
+      if (event == LV_EVENT_CLICKED) {
+
+      }
+      else if (event == LV_EVENT_RELEASED) {
+        lv_clear_auto_level_offset_settings();
+        draw_return_ui();
+      }
+      break;
+    case ID_OFFSET_X:
+      if (event == LV_EVENT_CLICKED) {
+
+      }
+      else if (event == LV_EVENT_RELEASED) {
+        value = x_offset;
+        lv_clear_auto_level_offset_settings();
+        lv_draw_number_key();
+      }
+      break;
+    case ID_OFFSET_Y:
+      if (event == LV_EVENT_CLICKED) {
+
+      }
+      else if (event == LV_EVENT_RELEASED) {
+        value = y_offset;
+        lv_clear_auto_level_offset_settings();
+        lv_draw_number_key();
+      }
+      break;
+    case ID_OFFSET_Z:
+      if (event == LV_EVENT_CLICKED) {
+
+      }
+      else if (event == LV_EVENT_RELEASED) {
+        value = z_offset;
+        lv_clear_auto_level_offset_settings();
+        lv_draw_number_key();
+      }
+      break;
+  }
+}
+
+void lv_draw_auto_level_offset_settings(void) {
+  lv_obj_t *buttonBack = NULL, *label_Back = NULL;
+  lv_obj_t *labelXText = NULL, *buttonXValue = NULL, *labelXValue = NULL;
+  lv_obj_t *labelYText = NULL, *buttonYValue = NULL, *labelYValue = NULL;
+  lv_obj_t *labelZText = NULL, *buttonZValue = NULL, *labelZValue = NULL;
+  lv_obj_t * line1 = NULL, * line2 = NULL, * line3 = NULL;
+  if (disp_state_stack._disp_state[disp_state_stack._disp_index] != NOZZLE_PROBE_OFFSET_UI) {
+    disp_state_stack._disp_index++;
+    disp_state_stack._disp_state[disp_state_stack._disp_index] = NOZZLE_PROBE_OFFSET_UI;
+  }
+  disp_state = NOZZLE_PROBE_OFFSET_UI;
+
+  scr = lv_obj_create(NULL, NULL);
+
+  lv_obj_set_style(scr, &tft_style_scr);
+  lv_scr_load(scr);
+  lv_obj_clean(scr);
+
+  lv_obj_t * title = lv_label_create(scr, NULL);
+  lv_obj_set_style(title, &tft_style_label_rel);
+  lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
+  lv_label_set_text(title, machine_menu.OffsetConfTitle);
+
+  lv_refr_now(lv_refr_get_disp_refreshing());
+
+  labelXText = lv_label_create(scr, NULL);
+  lv_obj_set_style(labelXText, &tft_style_label_rel);
+  lv_obj_set_pos(labelXText, PARA_UI_POS_X, PARA_UI_POS_Y + 10);
+  lv_label_set_text(labelXText, machine_menu.Xoffset);
+
+  buttonXValue = lv_btn_create(scr, NULL);
+  lv_obj_set_pos(buttonXValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y + PARA_UI_VALUE_V_2);
+  lv_obj_set_size(buttonXValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+  lv_obj_set_event_cb_mks(buttonXValue, event_handler, ID_OFFSET_X, NULL, 0);
+  lv_btn_set_style(buttonXValue, LV_BTN_STYLE_REL, &style_para_value);
+  lv_btn_set_style(buttonXValue, LV_BTN_STYLE_PR, &style_para_value);
+  labelXValue = lv_label_create(buttonXValue, NULL);
+
+  line1 = lv_line_create(scr, NULL);
+  lv_ex_line(line1, line_points[0]);
+
+  labelYText = lv_label_create(scr, NULL);
+  lv_obj_set_style(labelYText, &tft_style_label_rel);
+  lv_obj_set_pos(labelYText, PARA_UI_POS_X, PARA_UI_POS_Y * 2 + 10);
+  lv_label_set_text(labelYText, machine_menu.Yoffset);
+
+  buttonYValue = lv_btn_create(scr, NULL);
+  lv_obj_set_pos(buttonYValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 2 + PARA_UI_VALUE_V_2);
+  lv_obj_set_size(buttonYValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+  lv_obj_set_event_cb_mks(buttonYValue, event_handler, ID_OFFSET_Y, NULL, 0);
+  lv_btn_set_style(buttonYValue, LV_BTN_STYLE_REL, &style_para_value);
+  lv_btn_set_style(buttonYValue, LV_BTN_STYLE_PR, &style_para_value);
+  labelYValue = lv_label_create(buttonYValue, NULL);
+
+  line2 = lv_line_create(scr, NULL);
+  lv_ex_line(line2, line_points[1]);
+
+  labelZText = lv_label_create(scr, NULL);
+  lv_obj_set_style(labelZText, &tft_style_label_rel);
+  lv_obj_set_pos(labelZText, PARA_UI_POS_X, PARA_UI_POS_Y * 3 + 10);
+  lv_label_set_text(labelZText, machine_menu.Zoffset);
+
+  buttonZValue = lv_btn_create(scr, NULL);
+  lv_obj_set_pos(buttonZValue, PARA_UI_VALUE_POS_X, PARA_UI_POS_Y * 3 + PARA_UI_VALUE_V_2);
+  lv_obj_set_size(buttonZValue, PARA_UI_VALUE_BTN_X_SIZE, PARA_UI_VALUE_BTN_Y_SIZE);
+  lv_obj_set_event_cb_mks(buttonZValue, event_handler, ID_OFFSET_Z, NULL, 0);
+  lv_btn_set_style(buttonZValue, LV_BTN_STYLE_REL, &style_para_value);
+  lv_btn_set_style(buttonZValue, LV_BTN_STYLE_PR, &style_para_value);
+  labelZValue = lv_label_create(buttonZValue, NULL);
+
+  line3 = lv_line_create(scr, NULL);
+  lv_ex_line(line3, line_points[2]);
+
+  buttonBack = lv_btn_create(scr, NULL);
+  lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_OFFSET_RETURN, NULL, 0);
+  lv_btn_set_style(buttonBack, LV_BTN_STYLE_REL, &style_para_back);
+  lv_btn_set_style(buttonBack, LV_BTN_STYLE_PR, &style_para_back);
+  lv_obj_set_pos(buttonBack, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y);
+  lv_obj_set_size(buttonBack, PARA_UI_BACK_BTN_X_SIZE, PARA_UI_BACK_BTN_Y_SIZE);
+  label_Back = lv_label_create(buttonBack, NULL);
+
+  #if HAS_ROTARY_ENCODER
+    if (gCfgItems.encoder_enable) {
+      lv_group_add_obj(g, buttonXValue);
+      lv_group_add_obj(g, buttonYValue);
+      lv_group_add_obj(g, buttonZValue);
+      lv_group_add_obj(g, buttonBack);
+    }
+  #endif
+
+  if (gCfgItems.multiple_language != 0) {
+    ZERO(public_buf_l);
+    sprintf_P(public_buf_l, PSTR("%.1f"), TERN(HAS_PROBE_XY_OFFSET, probe.offset.x, 0));
+    lv_label_set_text(labelXValue, public_buf_l);
+    lv_obj_align(labelXValue, buttonXValue, LV_ALIGN_CENTER, 0, 0);
+
+    ZERO(public_buf_l);
+    sprintf_P(public_buf_l, PSTR("%.1f"), TERN(HAS_PROBE_XY_OFFSET, probe.offset.y, 0));
+    lv_label_set_text(labelYValue, public_buf_l);
+    lv_obj_align(labelYValue, buttonYValue, LV_ALIGN_CENTER, 0, 0);
+
+    ZERO(public_buf_l);
+    sprintf_P(public_buf_l, PSTR("%.1f"), probe.offset.z);
+    lv_label_set_text(labelZValue, public_buf_l);
+    lv_obj_align(labelZValue, buttonZValue, LV_ALIGN_CENTER, 0, 0);
+
+    lv_label_set_text(label_Back, common_menu.text_back);
+    lv_obj_align(label_Back, buttonBack, LV_ALIGN_CENTER, 0, 0);
+  }
+}
+
+void lv_clear_auto_level_offset_settings() {
+  #if HAS_ROTARY_ENCODER
+    if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
+  #endif
+  lv_obj_del(scr);
+}
+
+#endif // HAS_TFT_LVGL_UI && HAS_BED_PROBE

+ 33 - 0
Marlin/src/lcd/extui/lib/mks_ui/draw_auto_level_offset_settings.h

@@ -0,0 +1,33 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+#pragma once
+
+#ifdef __cplusplus
+  extern "C" { /* C-declarations for C++ */
+#endif
+
+extern void lv_draw_auto_level_offset_settings(void);
+extern void lv_clear_auto_level_offset_settings();
+
+#ifdef __cplusplus
+  } /* C-declarations for C++ */
+#endif

Некоторые файлы не были показаны из-за большого количества измененных файлов