#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; } #if NIXIE_CUBE_ENABLE menu_data.twk_flag = 1; // 上、下、左、右 任意一个键按下后,闪烁开始 menu_data.twk_cnt = 0; //每次按下后闪烁计数清零 #endif keyset_output(1); } break; case KEY_MENU: { key = 0; key_char2struct(); //加载菜单界面 lv_scr_load(guider_ui.screen_setting); scr_setting_recover(); 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; //当前界面为详细设置菜单 } 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; } #if NIXIE_CUBE_ENABLE // menu_data.twk_flag = 1; //上、下、左、右 任意一个键按下后,闪烁开始 // menu_data.twk_cnt = 0; //每次按下后闪烁计数清零 //避免游标移动的瞬间,前一刻的数值处于闪烁熄灭的状态,移动游标前重新显示一次当前数值 set_nixie_cube(IO_OUTPUT, menu_data.io_cursor, menu_data.o_numbers[menu_data.io_cursor]); #endif 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; } else { menu_data.io_on2off = IO_ON; } io_on2off_status(); //更新ON/OFF/IN/OUT状态指示 } break; case KEY_RIGHT: { key = 0; key_char2struct(); if(menu_data.io_mode == IO_INPUT) { return; } #if NIXIE_CUBE_ENABLE menu_data.twk_flag = 1; // 上、下、左、右 任意一个键按下后,闪烁开始 menu_data.twk_cnt = 0; //每次按下后闪烁计数清零 //避免游标移动的瞬间,前一刻的数值处于闪烁熄灭的状态,移动游标前重新显示一次当前数值 set_nixie_cube(IO_OUTPUT, menu_data.io_cursor, menu_data.o_numbers[menu_data.io_cursor]); #endif 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.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.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; } #if NIXIE_CUBE_ENABLE menu_data.twk_flag = 1; // 上、下、左、右 任意一个键按下后,闪烁开始 menu_data.twk_cnt = 0; //每次按下后闪烁计数清零 #endif keyset_output(-1); } break; case KEY_BACK: //闲置,预留 { key = 0; key_char2struct(); } break; case KEY_ALL: //闲置,预留 { key = 0; key_char2struct(); } break; case KEY_NONE: //闲置,预留 { } break; default: { key = 0; key_char2struct(); } break; } }