/* * Copyright (c) 2006-2021, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2025-11-25 Administrator the first version */ #include #include #include #include #include #include #include #include #include #include #include #include #include "lvgl.h" #define DBG_TAG "gui" #define DBG_LVL DBG_LOG #include #define LCD_BL_PIN GET_PIN(D,12) #define LCD_RST_PIN GET_PIN(D,11) // 全局或静态数组 lv_obj_t * di_led_array[64]; lv_obj_t * di_name_array[64]; lv_obj_t * do_led_array[64]; lv_obj_t * do_name_array[64]; void ui_init_dio_leds(lv_ui *ui) { di_led_array[0] = ui->screen_di1; di_led_array[1] = ui->screen_di2; di_led_array[2] = ui->screen_di3; di_led_array[3] = ui->screen_di4; di_led_array[4] = ui->screen_di5; di_led_array[5] = ui->screen_di6; di_led_array[6] = ui->screen_di7; di_led_array[7] = ui->screen_di8; di_led_array[8] = ui->screen_di9; di_led_array[9] = ui->screen_di10; di_led_array[10] = ui->screen_di11; di_led_array[11] = ui->screen_di12; di_led_array[12] = ui->screen_di13; di_led_array[13] = ui->screen_di14; di_led_array[14] = ui->screen_di15; di_led_array[15] = ui->screen_di16; di_led_array[16] = ui->screen_di17; di_led_array[17] = ui->screen_di18; di_led_array[18] = ui->screen_di19; di_led_array[19] = ui->screen_di20; di_led_array[20] = ui->screen_di21; di_led_array[21] = ui->screen_di22; di_led_array[22] = ui->screen_di23; di_led_array[23] = ui->screen_di24; di_led_array[24] = ui->screen_di25; di_led_array[25] = ui->screen_di26; di_led_array[26] = ui->screen_di27; di_led_array[27] = ui->screen_di28; di_led_array[28] = ui->screen_di29; di_led_array[29] = ui->screen_di30; di_led_array[30] = ui->screen_di31; di_led_array[31] = ui->screen_di32; di_led_array[32] = ui->screen_di33; di_led_array[33] = ui->screen_di34; di_led_array[34] = ui->screen_di35; di_led_array[35] = ui->screen_di36; di_led_array[36] = ui->screen_di37; di_led_array[37] = ui->screen_di38; di_led_array[38] = ui->screen_di39; di_led_array[39] = ui->screen_di40; di_led_array[40] = ui->screen_di41; di_led_array[41] = ui->screen_di42; di_led_array[42] = ui->screen_di43; di_led_array[43] = ui->screen_di44; di_led_array[44] = ui->screen_di45; di_led_array[45] = ui->screen_di46; di_led_array[46] = ui->screen_di47; di_led_array[47] = ui->screen_di48; di_led_array[48] = ui->screen_di49; di_led_array[49] = ui->screen_di50; di_led_array[50] = ui->screen_di51; di_led_array[51] = ui->screen_di52; di_led_array[52] = ui->screen_di53; di_led_array[53] = ui->screen_di54; di_led_array[54] = ui->screen_di55; di_led_array[55] = ui->screen_di56; di_led_array[56] = ui->screen_di57; di_led_array[57] = ui->screen_di58; di_led_array[58] = ui->screen_di59; di_led_array[59] = ui->screen_di60; di_led_array[60] = ui->screen_di61; di_led_array[61] = ui->screen_di62; di_led_array[62] = ui->screen_di63; di_led_array[63] = ui->screen_di64; /*di_name_array[0] = ui->screen_name_di0; di_name_array[1] = ui->screen_name_di1; di_name_array[2] = ui->screen_name_di2; di_name_array[3] = ui->screen_name_di3; di_name_array[4] = ui->screen_name_di4; di_name_array[5] = ui->screen_name_di5; di_name_array[6] = ui->screen_name_di6; di_name_array[7] = ui->screen_name_di7; di_name_array[8] = ui->screen_name_di8; di_name_array[9] = ui->screen_name_di9; di_name_array[10] = ui->screen_name_di10; di_name_array[11] = ui->screen_name_di11; di_name_array[12] = ui->screen_name_di12; di_name_array[13] = ui->screen_name_di13; di_name_array[14] = ui->screen_name_di14; di_name_array[15] = ui->screen_name_di15; di_name_array[16] = ui->screen_name_di16; di_name_array[17] = ui->screen_name_di17; di_name_array[18] = ui->screen_name_di18; di_name_array[19] = ui->screen_name_di19; di_name_array[20] = ui->screen_name_di20; di_name_array[21] = ui->screen_name_di21; di_name_array[22] = ui->screen_name_di22; di_name_array[23] = ui->screen_name_di23; di_name_array[24] = ui->screen_name_di24; di_name_array[25] = ui->screen_name_di25; di_name_array[26] = ui->screen_name_di26; di_name_array[27] = ui->screen_name_di27; di_name_array[28] = ui->screen_name_di28; di_name_array[29] = ui->screen_name_di29; di_name_array[30] = ui->screen_name_di30; di_name_array[31] = ui->screen_name_di31; di_name_array[32] = ui->screen_name_di32; di_name_array[33] = ui->screen_name_di33; di_name_array[34] = ui->screen_name_di34; di_name_array[35] = ui->screen_name_di35; di_name_array[36] = ui->screen_name_di36; di_name_array[37] = ui->screen_name_di37; di_name_array[38] = ui->screen_name_di38; di_name_array[39] = ui->screen_name_di39; di_name_array[40] = ui->screen_name_di40; di_name_array[41] = ui->screen_name_di41; di_name_array[42] = ui->screen_name_di42; di_name_array[43] = ui->screen_name_di43; di_name_array[44] = ui->screen_name_di44; di_name_array[45] = ui->screen_name_di45; di_name_array[46] = ui->screen_name_di46; di_name_array[47] = ui->screen_name_di47; di_name_array[48] = ui->screen_name_di48; di_name_array[49] = ui->screen_name_di49; di_name_array[50] = ui->screen_name_di50; di_name_array[51] = ui->screen_name_di51; di_name_array[52] = ui->screen_name_di52; di_name_array[53] = ui->screen_name_di53; di_name_array[54] = ui->screen_name_di54; di_name_array[55] = ui->screen_name_di55; di_name_array[56] = ui->screen_name_di56; di_name_array[57] = ui->screen_name_di57; di_name_array[58] = ui->screen_name_di58; di_name_array[59] = ui->screen_name_di59; di_name_array[60] = ui->screen_name_di60; di_name_array[61] = ui->screen_name_di61; di_name_array[62] = ui->screen_name_di62; di_name_array[63] = ui->screen_name_di63;*/ // do_led_array[0] = ui->screen_do0; do_led_array[1] = ui->screen_do1; do_led_array[2] = ui->screen_do2; do_led_array[3] = ui->screen_do3; do_led_array[4] = ui->screen_do4; do_led_array[5] = ui->screen_do5; do_led_array[6] = ui->screen_do6; do_led_array[7] = ui->screen_do7; do_led_array[8] = ui->screen_do8; do_led_array[9] = ui->screen_do9; do_led_array[10] = ui->screen_do10; do_led_array[11] = ui->screen_do11; do_led_array[12] = ui->screen_do12; do_led_array[13] = ui->screen_do13; do_led_array[14] = ui->screen_do14; do_led_array[15] = ui->screen_do15; do_led_array[16] = ui->screen_do16; do_led_array[17] = ui->screen_do17; do_led_array[18] = ui->screen_do18; do_led_array[19] = ui->screen_do19; do_led_array[20] = ui->screen_do20; do_led_array[21] = ui->screen_do21; do_led_array[22] = ui->screen_do22; do_led_array[23] = ui->screen_do23; do_led_array[24] = ui->screen_do24; do_led_array[25] = ui->screen_do25; do_led_array[26] = ui->screen_do26; do_led_array[27] = ui->screen_do27; do_led_array[28] = ui->screen_do28; do_led_array[29] = ui->screen_do29; do_led_array[30] = ui->screen_do30; do_led_array[31] = ui->screen_do31; do_led_array[32] = ui->screen_do32; do_led_array[33] = ui->screen_do33; do_led_array[34] = ui->screen_do34; do_led_array[35] = ui->screen_do35; do_led_array[36] = ui->screen_do36; do_led_array[37] = ui->screen_do37; do_led_array[38] = ui->screen_do38; do_led_array[39] = ui->screen_do39; do_led_array[40] = ui->screen_do40; do_led_array[41] = ui->screen_do41; do_led_array[42] = ui->screen_do42; do_led_array[43] = ui->screen_do43; do_led_array[44] = ui->screen_do44; do_led_array[45] = ui->screen_do45; do_led_array[46] = ui->screen_do46; do_led_array[47] = ui->screen_do47; do_led_array[48] = ui->screen_do48; do_led_array[49] = ui->screen_do49; do_led_array[50] = ui->screen_do50; do_led_array[51] = ui->screen_do51; do_led_array[52] = ui->screen_do52; do_led_array[53] = ui->screen_do53; do_led_array[54] = ui->screen_do54; do_led_array[55] = ui->screen_do55; do_led_array[56] = ui->screen_do56; do_led_array[57] = ui->screen_do57; do_led_array[58] = ui->screen_do58; do_led_array[59] = ui->screen_do59; do_led_array[60] = ui->screen_do60; do_led_array[61] = ui->screen_do61; do_led_array[62] = ui->screen_do62; do_led_array[63] = ui->screen_do63; /*do_name_array[0] = ui->screen_name_do0; do_name_array[1] = ui->screen_name_do1; do_name_array[2] = ui->screen_name_do2; do_name_array[3] = ui->screen_name_do3; do_name_array[4] = ui->screen_name_do4; do_name_array[5] = ui->screen_name_do5; do_name_array[6] = ui->screen_name_do6; do_name_array[7] = ui->screen_name_do7; do_name_array[8] = ui->screen_name_do8; do_name_array[9] = ui->screen_name_do9; do_name_array[10] = ui->screen_name_do10; do_name_array[11] = ui->screen_name_do11; do_name_array[12] = ui->screen_name_do12; do_name_array[13] = ui->screen_name_do13; do_name_array[14] = ui->screen_name_do14; do_name_array[15] = ui->screen_name_do15; do_name_array[16] = ui->screen_name_do16; do_name_array[17] = ui->screen_name_do17; do_name_array[18] = ui->screen_name_do18; do_name_array[19] = ui->screen_name_do19; do_name_array[20] = ui->screen_name_do20; do_name_array[21] = ui->screen_name_do21; do_name_array[22] = ui->screen_name_do22; do_name_array[23] = ui->screen_name_do23; do_name_array[24] = ui->screen_name_do24; do_name_array[25] = ui->screen_name_do25; do_name_array[26] = ui->screen_name_do26; do_name_array[27] = ui->screen_name_do27; do_name_array[28] = ui->screen_name_do28; do_name_array[29] = ui->screen_name_do29; do_name_array[30] = ui->screen_name_do30; do_name_array[31] = ui->screen_name_do31; do_name_array[32] = ui->screen_name_do32; do_name_array[33] = ui->screen_name_do33; do_name_array[34] = ui->screen_name_do34; do_name_array[35] = ui->screen_name_do35; do_name_array[36] = ui->screen_name_do36; do_name_array[37] = ui->screen_name_do37; do_name_array[38] = ui->screen_name_do38; do_name_array[39] = ui->screen_name_do39; do_name_array[40] = ui->screen_name_do40; do_name_array[41] = ui->screen_name_do41; do_name_array[42] = ui->screen_name_do42; do_name_array[43] = ui->screen_name_do43; do_name_array[44] = ui->screen_name_do44; do_name_array[45] = ui->screen_name_do45; do_name_array[46] = ui->screen_name_do46; do_name_array[47] = ui->screen_name_do47; do_name_array[48] = ui->screen_name_do48; do_name_array[49] = ui->screen_name_do49; do_name_array[50] = ui->screen_name_do50; do_name_array[51] = ui->screen_name_do51; do_name_array[52] = ui->screen_name_do52; do_name_array[53] = ui->screen_name_do53; do_name_array[54] = ui->screen_name_do54; do_name_array[55] = ui->screen_name_do55; do_name_array[56] = ui->screen_name_do56; do_name_array[57] = ui->screen_name_do57; do_name_array[58] = ui->screen_name_do58; do_name_array[59] = ui->screen_name_do59; do_name_array[60] = ui->screen_name_do60; do_name_array[61] = ui->screen_name_do61; do_name_array[62] = ui->screen_name_do62; do_name_array[63] = ui->screen_name_do63;*/ } void setup_user_screen(lv_ui *ui) { lv_obj_clear_flag(lv_tabview_get_content(ui->screen_tabview), LV_OBJ_FLAG_SCROLLABLE);//禁止左右滑动 lv_obj_clear_flag(lv_tabview_get_content(ui->screen_w_io), LV_OBJ_FLAG_SCROLLABLE);//禁止左右滑动 lv_textarea_set_text(ui->screen_machine_id, machine_ID);//设备id lv_textarea_set_text(ui->screen_machine_name, machine_name);//设备名 } time_t nows; char time_str[9]; //"0000:00\0" char temp_str[6]; //"120.5" char wter_str[6]; //"120.5" void setup_s_screen(lv_ui *ui) { //系统时间 time(&nows); struct tm *t = localtime(&nows); snprintf(sys_time, sizeof(sys_time), "%02d:%02d:%02d", t->tm_hour, t->tm_min, t->tm_sec); lv_label_set_text(ui->screen_SYS_TIME, (const char *)sys_time);//系统时间 //运行时间 #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wformat-truncation" snprintf(time_str, sizeof(time_str), "%04d:%02d", sys_run_time / 60, sys_run_time % 60); #pragma GCC diagnostic pop lv_label_set_text(ui->screen_RUN_TIME, (const char *)time_str);//显示运行时间 //工单 lv_label_set_text(ui->screen_order, (const char *)Work); //水位 snprintf(wter_str, sizeof(wter_str), "%04.0f", MTL); lv_label_set_text(ui->screen_water, (const char *)wter_str); //温度 snprintf(temp_str, sizeof(temp_str), "%05.1f", MTT); lv_label_set_text(ui->screen_temp, (const char *)temp_str); //DIO_led for (int i = 0; i < DI_TABLE_SIZE; i++) { if(di_table[i].current_state) { lv_led_on(di_led_array[i]); } else { lv_led_off(di_led_array[i]); } } for (int i = 0; i < DO_TABLE_SIZE; i++) { if(do_table[i].current_state) { lv_led_on(do_led_array[i]); } else { lv_led_off(do_led_array[i]); } } } static void time_update_timer_cb(lv_timer_t * timer) { setup_s_screen(&guider_ui); } void lv_user_gui_init(void) { setup_ui(&guider_ui); events_init(&guider_ui); custom_init(&guider_ui); setup_user_screen(&guider_ui); ui_init_dio_leds(&guider_ui); // 创建一个每 500ms 触发一次的定时器 lv_timer_create(time_update_timer_cb, 900, NULL); }