437 lines
14 KiB
C
437 lines
14 KiB
C
#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;
|
||
}
|
||
}
|
||
|