425 lines
13 KiB
C
425 lines
13 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;
|
||
}
|
||
|
||
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;
|
||
}
|
||
|
||
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;
|
||
|
||
//编程输出时暂停计数
|
||
if(current_operation == PROG_OUT_PROCESSING) progout_tick_flag = 0;
|
||
}
|
||
else
|
||
{
|
||
menu_data.io_on2off = IO_ON;
|
||
|
||
//编程输出时继续计数
|
||
if(current_operation == PROG_OUT_PROCESSING) 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.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;
|
||
}
|
||
|
||
keyset_output(-1);
|
||
}
|
||
break;
|
||
|
||
case KEY_BACK:
|
||
{
|
||
key = 0;
|
||
key_char2struct();
|
||
|
||
if(current_operation == PROG_OUT_PROCESSING)
|
||
{
|
||
progout_data.process = PROGOUT_END;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case KEY_ALL: //闲置,预留
|
||
{
|
||
key = 0;
|
||
key_char2struct();
|
||
}
|
||
break;
|
||
|
||
case KEY_NONE: //闲置,预留
|
||
{
|
||
}
|
||
break;
|
||
|
||
default:
|
||
{
|
||
key = 0;
|
||
key_char2struct();
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|