#include "key_functions_main.h" //KEY_MAIN void key_functions_main(void) { if( key_pv.status == KEY_STATUS_DISABLE ) return; uint8_t cursor_temp = 0; //临时游标,替代枚举变量进行加减运算 switch (key_pv.tag) { case KEY_OUT: { key = 0; key_char2struct(); //交替按下 in 和 out 时,只改变输入/输出,连续按同一个键的时候才改变类型 if(menu_data.io_mode == IO_INPUT) { menu_data.io_mode = IO_OUTPUT; menu_data.output_mode = menu_data.input_mode; io_on2off_status(); //更新状态指示 } else { cursor_temp = (uint8_t)menu_data.output_mode; cursor_temp = (cursor_temp >= 5)?(0):(cursor_temp + 1); menu_data.output_mode = (SIG_FUNCTIONS)cursor_temp; } switch (menu_data.output_mode) { case SIG_VOLTAGE: //电压 { menu_data.output_mode_type = VOLTAGE_V; set_working_mode(menu_data.output_mode, menu_data.output_mode_type); } break; case SIG_CURRENT: //电流 { menu_data.output_mode_type = CURRENT_MA; set_working_mode(menu_data.output_mode, menu_data.output_mode_type); } break; case SIG_RESISTANT: //电阻 { menu_data.output_mode_type = RESISTANT_OHM; set_working_mode(menu_data.output_mode, menu_data.output_mode_type); } break; case SIG_FREQUENCE: //频率 { menu_data.output_mode_type = FREQUENCE_KHZ; set_working_mode(menu_data.output_mode, menu_data.output_mode_type); } break; case SIG_TC: //热电偶 { menu_data.output_mode_type = TC_K; set_working_mode(menu_data.output_mode, menu_data.output_mode_type); } break; case SIG_RTD: //热电阻 { menu_data.output_mode_type = RTD_DC; set_working_mode(menu_data.output_mode, menu_data.output_mode_type); } break; default: break; } } break; case KEY_UP: { key = 0; key_char2struct(); if(menu_data.io_mode == IO_INPUT) { return; } keyset_output(1); } break; case KEY_MENU: { key = 0; key_char2struct(); //加载菜单界面 scr_setting_recover(); lv_scr_load(guider_ui.screen_setting); lv_obj_clear_flag(guider_ui.screen_setting, LV_OBJ_FLAG_HIDDEN); //隐藏主界面对象 lv_obj_add_flag(guider_ui.screen_main, LV_OBJ_FLAG_HIDDEN); menu_data.scr_now = SCREEN_SETTING; //当前界面为详细设置菜单 set_coil_val(COIL_ADDR_SCREEN_SWITCH, 1); } break; case KEY_IN: { key = 0; key_char2struct(); if(menu_data.io_mode == IO_OUTPUT) { menu_data.io_mode = IO_INPUT; //继承之前的输出类型 menu_data.input_mode = menu_data.output_mode; io_on2off_status(); //更新状态指示 } else { //枚举类型不能直接运算,于是使用临时变量cursor_temp cursor_temp = (uint8_t)menu_data.input_mode; cursor_temp = (cursor_temp >= 5)?(0):(cursor_temp + 1); menu_data.input_mode = (SIG_FUNCTIONS)cursor_temp; } switch (menu_data.input_mode) { case SIG_VOLTAGE: //电压 { menu_data.input_mode_type = VOLTAGE_V; set_working_mode(menu_data.input_mode, menu_data.input_mode_type); } break; case SIG_CURRENT: //电流 { menu_data.input_mode_type = CURRENT_MA; set_working_mode(menu_data.input_mode, menu_data.input_mode_type); } break; case SIG_RESISTANT: //电阻 { menu_data.input_mode_type = RESISTANT_OHM; set_working_mode(menu_data.input_mode, menu_data.input_mode_type); } break; case SIG_FREQUENCE: //频率 { menu_data.input_mode_type = FREQUENCE_KHZ; set_working_mode(menu_data.input_mode, menu_data.input_mode_type); } break; case SIG_TC: //热电偶 { menu_data.input_mode_type = TC_K; set_working_mode(menu_data.input_mode, menu_data.input_mode_type); } break; case SIG_RTD: //热电阻 { menu_data.input_mode_type = RTD_DC; set_working_mode(menu_data.input_mode, menu_data.input_mode_type); } break; default: break; } } break; case KEY_LEFT: { key = 0; key_char2struct(); if(menu_data.io_mode == IO_INPUT) { return; } menu_data.io_cursor_prv = menu_data.io_cursor; menu_data.io_cursor = (menu_data.io_cursor <= 0)?(6):(menu_data.io_cursor - 1); set_cursor_position(); } break; case KEY_OK: { key = 0; key_char2struct(); //主界面用OK键控制开关ON&OFF if(menu_data.io_on2off == IO_ON) { menu_data.io_on2off = IO_OFF; set_coil_val(COIL_ADDR_ON_OFF, IO_OFF); //编程输出时暂停计数 if(progout_data.process == PROGOUT_RUNNING) { progout_data.process = PROGOUT_PAUSE; progout_data.progout_tick_flag = 0; } } else { menu_data.io_on2off = IO_ON; set_coil_val(COIL_ADDR_ON_OFF, IO_ON); //编程输出时继续计数 if(progout_data.process == PROGOUT_PAUSE) { progout_data.process = PROGOUT_RUNNING; progout_data.progout_tick_flag = 1; } } io_on2off_status(); //更新ON/OFF/IN/OUT状态指示 } break; case KEY_RIGHT: { key = 0; key_char2struct(); if(menu_data.io_mode == IO_INPUT) { return; } menu_data.io_cursor_prv = menu_data.io_cursor; menu_data.io_cursor = (menu_data.io_cursor >= 6)?(0):(menu_data.io_cursor + 1); set_cursor_position(); } break; case KEY_SWITCH: { key = 0; key_char2struct(); switch (menu_data.io_mode) //输入、输出模式切换 { case IO_OUTPUT: { switch (menu_data.output_mode) //功能切换 { case SIG_CURRENT: { menu_data.output_mode_type = CURRENT_MA; set_working_mode(menu_data.output_mode, menu_data.output_mode_type); } break; case SIG_RESISTANT: //电阻 { menu_data.output_mode_type = RESISTANT_OHM; set_working_mode(menu_data.output_mode, menu_data.output_mode_type); } break; case SIG_VOLTAGE: { cursor_temp = (uint8_t)menu_data.output_mode_type; cursor_temp = (cursor_temp == 1)?(2):(1); menu_data.output_mode_type = (SIG_FUNCTIONS_TYPE)cursor_temp; set_working_mode(menu_data.output_mode, menu_data.output_mode_type); } break; case SIG_FREQUENCE: //频率 { menu_data.output_mode_type = FREQUENCE_KHZ; set_working_mode(menu_data.output_mode, menu_data.output_mode_type); } break; case SIG_TC: //热电偶 { cursor_temp = (uint8_t)menu_data.output_mode_type; cursor_temp = (cursor_temp >= 12)?(5):(cursor_temp + 1); menu_data.output_mode_type = (SIG_FUNCTIONS_TYPE)cursor_temp; set_working_mode(menu_data.output_mode, menu_data.output_mode_type); } break; case SIG_RTD: //热电阻 { menu_data.output_mode_type = RTD_DC; set_working_mode(menu_data.output_mode, menu_data.output_mode_type); } break; default: break; } } break; case IO_INPUT: { switch (menu_data.input_mode) { case SIG_CURRENT: { menu_data.input_mode_type = CURRENT_MA; set_working_mode(menu_data.input_mode, menu_data.input_mode_type); } break; case SIG_VOLTAGE: { cursor_temp = (uint8_t)menu_data.input_mode_type; cursor_temp = (cursor_temp == 1)?(2):(1); menu_data.input_mode_type = (SIG_FUNCTIONS_TYPE)cursor_temp; set_working_mode(menu_data.input_mode, menu_data.input_mode_type); } break; case SIG_RESISTANT: //电阻 { menu_data.input_mode_type = RESISTANT_OHM; set_working_mode(menu_data.input_mode, menu_data.input_mode_type); } break; case SIG_FREQUENCE: //频率 { menu_data.input_mode_type = FREQUENCE_KHZ; set_working_mode(menu_data.input_mode, menu_data.input_mode_type); } break; case SIG_TC: //热电偶 { cursor_temp = (uint8_t)menu_data.input_mode_type; cursor_temp = (cursor_temp >= 12)?(5):(cursor_temp + 1); menu_data.input_mode_type = (SIG_FUNCTIONS_TYPE)cursor_temp; set_working_mode(menu_data.input_mode, menu_data.input_mode_type); } break; case SIG_RTD: //热电阻 { menu_data.input_mode_type = RTD_DC; set_working_mode(menu_data.input_mode, menu_data.input_mode_type); } break; default: break; } } break; default: break; } } break; case KEY_SOURCE: { //电源开关靠硬件电路实现,此处可做预留 key = 0; key_char2struct(); } break; case KEY_DOWN: { key = 0; key_char2struct(); if(menu_data.io_mode == IO_INPUT) { return; } keyset_output(-1); } break; case KEY_BACK: { key = 0; key_char2struct(); if(current_operation == PROG_OUT_PROCESSING) { progout_data.process = PROGOUT_END; progout_data.progout_tick_flag = 0; progout_data.progout_tick = 2500; } } break; case KEY_ALL: //闲置,预留 { key = 0; key_char2struct(); } break; case KEY_NONE: //闲置,预留 { } break; default: { key = 0; key_char2struct(); } break; } }