sggt/App/APP_WU/Src/key_functions_main.c

428 lines
13 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
//编程输出时暂停计数
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;
progout_tick_flag = 0;
progout_tick = 0;
}
}
break;
case KEY_ALL: //闲置,预留
{
key = 0;
key_char2struct();
}
break;
case KEY_NONE: //闲置,预留
{
}
break;
default:
{
key = 0;
key_char2struct();
}
break;
}
}