3939 lines
126 KiB
C
3939 lines
126 KiB
C
/*
|
||
* @Author: wujunchao wujunchao@wuxismart.com
|
||
* @Date: 2024-12-27 11:50:56
|
||
* @LastEditors: wujunchao wujunchao@wuxismart.com
|
||
* @LastEditTime: 2025-03-19 10:47:42
|
||
* @FilePath: \signal_generator\App\APP_WU\Src\apps_gather.c
|
||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||
*/
|
||
#include "apps_gather.h" //用于头文件打包汇总,函数声明和变量定义
|
||
// lv_conf.h { line:282->CPU&FPS; line:289->MEM used }
|
||
|
||
/**********test5**********/
|
||
MENU_DATA m5data; //界面参数初始化
|
||
PLOT_DATA pltdata; //chart绘图参数初始化
|
||
TABVIEW_DATA tabdata; //设置页面参数初始化
|
||
PHYSICAL_QUANTITY VOL[2]; //电压,VOL[0]-V, VOL[1]-mV
|
||
PHYSICAL_QUANTITY CUR; //电流,mA
|
||
PHYSICAL_QUANTITY RES; //电阻,Ω
|
||
PHYSICAL_QUANTITY FRE; //频率,KHz
|
||
PHYSICAL_QUANTITY TC[3]; //热电偶,TC[0]-K, TC[1]-S, TC[2]-N
|
||
PHYSICAL_QUANTITY RTD; //热电阻
|
||
|
||
//物理量内容初始化
|
||
//底层数据,无法通过按键&菜单修改,用户使用时,仅修改tabdata里的变量
|
||
void physical_quantity_init(void)
|
||
{
|
||
VOL[0].tag = SIG_VOLTAGE;
|
||
VOL[0].typ = VOLTAGE_V;
|
||
VOL[0].low = 0;
|
||
VOL[0].up = 30;
|
||
VOL[0].pv = 0;
|
||
|
||
VOL[1].tag = SIG_VOLTAGE;
|
||
VOL[1].typ = VOLTAGE_MV;
|
||
VOL[1].low = -250;
|
||
VOL[1].up = 250;
|
||
VOL[1].pv = 0;
|
||
|
||
CUR.tag = SIG_CURRENT;
|
||
CUR.typ = CURRENT_MA;
|
||
CUR.low = 0;
|
||
CUR.up = 24;
|
||
CUR.pv = 0;
|
||
|
||
RES.tag = SIG_RESISTANT;
|
||
RES.typ = RESISTANT_OHM;
|
||
RES.low = 0;
|
||
RES.up = 4000;
|
||
RES.pv = 0;
|
||
|
||
FRE.tag = SIG_FREQUENCE;
|
||
FRE.typ = FREQUENCE_KHZ;
|
||
FRE.low = 0;
|
||
FRE.up = 100;
|
||
FRE.pv = 0;
|
||
|
||
TC[0].tag = SIG_TC;
|
||
TC[0].typ = TC_K;
|
||
TC[0].low = -250;
|
||
TC[0].up = 1820;
|
||
TC[0].pv = 0;
|
||
|
||
TC[1].tag = SIG_TC;
|
||
TC[1].typ = TC_S;
|
||
TC[1].low = -250;
|
||
TC[1].up = 1820;
|
||
TC[1].pv = 0;
|
||
|
||
TC[2].tag = SIG_TC;
|
||
TC[2].typ = TC_N;
|
||
TC[2].low = -250;
|
||
TC[2].up = 1820;
|
||
TC[2].pv = 0;
|
||
|
||
RTD.tag = SIG_RTD;
|
||
RTD.typ = RTD_DC;
|
||
RTD.low = -200;
|
||
RTD.up = 850;
|
||
RTD.pv = 0;
|
||
}
|
||
|
||
void menu_data_init(void)
|
||
{
|
||
//general
|
||
m5data.scr_now = SCREEN_INIT; //初始界面为开机动画
|
||
m5data.tick_prv = -1; //前一时刻,用于计时
|
||
m5data.tick_cur = -1; //当前时刻,用于计时
|
||
m5data.menu_reset_flag = 0; //复位使能标志,置1后复位,复位完成后变回0
|
||
physical_quantity_init();
|
||
|
||
//screen_init
|
||
m5data.scr_init_flag = 0; //是否进行过初始化(开机动画)
|
||
m5data.scr_init_bar = 0; //进度条值,0~100
|
||
m5data.scr_init_cnt = 0; //进度条计数(控制进度条动画)
|
||
|
||
//screen_main
|
||
// {
|
||
m5data.runtime_seconds = 0; //秒
|
||
m5data.runtime_minutes = 0; //分钟
|
||
m5data.runtime_hours = 0; //小时
|
||
memset(m5data.runtime_show, 0, 16); //存放显示时间的字符串
|
||
|
||
m5data.battery_cnt = 0; //电池计数
|
||
|
||
m5data.io_cursor = 3; //当前游标位置,[0000,000]:0~6
|
||
m5data.io_cursor_prv = 3; //前一时刻游标位置
|
||
m5data.twk_flag = 0; //0停止闪烁,1开始闪烁
|
||
m5data.twk_flip = 0; //0显示,1不显示
|
||
m5data.twk_cnt = 0; //闪烁计数
|
||
m5data.overflow_flag_low = 0; //向上溢出
|
||
m5data.overflow_flag_up = 0; //向下溢出
|
||
m5data.sign_flag_in = 0; //默认不显示符号
|
||
m5data.sign_flag_out = 0; //默认不显示符号
|
||
|
||
m5data.io_on2off = IO_OFF; //初始为关闭状态
|
||
m5data.io_mode = IO_OUTPUT; //默认工作模式,0:输入IN,1:输出OUT
|
||
for(uint8_t i = 0; i < 7; i++) //用于数值显示的数组,初值为0
|
||
{
|
||
m5data.i_numbers[i] = 0; //输入值/测量值
|
||
m5data.o_numbers[i] = 0; //输出值/设定值
|
||
}
|
||
|
||
m5data.input_mode = VOL[0].tag; //输入功能初始为电压模式
|
||
m5data.input_mode_type = VOL[0].typ; //电压单位初始为V
|
||
m5data.output_mode = VOL[0].tag; //输出功能初始为电压模式
|
||
m5data.output_mode_type = VOL[0].typ; //电压单位初始为V
|
||
sig_channel_select(m5data.io_mode, m5data.output_mode_type);
|
||
|
||
//chart组件显示(int),绘图值
|
||
pltdata.y_pri_low = 0; //主轴的显示下限,0,通常不做修改
|
||
pltdata.y_pri_up = 100; //主轴的显示上限,100,通常不做修改
|
||
pltdata.y_scd_low = 0; //副轴的显示下限,0,通常不做修改
|
||
pltdata.y_scd_up = 100; //副轴的显示上限,100,通常不做修改
|
||
pltdata.y_pri_value = 0; //主轴的实时显示值,0~100
|
||
pltdata.y_pri_value_prv = 0; //前一时刻的曲线绘图值
|
||
pltdata.y_scd_value = 0; //副轴的实时显示值,0~100
|
||
pltdata.y_scd_value_prv = 0; //前一时刻的曲线绘图值
|
||
pltdata.y_scd_value_prv = 0; //前一时刻的实时显示值。
|
||
pltdata.pri_wait_tick = 0; //主轴等待滴答数
|
||
pltdata.scd_wait_tick = 0; //副轴等待滴答数
|
||
|
||
//chart组件显示(int),实际值
|
||
pltdata.yreal_pri_low = VOL[0].low; //实际值的显示下限,主轴
|
||
pltdata.yreal_pri_up = VOL[0].up; //实际值的显示上限,主轴
|
||
pltdata.yreal_scd_low = VOL[0].low; //实际值的显示下限,副轴
|
||
pltdata.yreal_scd_up = VOL[0].up; //实际值的显示上限,副轴
|
||
pltdata.yreal_pri_value = VOL[0].pv; //主轴的实时值,即输出/设定值
|
||
pltdata.yreal_scd_value = VOL[0].pv; //副轴的实时值,即输入/测量值
|
||
pltdata.yreal_scd_value_prv = VOL[0].pv; //前一时刻的输入测量值
|
||
|
||
// }
|
||
|
||
//screen_setting
|
||
tabdata.item_cursor = 0; //选项卡的游标(焦点)
|
||
tabdata.item_cursor_prv = 0; //前一刻的选项卡游标
|
||
tabdata.content_cursor = 99; //某一选项卡内部的游标
|
||
tabdata.content_cursor_prv = 99; //前一刻的~
|
||
tabdata.content_focus = 0; //默认无焦点
|
||
tabdata.content_cursor_x = 0;
|
||
tabdata.content_cursor_y = 0;
|
||
|
||
//设置界面的初始默认值
|
||
//ITEMS_0 选项卡0
|
||
//{
|
||
tabdata.content00 = VOLTAGE_V; //电压单位
|
||
tabdata.content01[0] = VOL[0].up; //电压V上限
|
||
tabdata.content01[1] = VOL[1].up; //电压mV上限
|
||
tabdata.content02[0] = VOL[0].low; //电压V下限
|
||
tabdata.content02[1] = VOL[1].low; //电压mV下限
|
||
tabdata.content03 = CUR.up; //电流上限
|
||
tabdata.content04 = CUR.low; //电流下限
|
||
tabdata.content05 = RES.up; //电阻上限
|
||
tabdata.content06 = RES.low; //电阻下限
|
||
tabdata.content07 = FRE.up; //频率上限
|
||
tabdata.content08 = FRE.low; //频率下限
|
||
tabdata.content09 = TC[0].up; //TC上限
|
||
tabdata.content010 = TC[0].low; //TC下限
|
||
tabdata.content011 = RTD.up; //RTD上限
|
||
tabdata.content012 = RTD.low; //RTD下限
|
||
//}
|
||
|
||
//ITEMS_1 选项卡1
|
||
//{
|
||
tabdata.light_flag = 0; //默认手电熄灭
|
||
//}
|
||
|
||
}
|
||
|
||
void menu_reset(void)
|
||
{
|
||
//界面复位
|
||
if(m5data.scr_now == SCREEN_INIT)
|
||
{
|
||
//如果正处于开机动画中,立即返回。
|
||
return;
|
||
}
|
||
|
||
//加载初始界面
|
||
setup_scr_screen_init(&guider_ui);
|
||
lv_scr_load(guider_ui.screen_init);
|
||
|
||
//释放内存
|
||
switch (m5data.scr_now)
|
||
{
|
||
case SCREEN_MAIN:
|
||
{
|
||
lv_obj_del(guider_ui.screen_main);
|
||
}
|
||
break;
|
||
|
||
case SCREEN_SETTING:
|
||
{
|
||
lv_obj_del(guider_ui.screen_setting);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
//参数复位,内部会对m5data.scr_now进行更改,因此放置于最后。
|
||
menu_data_init();
|
||
}
|
||
|
||
|
||
void menu_test5(void)
|
||
{
|
||
if(m5data.menu_reset_flag)
|
||
{
|
||
menu_reset(); //触发显示内容复位
|
||
|
||
m5data.menu_reset_flag = 0;
|
||
|
||
return;
|
||
}
|
||
|
||
if(m5data.scr_init_flag == 0)
|
||
{
|
||
scr_init_run(); //播放开机动画
|
||
}
|
||
else
|
||
{
|
||
switch (m5data.scr_now)
|
||
{
|
||
case SCREEN_MAIN:
|
||
{
|
||
scr_main_run(); //主界面显示
|
||
key_functions_main(); //主界面的按键功能
|
||
}
|
||
break;
|
||
|
||
case SCREEN_SETTING:
|
||
{
|
||
scr_setting_run(); //设置界面
|
||
key_functions_setting(); //设置界面的按键功能
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
//KEY_MAIN
|
||
void key_functions_main(void)
|
||
{
|
||
uint8_t cursor_temp = 0; //临时游标,替代枚举变量进行加减运算
|
||
|
||
switch (key)
|
||
{
|
||
case KEY_OUT:
|
||
{
|
||
key = 0;
|
||
|
||
//交替按下 in 和 out 时,只改变输入/输出,连续按同一个键的时候才改变类型
|
||
if(m5data.io_mode == IO_INPUT)
|
||
{
|
||
m5data.io_mode = IO_OUTPUT;
|
||
m5data.output_mode = m5data.input_mode;
|
||
|
||
io_on2off_status(); //更新状态指示
|
||
}
|
||
else
|
||
{
|
||
cursor_temp = (uint8_t)m5data.output_mode;
|
||
cursor_temp = (cursor_temp >= 5)?(0):(cursor_temp + 1);
|
||
m5data.output_mode = (SIG_FUNCTIONS)cursor_temp;
|
||
}
|
||
|
||
switch (m5data.output_mode)
|
||
{
|
||
case SIG_VOLTAGE: //电压
|
||
{
|
||
m5data.output_mode_type = VOLTAGE_V;
|
||
set_working_mode(m5data.output_mode, m5data.output_mode_type);
|
||
}
|
||
break;
|
||
|
||
case SIG_CURRENT: //电流
|
||
{
|
||
m5data.output_mode_type = CURRENT_MA;
|
||
set_working_mode(m5data.output_mode, m5data.output_mode_type);
|
||
}
|
||
break;
|
||
|
||
case SIG_RESISTANT: //电阻
|
||
{
|
||
m5data.output_mode_type = RESISTANT_OHM;
|
||
set_working_mode(m5data.output_mode, m5data.output_mode_type);
|
||
}
|
||
break;
|
||
|
||
case SIG_FREQUENCE: //频率
|
||
{
|
||
m5data.output_mode_type = FREQUENCE_KHZ;
|
||
set_working_mode(m5data.output_mode, m5data.output_mode_type);
|
||
}
|
||
break;
|
||
|
||
case SIG_TC: //热电偶
|
||
{
|
||
m5data.output_mode_type = TC_K;
|
||
set_working_mode(m5data.output_mode, m5data.output_mode_type);
|
||
}
|
||
break;
|
||
|
||
case SIG_RTD: //热电阻
|
||
{
|
||
m5data.output_mode_type = RTD_DC;
|
||
set_working_mode(m5data.output_mode, m5data.output_mode_type);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case KEY_UP:
|
||
{
|
||
key = 0;
|
||
|
||
if(m5data.io_mode == IO_INPUT)
|
||
{
|
||
return;
|
||
}
|
||
|
||
m5data.twk_flag = 1; // 上、下、左、右 任意一个键按下后,闪烁开始
|
||
m5data.twk_cnt = 0; //每次按下后闪烁计数清零
|
||
|
||
uint8_t step = 1; //up键步长,默认为1
|
||
float32 step_real = 0; //实际值步长
|
||
float32 pv = 0, sv = 0, up = 0;
|
||
|
||
//根据当前游标位置计算步进值
|
||
step_real = step * my_power(10, (3 - m5data.io_cursor));
|
||
//按下up键后,即将刷新的实际值
|
||
pv = get_output_value();
|
||
sv = pv + step_real;
|
||
up = pltdata.yreal_pri_up;
|
||
|
||
if( sv >= up )
|
||
{
|
||
//超过上限的情况下,直接显示上限
|
||
sv = up;
|
||
sv *= 1000;
|
||
set_output(sv);
|
||
}
|
||
else
|
||
{
|
||
//没超过上限的情况下,仅考虑pv、0、sv三者的位置关系
|
||
if( pv >= 0 )
|
||
{
|
||
//一定为正数,直接调用以下函数,增加数值
|
||
change_nixie_cube_OUT(NIXIE_INCREASE, step);
|
||
}
|
||
else
|
||
{
|
||
if( sv < 0 )
|
||
{
|
||
//pv和sv都为负数的情况下,仅调转方向,减小数值
|
||
change_nixie_cube_OUT(NIXIE_DECREASE, step);
|
||
}
|
||
else
|
||
{
|
||
//跨越0后,负号熄灭
|
||
//pv变为sv后跨越了0,数值可能增大也可能减小,因此直接赋值
|
||
sv *= 1000;
|
||
set_output(sv);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
|
||
case KEY_MENU:
|
||
{
|
||
key = 0;
|
||
|
||
//恢复默认工作模式:关闭、电压V输出
|
||
set_working_mode(SIG_VOLTAGE, VOLTAGE_V);
|
||
|
||
//加载菜单界面
|
||
setup_scr_screen_setting(&guider_ui);
|
||
lv_scr_load(guider_ui.screen_setting);
|
||
|
||
//切换至菜单后,清除主界面对象,释放内存
|
||
lv_obj_del(guider_ui.screen_main);
|
||
|
||
m5data.scr_now = SCREEN_SETTING; //当前界面为详细设置菜单
|
||
|
||
scr_setting_recover();
|
||
}
|
||
break;
|
||
|
||
case KEY_IN:
|
||
{
|
||
key = 0;
|
||
|
||
if(m5data.io_mode == IO_OUTPUT)
|
||
{
|
||
m5data.io_mode = IO_INPUT;
|
||
|
||
//继承之前的输出类型
|
||
m5data.input_mode = m5data.output_mode;
|
||
|
||
io_on2off_status(); //更新状态指示
|
||
}
|
||
else
|
||
{
|
||
//枚举类型不能直接运算,于是使用临时变量cursor_temp
|
||
cursor_temp = (uint8_t)m5data.input_mode;
|
||
cursor_temp = (cursor_temp >= 5)?(0):(cursor_temp + 1);
|
||
m5data.input_mode = (SIG_FUNCTIONS)cursor_temp;
|
||
}
|
||
|
||
switch (m5data.input_mode)
|
||
{
|
||
case SIG_VOLTAGE: //电压
|
||
{
|
||
m5data.input_mode_type = VOLTAGE_V;
|
||
set_working_mode(m5data.input_mode, m5data.input_mode_type);
|
||
}
|
||
break;
|
||
|
||
case SIG_CURRENT: //电流
|
||
{
|
||
m5data.input_mode_type = CURRENT_MA;
|
||
set_working_mode(m5data.input_mode, m5data.input_mode_type);
|
||
}
|
||
break;
|
||
|
||
case SIG_RESISTANT: //电阻
|
||
{
|
||
m5data.input_mode_type = RESISTANT_OHM;
|
||
set_working_mode(m5data.input_mode, m5data.input_mode_type);
|
||
}
|
||
break;
|
||
|
||
case SIG_FREQUENCE: //频率
|
||
{
|
||
m5data.input_mode_type = FREQUENCE_KHZ;
|
||
set_working_mode(m5data.input_mode, m5data.input_mode_type);
|
||
}
|
||
break;
|
||
|
||
case SIG_TC: //热电偶
|
||
{
|
||
m5data.input_mode_type = TC_K;
|
||
set_working_mode(m5data.input_mode, m5data.input_mode_type);
|
||
}
|
||
break;
|
||
|
||
case SIG_RTD: //热电阻
|
||
{
|
||
m5data.input_mode_type = RTD_DC;
|
||
set_working_mode(m5data.input_mode, m5data.input_mode_type);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case KEY_LEFT:
|
||
{
|
||
key = 0;
|
||
|
||
if(m5data.io_mode == IO_INPUT)
|
||
{
|
||
return;
|
||
}
|
||
|
||
m5data.twk_flag = 1; //上、下、左、右 任意一个键按下后,闪烁开始
|
||
m5data.twk_cnt = 0; //每次按下后闪烁计数清零
|
||
|
||
//避免游标移动的瞬间,前一刻的数值处于闪烁熄灭的状态,移动游标前重新显示一次当前数值
|
||
set_nixie_cube(IO_OUTPUT, m5data.io_cursor, m5data.o_numbers[m5data.io_cursor]);
|
||
|
||
m5data.io_cursor_prv = m5data.io_cursor;
|
||
m5data.io_cursor = (m5data.io_cursor <= 0)?(6):(m5data.io_cursor - 1);
|
||
set_cursor_position();
|
||
|
||
}
|
||
break;
|
||
|
||
case KEY_OK:
|
||
{
|
||
key = 0;
|
||
|
||
//主界面用OK键控制开关ON&OFF
|
||
if(m5data.io_on2off == IO_ON)
|
||
{
|
||
m5data.io_on2off = IO_OFF;
|
||
}
|
||
else
|
||
{
|
||
m5data.io_on2off = IO_ON;
|
||
}
|
||
|
||
io_on2off_status(); //更新ON/OFF/IN/OUT状态指示
|
||
}
|
||
break;
|
||
|
||
case KEY_RIGHT:
|
||
{
|
||
key = 0;
|
||
|
||
if(m5data.io_mode == IO_INPUT)
|
||
{
|
||
return;
|
||
}
|
||
|
||
m5data.twk_flag = 1; // 上、下、左、右 任意一个键按下后,闪烁开始
|
||
m5data.twk_cnt = 0; //每次按下后闪烁计数清零
|
||
|
||
//避免游标移动的瞬间,前一刻的数值处于闪烁熄灭的状态,移动游标前重新显示一次当前数值
|
||
set_nixie_cube(IO_OUTPUT, m5data.io_cursor, m5data.o_numbers[m5data.io_cursor]);
|
||
|
||
m5data.io_cursor_prv = m5data.io_cursor;
|
||
m5data.io_cursor = (m5data.io_cursor >= 6)?(0):(m5data.io_cursor + 1);
|
||
set_cursor_position();
|
||
}
|
||
break;
|
||
|
||
case KEY_SWITCH:
|
||
{
|
||
key = 0;
|
||
|
||
switch (m5data.io_mode) //输入、输出模式切换
|
||
{
|
||
case IO_OUTPUT:
|
||
{
|
||
switch (m5data.output_mode) //功能切换
|
||
{
|
||
case SIG_VOLTAGE:
|
||
{
|
||
cursor_temp = (uint8_t)m5data.output_mode_type;
|
||
cursor_temp = !cursor_temp;
|
||
m5data.output_mode_type = (SIG_FUNCTIONS_TYPE)cursor_temp;
|
||
|
||
set_working_mode(m5data.output_mode, m5data.output_mode_type);
|
||
}
|
||
break;
|
||
|
||
case SIG_CURRENT:
|
||
{
|
||
m5data.output_mode_type = CURRENT_MA;
|
||
set_working_mode(m5data.output_mode, m5data.output_mode_type);
|
||
}
|
||
break;
|
||
|
||
case SIG_RESISTANT: //电阻
|
||
{
|
||
m5data.output_mode_type = RESISTANT_OHM;
|
||
set_working_mode(m5data.output_mode, m5data.output_mode_type);
|
||
}
|
||
break;
|
||
|
||
case SIG_FREQUENCE: //频率
|
||
{
|
||
m5data.output_mode_type = FREQUENCE_KHZ;
|
||
set_working_mode(m5data.output_mode, m5data.output_mode_type);
|
||
}
|
||
break;
|
||
|
||
case SIG_TC: //热电偶
|
||
{
|
||
cursor_temp = (uint8_t)m5data.output_mode_type;
|
||
cursor_temp = (cursor_temp >= 7)?(5):(cursor_temp + 1);
|
||
m5data.output_mode_type = (SIG_FUNCTIONS_TYPE)cursor_temp;
|
||
|
||
set_working_mode(m5data.output_mode, m5data.output_mode_type);
|
||
}
|
||
break;
|
||
|
||
case SIG_RTD: //热电阻
|
||
{
|
||
m5data.output_mode_type = RTD_DC;
|
||
set_working_mode(m5data.output_mode, m5data.output_mode_type);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case IO_INPUT:
|
||
{
|
||
switch (m5data.input_mode)
|
||
{
|
||
case SIG_VOLTAGE:
|
||
{
|
||
cursor_temp = (uint8_t)m5data.input_mode_type;
|
||
cursor_temp = !cursor_temp;
|
||
m5data.input_mode_type = (SIG_FUNCTIONS_TYPE)cursor_temp;
|
||
|
||
set_working_mode(m5data.input_mode, m5data.input_mode_type);
|
||
}
|
||
break;
|
||
|
||
case SIG_CURRENT:
|
||
{
|
||
m5data.input_mode_type = CURRENT_MA;
|
||
set_working_mode(m5data.input_mode, m5data.input_mode_type);
|
||
}
|
||
break;
|
||
|
||
case SIG_RESISTANT: //电阻
|
||
{
|
||
m5data.input_mode_type = RESISTANT_OHM;
|
||
set_working_mode(m5data.input_mode, m5data.input_mode_type);
|
||
}
|
||
break;
|
||
|
||
case SIG_FREQUENCE: //频率
|
||
{
|
||
m5data.input_mode_type = FREQUENCE_KHZ;
|
||
set_working_mode(m5data.input_mode, m5data.input_mode_type);
|
||
}
|
||
break;
|
||
|
||
case SIG_TC: //热电偶
|
||
{
|
||
cursor_temp = (uint8_t)m5data.output_mode_type;
|
||
cursor_temp = (cursor_temp >= 7)?(5):(cursor_temp + 1);
|
||
m5data.output_mode_type = (SIG_FUNCTIONS_TYPE)cursor_temp;
|
||
|
||
set_working_mode(m5data.output_mode, m5data.output_mode_type);
|
||
}
|
||
break;
|
||
|
||
case SIG_RTD: //热电阻
|
||
{
|
||
m5data.input_mode_type = RTD_DC;
|
||
set_working_mode(m5data.input_mode, m5data.input_mode_type);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case KEY_SOURCE:
|
||
{
|
||
//电源开关靠硬件电路实现,此处可做预留
|
||
key = 0;
|
||
}
|
||
break;
|
||
|
||
case KEY_DOWN:
|
||
{
|
||
key = 0;
|
||
|
||
if(m5data.io_mode == IO_INPUT)
|
||
{
|
||
return;
|
||
}
|
||
|
||
m5data.twk_flag = 1; // 上、下、左、右 任意一个键按下后,闪烁开始
|
||
m5data.twk_cnt = 0; //每次按下后闪烁计数清零
|
||
|
||
uint8_t step = 1; //down键步长,默认为1
|
||
float32 step_real = 0; //实际值步长
|
||
float32 pv = 0, sv = 0, low = 0;
|
||
|
||
//根据当前游标位置计算步进值
|
||
step_real = step * my_power(10, (3 - m5data.io_cursor));
|
||
//按下down键后,即将刷新的实际值
|
||
pv = get_output_value();
|
||
sv = pv - step_real;
|
||
low = pltdata.yreal_pri_low;
|
||
|
||
if( sv <= low )
|
||
{
|
||
//超过下限的情况下,直接显示下限
|
||
sv = low;
|
||
sv *= 1000;
|
||
set_output(sv);
|
||
}
|
||
else
|
||
{
|
||
//没超过下限的情况下,仅考虑pv、0、sv三者的位置关系
|
||
if( sv >= 0 )
|
||
{
|
||
//一定为正数,直接调用以下函数,减小数值
|
||
change_nixie_cube_OUT(NIXIE_DECREASE, step);
|
||
}
|
||
else
|
||
{
|
||
if( pv < 0 )
|
||
{
|
||
//pv和sv都为负数的情况下,仅调转方向,增大数值
|
||
change_nixie_cube_OUT(NIXIE_INCREASE, step);
|
||
}
|
||
else
|
||
{
|
||
//跨越0后,负号点亮
|
||
//pv变为sv后跨越了0,数值可能增大也可能减小,因此直接赋值
|
||
sv *= 1000;
|
||
set_output(sv);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
|
||
case KEY_BACK: //闲置,预留
|
||
{
|
||
key = 0;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
{
|
||
key = 0;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
void scr_init_run(void)
|
||
{
|
||
if( m5data.scr_init_cnt <= SCREEN_INIT_CNT_MAX ) //进度条变化次数,在头文件中设置
|
||
{
|
||
if( m5data.tick_prv == -1 )
|
||
{
|
||
m5data.tick_prv = xTaskGetTickCount(); //记录起始时刻
|
||
}else
|
||
{
|
||
m5data.tick_cur = xTaskGetTickCount(); //记录当前时刻
|
||
|
||
if(m5data.tick_cur < m5data.tick_prv) //防止溢出(当前tick小于前一刻的tick)
|
||
{
|
||
m5data.tick_prv = -1; //溢出后复位并返回
|
||
m5data.tick_cur = -1;
|
||
return;
|
||
}
|
||
|
||
if(m5data.tick_cur - m5data.tick_prv >= 1000) //tick间隔达到目标后,执行功能
|
||
{
|
||
m5data.tick_prv = -1;
|
||
m5data.tick_cur = -1;
|
||
|
||
m5data.scr_init_bar = m5data.scr_init_cnt * ( 100/SCREEN_INIT_CNT_MAX );
|
||
lv_bar_set_value(guider_ui.screen_init_bar_1, m5data.scr_init_bar, LV_ANIM_OFF);
|
||
|
||
m5data.scr_init_cnt ++;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
|
||
// //开机动画结束后,清除初始界面内部组件,保留对象,释放内存
|
||
// lv_obj_clean(guider_ui.screen_init);
|
||
|
||
//加载主界面
|
||
setup_scr_screen_main(&guider_ui);
|
||
lv_scr_load(guider_ui.screen_main);
|
||
|
||
//删除初始界面对象,释放剩余内存
|
||
lv_obj_del(guider_ui.screen_init);
|
||
|
||
m5data.scr_init_flag = 1; //开机动画结束,只执行一次
|
||
m5data.scr_now = SCREEN_MAIN; //开机动画结束后,默认进入主界面
|
||
}
|
||
}
|
||
|
||
// uint8_t eep_tx = 0x72;
|
||
// uint8_t eep_rx = 0;
|
||
// uint8_t eep_addr[3];
|
||
// uint8_t eep_test_flag = 0;
|
||
// uint8_t eep_status = 0;
|
||
void scr_main_run(void)
|
||
{
|
||
//实时更新设定值
|
||
sig_sv_update(); //不做延时,尽快响应
|
||
|
||
//运行时间显示
|
||
runtime_show(); //1000ms
|
||
|
||
//电池电量显示
|
||
battery_show(); //3000ms
|
||
|
||
//动态曲线绘制
|
||
plot_drawing(); //1500ms
|
||
|
||
//当前输入值/测量值显示
|
||
input_value_show(); //500ms
|
||
|
||
//数值闪烁
|
||
num_twinkle(); //1000ms
|
||
|
||
|
||
// EEPROM_CS_L;
|
||
// delay_cnt(10);
|
||
// eeprom_spi_writebyte(READ_STATUS);
|
||
// eep_status = eeprom_spi_readbyte();
|
||
// delay_cnt(10);
|
||
// EEPROM_CS_H;
|
||
|
||
// delay_cnt(100);
|
||
|
||
// if(eep_test_flag == 0)
|
||
// {
|
||
// eep_test_flag = 1;
|
||
|
||
// eep_addr[0] = 0x00;
|
||
// eep_addr[1] = 0x00;
|
||
// eep_addr[2] = 0x00;
|
||
// eeprom_writedata(eep_addr, eep_tx);
|
||
|
||
// eep_rx = eeprom_readdata(eep_addr);
|
||
// }
|
||
}
|
||
|
||
void runtime_show(void)
|
||
{
|
||
if(heart_1000ms_flag)
|
||
{
|
||
heart_1000ms_flag = 0;
|
||
|
||
m5data.runtime_seconds ++;
|
||
if( m5data.runtime_seconds > 59) //秒溢出
|
||
{
|
||
m5data.runtime_minutes ++; //溢出后分钟进一
|
||
m5data.runtime_seconds = 0;
|
||
}
|
||
if(m5data.runtime_minutes > 59) //分钟溢出
|
||
{
|
||
m5data.runtime_hours ++; //溢出后小时进一
|
||
m5data.runtime_minutes = 0;
|
||
}
|
||
if(m5data.runtime_hours > 99) //小时溢出
|
||
{
|
||
m5data.runtime_seconds = 0; //溢出后全部归零
|
||
m5data.runtime_minutes = 0;
|
||
m5data.runtime_hours = 0;
|
||
}
|
||
|
||
// 00:00:00,该字符串的长度大于8,因此runtime_show应该分配大于8的内存
|
||
sprintf(m5data.runtime_show, "%02d:%02d:%02d",m5data.runtime_hours, m5data.runtime_minutes, m5data.runtime_seconds);
|
||
lv_span_set_text(guider_ui.screen_main_spangroup_time_span, m5data.runtime_show);
|
||
|
||
input_value_show(); //显示当前测量值
|
||
}
|
||
}
|
||
|
||
void battery_show(void)
|
||
{
|
||
//每隔3秒读取一次当前电量
|
||
if(battery_3000ms_flag)
|
||
{
|
||
battery_3000ms_flag = 0;
|
||
|
||
read_battery();
|
||
|
||
switch (bat_cpa)
|
||
{
|
||
case 0:
|
||
{
|
||
m5data.battery_cnt = 1;
|
||
}
|
||
break;
|
||
|
||
case 1:
|
||
{
|
||
m5data.battery_cnt = 2;
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
{
|
||
m5data.battery_cnt = 3;
|
||
}
|
||
break;
|
||
|
||
case 7:
|
||
{
|
||
m5data.battery_cnt = 4;
|
||
}
|
||
break;
|
||
|
||
case 15:
|
||
{
|
||
m5data.battery_cnt = 5;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
lv_img_set_src(guider_ui.screen_main_animimg_battery, screen_main_animimg_battery_imgs[m5data.battery_cnt]);
|
||
}
|
||
}
|
||
|
||
//设置游标位置【0000.000】,0~7
|
||
//中间有个小数点,小数点的显示宽度与数字不同,间隔与两个起点在头文件中设置
|
||
// 【】IO_CURSOR_INTERVAL【】IO_CURSOR_INTERVAL【】IO_CURSOR_INTERVAL【】.【】IO_CURSOR_INTERVAL【】IO_CURSOR_INTERVAL【】
|
||
// ↑ IO_CURSOR_START1 ↑ IO_CURSOR_START2
|
||
void set_cursor_position(void)
|
||
{
|
||
if(m5data.io_cursor <= 3)
|
||
{
|
||
lv_obj_set_pos(guider_ui.screen_main_img_cursor, IO_CURSOR_START1 + IO_CURSOR_INTERVAL * m5data.io_cursor, IO_CURSOR_Y);
|
||
}
|
||
else
|
||
{
|
||
lv_obj_set_pos(guider_ui.screen_main_img_cursor, IO_CURSOR_START2 + IO_CURSOR_INTERVAL * (m5data.io_cursor - 4), IO_CURSOR_Y);
|
||
}
|
||
}
|
||
|
||
//设置数码管符号位,0->熄灭,1->显示负号
|
||
void set_nixie_cube_sign(uint8_t on2off, uint8_t sg)
|
||
{
|
||
switch (on2off)
|
||
{
|
||
case IO_INPUT:
|
||
{
|
||
switch (sg)
|
||
{
|
||
case 0:
|
||
{
|
||
//熄灭负号
|
||
m5data.sign_flag_in = 0;
|
||
lv_img_set_src(guider_ui.screen_main_ani_in_sign, screen_main_ani_in_sign_imgs[0]);
|
||
}
|
||
break;
|
||
|
||
case 1:
|
||
{
|
||
//显示负号
|
||
m5data.sign_flag_in = 1;
|
||
lv_img_set_src(guider_ui.screen_main_ani_in_sign, screen_main_ani_in_sign_imgs[1]);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case IO_OUTPUT:
|
||
{
|
||
switch (sg)
|
||
{
|
||
case 0:
|
||
{
|
||
//熄灭负号
|
||
m5data.sign_flag_out = 0;
|
||
lv_img_set_src(guider_ui.screen_main_ani_out_sign, screen_main_ani_out_sign_imgs[0]);
|
||
}
|
||
break;
|
||
|
||
case 1:
|
||
{
|
||
//显示负号
|
||
m5data.sign_flag_out = 1;
|
||
lv_img_set_src(guider_ui.screen_main_ani_out_sign, screen_main_ani_out_sign_imgs[1]);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
}
|
||
|
||
//设置数码管显示值:io_slc-输入/输出,pos-第几个数字(99代表全部),num->(可正可负)实际数值*1000
|
||
void set_nixie_cube(uint8_t io_slc, uint8_t pos, int32_t num)
|
||
{
|
||
switch (io_slc)
|
||
{
|
||
case IO_INPUT:
|
||
{
|
||
switch (pos)
|
||
{
|
||
case 99:
|
||
{
|
||
if( (num < 0)&&(m5data.sign_flag_in == 0) )
|
||
{
|
||
//出现负数并且没有显示负号时
|
||
set_nixie_cube_sign(IO_INPUT, 1);
|
||
}
|
||
else if(( (num >= 0)&&(m5data.sign_flag_in == 1) ))
|
||
{
|
||
//数值为非负数,但仍然显示负号时
|
||
set_nixie_cube_sign(IO_INPUT, 0);
|
||
}
|
||
|
||
num = (m5data.sign_flag_in)?(0 - num):(num);
|
||
int32_t temp = 0;
|
||
//显示当前测量值,从左往右 0->6
|
||
temp = (num/1000000 > 9)?(0):(num/1000000);
|
||
lv_img_set_src(guider_ui.screen_main_ani_in_0, screen_main_ani_in_0_imgs[temp]);
|
||
m5data.i_numbers[0] = temp;
|
||
|
||
temp = (num/100000) % 10;
|
||
lv_img_set_src(guider_ui.screen_main_ani_in_1, screen_main_ani_in_1_imgs[temp]);
|
||
m5data.i_numbers[1] = temp;
|
||
|
||
temp = (num/10000) % 10;
|
||
lv_img_set_src(guider_ui.screen_main_ani_in_2, screen_main_ani_in_2_imgs[temp]);
|
||
m5data.i_numbers[2] = temp;
|
||
|
||
temp = (num/1000) % 10;
|
||
lv_img_set_src(guider_ui.screen_main_ani_in_3, screen_main_ani_in_3_imgs[temp]);
|
||
m5data.i_numbers[3] = temp;
|
||
|
||
temp = (num/100) % 10;
|
||
lv_img_set_src(guider_ui.screen_main_ani_in_4, screen_main_ani_in_4_imgs[temp]);
|
||
m5data.i_numbers[4] = temp;
|
||
|
||
temp = (num/10) % 10;
|
||
lv_img_set_src(guider_ui.screen_main_ani_in_5, screen_main_ani_in_5_imgs[temp]);
|
||
m5data.i_numbers[5] = temp;
|
||
|
||
temp = num % 10;
|
||
lv_img_set_src(guider_ui.screen_main_ani_in_6, screen_main_ani_in_6_imgs[temp]);
|
||
m5data.i_numbers[6] = temp;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
//只负责数字部分,不管符号
|
||
case IO_OUTPUT:
|
||
{
|
||
switch (pos)
|
||
{
|
||
case 0:
|
||
{
|
||
if(num > 10)
|
||
{
|
||
num = 10;
|
||
}
|
||
else if(num < 0)
|
||
{
|
||
num = 0;
|
||
}
|
||
|
||
lv_img_set_src(guider_ui.screen_main_ani_out_0, screen_main_ani_out_0_imgs[num]);
|
||
}
|
||
break;
|
||
|
||
case 1:
|
||
{
|
||
if(num > 10)
|
||
{
|
||
num = 10;
|
||
}
|
||
else if(num < 0)
|
||
{
|
||
num = 0;
|
||
}
|
||
|
||
lv_img_set_src(guider_ui.screen_main_ani_out_1, screen_main_ani_out_1_imgs[num]);
|
||
}
|
||
break;
|
||
|
||
case 2:
|
||
{
|
||
if(num > 10)
|
||
{
|
||
num = 10;
|
||
}
|
||
else if(num < 0)
|
||
{
|
||
num = 0;
|
||
}
|
||
|
||
lv_img_set_src(guider_ui.screen_main_ani_out_2, screen_main_ani_out_2_imgs[num]);
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
{
|
||
if(num > 10)
|
||
{
|
||
num = 10;
|
||
}
|
||
else if(num < 0)
|
||
{
|
||
num = 0;
|
||
}
|
||
|
||
lv_img_set_src(guider_ui.screen_main_ani_out_3, screen_main_ani_out_3_imgs[num]);
|
||
}
|
||
break;
|
||
|
||
case 4:
|
||
{
|
||
if(num > 10)
|
||
{
|
||
num = 10;
|
||
}
|
||
else if(num < 0)
|
||
{
|
||
num = 0;
|
||
}
|
||
|
||
lv_img_set_src(guider_ui.screen_main_ani_out_4, screen_main_ani_out_4_imgs[num]);
|
||
}
|
||
break;
|
||
|
||
case 5:
|
||
{
|
||
if(num > 10)
|
||
{
|
||
num = 10;
|
||
}
|
||
else if(num < 0)
|
||
{
|
||
num = 0;
|
||
}
|
||
|
||
lv_img_set_src(guider_ui.screen_main_ani_out_5, screen_main_ani_out_5_imgs[num]);
|
||
}
|
||
break;
|
||
|
||
case 6:
|
||
{
|
||
if(num > 10)
|
||
{
|
||
num = 10;
|
||
}
|
||
else if(num < 0)
|
||
{
|
||
num = 0;
|
||
}
|
||
|
||
lv_img_set_src(guider_ui.screen_main_ani_out_6, screen_main_ani_out_6_imgs[num]);
|
||
}
|
||
break;
|
||
|
||
case 99:
|
||
{
|
||
//负数转正数
|
||
num = ( num >= 0 )?(num):(0 - num);
|
||
|
||
if(num > 9999999)
|
||
{
|
||
num = 9999999;
|
||
}
|
||
else if(num < 0)
|
||
{
|
||
num = 0;
|
||
}
|
||
|
||
int32_t temp = 0;
|
||
//显示当前测量值,从左往右 0->6
|
||
temp = (num/1000000 > 9)?(0):(num/1000000);
|
||
lv_img_set_src(guider_ui.screen_main_ani_out_0, screen_main_ani_out_0_imgs[temp]);
|
||
|
||
temp = (num/100000) % 10;
|
||
lv_img_set_src(guider_ui.screen_main_ani_out_1, screen_main_ani_out_1_imgs[temp]);
|
||
|
||
temp = (num/10000) % 10;
|
||
lv_img_set_src(guider_ui.screen_main_ani_out_2, screen_main_ani_out_2_imgs[temp]);
|
||
temp = (num/1000) % 10;
|
||
lv_img_set_src(guider_ui.screen_main_ani_out_3, screen_main_ani_out_3_imgs[temp]);
|
||
|
||
temp = (num/100) % 10;
|
||
lv_img_set_src(guider_ui.screen_main_ani_out_4, screen_main_ani_out_4_imgs[temp]);
|
||
|
||
temp = (num/10) % 10;
|
||
lv_img_set_src(guider_ui.screen_main_ani_out_5, screen_main_ani_out_5_imgs[temp]);
|
||
|
||
temp = num % 10;
|
||
lv_img_set_src(guider_ui.screen_main_ani_out_6, screen_main_ani_out_6_imgs[temp]);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
//设置当前的输出值((可正可负)实际值*1000 -> 数组)
|
||
void set_output_value(int32_t pvo)
|
||
{
|
||
pvo = (pvo > 0)?(pvo):(0 - pvo);
|
||
//将实际值转换成6个独立数字
|
||
m5data.o_numbers[0] = (pvo/1000000 > 9)?(9):(pvo/1000000);
|
||
m5data.o_numbers[1] = (pvo/100000) % 10;
|
||
m5data.o_numbers[2] = (pvo/10000) % 10;
|
||
m5data.o_numbers[3] = (pvo/1000) % 10;
|
||
m5data.o_numbers[4] = (pvo/100) % 10;
|
||
m5data.o_numbers[5] = (pvo/10) % 10;
|
||
m5data.o_numbers[6] = pvo % 10;
|
||
}
|
||
|
||
//设置输出值:数字显示 + 符号 + 缓存,sto:实际值*1000
|
||
void set_output(int32_t sto)
|
||
{
|
||
//显示
|
||
set_nixie_cube(IO_OUTPUT, 99, sto);
|
||
|
||
//缓存
|
||
set_output_value(sto);
|
||
|
||
//符号
|
||
if( sto >= 0 )
|
||
{
|
||
set_nixie_cube_sign(IO_OUTPUT, 0);
|
||
}
|
||
else
|
||
{
|
||
set_nixie_cube_sign(IO_OUTPUT, 1);
|
||
}
|
||
}
|
||
|
||
//获取当前设定的输出值
|
||
float32 get_output_value(void)
|
||
{
|
||
float32 pvo = 0;
|
||
|
||
pvo = m5data.o_numbers[0]*1000 + m5data.o_numbers[1]*100 + 10*m5data.o_numbers[2] + \
|
||
m5data.o_numbers[3] + m5data.o_numbers[4]*(float32)0.1 + m5data.o_numbers[5]*(float32)0.01 + m5data.o_numbers[6]*(float32)0.001;
|
||
|
||
pvo = (m5data.sign_flag_out)?(0 - pvo):(pvo);
|
||
|
||
return pvo;
|
||
}
|
||
|
||
//改变数码管的显示与缓存值,dir:增加或减少(NIXIE_INCREASE & NIXIE_DECREASE),val:改变量(通常为1)
|
||
//该函数仅适用于改变前后符号相同的情况
|
||
void change_nixie_cube_OUT(uint8_t dir, uint8_t val)
|
||
{
|
||
switch (dir)
|
||
{
|
||
case NIXIE_INCREASE:
|
||
{
|
||
switch (m5data.io_cursor)
|
||
{
|
||
//达到9之后保持不变,不作循环处理
|
||
case 0:
|
||
{
|
||
m5data.o_numbers[0] = (m5data.o_numbers[0] >= 9)?(9):(m5data.o_numbers[0] + val);
|
||
|
||
set_nixie_cube(IO_OUTPUT, 0, m5data.o_numbers[0]);
|
||
}
|
||
break;
|
||
|
||
//当前面(第0个)数字不全为9时,循环计数,溢出标志置1,否则保持9不变。
|
||
case 1:
|
||
{
|
||
if(m5data.o_numbers[1] >= 9)
|
||
{
|
||
if( m5data.o_numbers[0]!=9 )
|
||
{
|
||
m5data.o_numbers[1] = 0;
|
||
m5data.overflow_flag_up = 1;
|
||
}
|
||
else
|
||
{
|
||
m5data.o_numbers[1] = 9;
|
||
}
|
||
}else
|
||
{
|
||
m5data.o_numbers[1] += val;
|
||
}
|
||
|
||
set_nixie_cube(IO_OUTPUT, 1, m5data.o_numbers[1]);
|
||
}
|
||
break;
|
||
|
||
//当前面(第0~1个)数字不全为9时,循环计数,溢出标志置1,否则保持9不变。
|
||
case 2:
|
||
{
|
||
if(m5data.o_numbers[2] >= 9)
|
||
{
|
||
if( (m5data.o_numbers[0]!=9)||(m5data.o_numbers[1]!=9))
|
||
{
|
||
m5data.o_numbers[2] = 0;
|
||
m5data.overflow_flag_up = 2;
|
||
}
|
||
else
|
||
{
|
||
m5data.o_numbers[2] = 9;
|
||
}
|
||
}else
|
||
{
|
||
m5data.o_numbers[2] += val;
|
||
}
|
||
|
||
set_nixie_cube(IO_OUTPUT, 2, m5data.o_numbers[2]);
|
||
}
|
||
break;
|
||
|
||
//当前面(第0~2个)数字不全为9时,循环计数,溢出标志置1,否则保持9不变。
|
||
case 3:
|
||
{
|
||
if(m5data.o_numbers[3] >= 9)
|
||
{
|
||
if( (m5data.o_numbers[0]!=9)||(m5data.o_numbers[1]!=9)||(m5data.o_numbers[2]!=9))
|
||
{
|
||
m5data.o_numbers[3] = 0;
|
||
m5data.overflow_flag_up = 3;
|
||
}
|
||
else
|
||
{
|
||
m5data.o_numbers[3] = 9;
|
||
}
|
||
}else
|
||
{
|
||
m5data.o_numbers[3] += val;
|
||
}
|
||
|
||
set_nixie_cube(IO_OUTPUT, 3, m5data.o_numbers[3]);
|
||
}
|
||
break;
|
||
|
||
//当前面(第0~3个)数字不全为9时,循环计数,溢出标志置1,否则保持9不变。
|
||
case 4:
|
||
{
|
||
if(m5data.o_numbers[4] >= 9)
|
||
{
|
||
if( (m5data.o_numbers[0]!=9)||(m5data.o_numbers[1]!=9)||(m5data.o_numbers[2]!=9)||(m5data.o_numbers[3]!=9))
|
||
{
|
||
m5data.o_numbers[4] = 0;
|
||
m5data.overflow_flag_up = 4;
|
||
}
|
||
else
|
||
{
|
||
m5data.o_numbers[4] = 9;
|
||
}
|
||
}else
|
||
{
|
||
m5data.o_numbers[4] += val;
|
||
}
|
||
|
||
set_nixie_cube(IO_OUTPUT, 4, m5data.o_numbers[4]);
|
||
}
|
||
break;
|
||
|
||
//当前面(第0~4个)数字不全为9时,循环计数,溢出标志置1,否则保持9不变。
|
||
case 5:
|
||
{
|
||
if(m5data.o_numbers[5] >= 9)
|
||
{
|
||
if( (m5data.o_numbers[0]!=9)||(m5data.o_numbers[1]!=9)||(m5data.o_numbers[2]!=9)||(m5data.o_numbers[3]!=9)||(m5data.o_numbers[4]!=9))
|
||
{
|
||
m5data.o_numbers[5] = 0;
|
||
m5data.overflow_flag_up = 5;
|
||
}
|
||
else
|
||
{
|
||
m5data.o_numbers[5] = 9;
|
||
}
|
||
}else
|
||
{
|
||
m5data.o_numbers[5] += val;
|
||
}
|
||
|
||
set_nixie_cube(IO_OUTPUT, 5, m5data.o_numbers[5]);
|
||
}
|
||
break;
|
||
|
||
//当前面(第0~5个)数字不全为9时,循环计数,溢出标志置1,否则保持9不变。
|
||
case 6:
|
||
{
|
||
if(m5data.o_numbers[6] >= 9)
|
||
{
|
||
if( (m5data.o_numbers[0]!=9)||(m5data.o_numbers[1]!=9)||(m5data.o_numbers[2]!=9)||(m5data.o_numbers[3]!=9)||(m5data.o_numbers[4]!=9)||(m5data.o_numbers[5]!=9))
|
||
{
|
||
m5data.o_numbers[6] = 0;
|
||
m5data.overflow_flag_up = 6;
|
||
}
|
||
else
|
||
{
|
||
m5data.o_numbers[6] = 9;
|
||
}
|
||
}else
|
||
{
|
||
m5data.o_numbers[6] += val;
|
||
}
|
||
|
||
set_nixie_cube(IO_OUTPUT, 6, m5data.o_numbers[6]);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
//发生向上溢出时,根据溢出的位置对实际数值进行处理
|
||
if(m5data.overflow_flag_up)
|
||
{
|
||
int32_t oftemp = 0;
|
||
//还原成实际数值
|
||
oftemp = 1000000*m5data.o_numbers[0] + 100000*m5data.o_numbers[1] + 10000*m5data.o_numbers[2] + \
|
||
1000*m5data.o_numbers[3] + 100*m5data.o_numbers[4] + 10*m5data.o_numbers[5] + m5data.o_numbers[6];
|
||
|
||
//根据溢出的位置对实际值进行计算
|
||
oftemp += my_power(10, ( 7 - m5data.overflow_flag_up) );
|
||
|
||
set_nixie_cube(IO_OUTPUT, 99, oftemp);
|
||
|
||
set_output_value(oftemp);
|
||
|
||
//溢出处理完成,标志清零
|
||
m5data.overflow_flag_up = 0;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case NIXIE_DECREASE:
|
||
{
|
||
switch (m5data.io_cursor)
|
||
{
|
||
case 0:
|
||
{
|
||
if(m5data.o_numbers[0] <= 0)
|
||
{
|
||
m5data.o_numbers[0] = 0;
|
||
}
|
||
else
|
||
{
|
||
m5data.o_numbers[0] -= val;
|
||
}
|
||
|
||
set_nixie_cube(IO_OUTPUT, 0, m5data.o_numbers[0]);
|
||
}
|
||
break;
|
||
|
||
case 1:
|
||
{
|
||
if(m5data.o_numbers[1] <= 0)
|
||
{
|
||
if(m5data.o_numbers[0])
|
||
{
|
||
m5data.o_numbers[1] = 9;
|
||
m5data.overflow_flag_low = 1;
|
||
}
|
||
else
|
||
{
|
||
m5data.o_numbers[1] = 0;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
m5data.o_numbers[1] -= val;
|
||
}
|
||
|
||
set_nixie_cube(IO_OUTPUT, 1, m5data.o_numbers[1]);
|
||
}
|
||
break;
|
||
|
||
case 2:
|
||
{
|
||
if(m5data.o_numbers[2] <= 0)
|
||
{
|
||
if(m5data.o_numbers[0]||m5data.o_numbers[1])
|
||
{
|
||
m5data.o_numbers[2] = 9;
|
||
m5data.overflow_flag_low = 2;
|
||
}
|
||
else
|
||
{
|
||
m5data.o_numbers[2] = 0;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
m5data.o_numbers[2] -= val;
|
||
}
|
||
|
||
set_nixie_cube(IO_OUTPUT, 2, m5data.o_numbers[2]);
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
{
|
||
if(m5data.o_numbers[3] <= 0)
|
||
{
|
||
if(m5data.o_numbers[0]||m5data.o_numbers[1]||m5data.o_numbers[2])
|
||
{
|
||
m5data.o_numbers[3] = 9;
|
||
m5data.overflow_flag_low = 3;
|
||
}
|
||
else
|
||
{
|
||
m5data.o_numbers[3] = 0;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
m5data.o_numbers[3] -= val;
|
||
}
|
||
|
||
set_nixie_cube(IO_OUTPUT, 3, m5data.o_numbers[3]);
|
||
}
|
||
break;
|
||
|
||
case 4:
|
||
{
|
||
if(m5data.o_numbers[4] <= 0)
|
||
{
|
||
if(m5data.o_numbers[0]||m5data.o_numbers[1]||m5data.o_numbers[2]||m5data.o_numbers[3])
|
||
{
|
||
m5data.o_numbers[4] = 9;
|
||
m5data.overflow_flag_low = 4;
|
||
}
|
||
else
|
||
{
|
||
m5data.o_numbers[4] = 0;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
m5data.o_numbers[4] -= val;
|
||
}
|
||
|
||
set_nixie_cube(IO_OUTPUT, 4, m5data.o_numbers[4]);
|
||
}
|
||
break;
|
||
|
||
case 5:
|
||
{
|
||
if(m5data.o_numbers[5] <= 0)
|
||
{
|
||
if(m5data.o_numbers[0]||m5data.o_numbers[1]||m5data.o_numbers[2]||m5data.o_numbers[3]||m5data.o_numbers[4])
|
||
{
|
||
m5data.o_numbers[5] = 9;
|
||
m5data.overflow_flag_low = 5;
|
||
}
|
||
else
|
||
{
|
||
m5data.o_numbers[5] = 0;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
m5data.o_numbers[5] -= val;
|
||
}
|
||
|
||
set_nixie_cube(IO_OUTPUT, 5, m5data.o_numbers[5]);
|
||
}
|
||
break;
|
||
|
||
case 6:
|
||
{
|
||
if(m5data.o_numbers[6] <= 0)
|
||
{
|
||
if(m5data.o_numbers[0]||m5data.o_numbers[1]||m5data.o_numbers[2]||m5data.o_numbers[3]||m5data.o_numbers[4]||m5data.o_numbers[5])
|
||
{
|
||
m5data.o_numbers[6] = 9;
|
||
m5data.overflow_flag_low = 6;
|
||
}
|
||
else
|
||
{
|
||
m5data.o_numbers[6] = 0;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
m5data.o_numbers[6] -= val;
|
||
}
|
||
|
||
set_nixie_cube(IO_OUTPUT, 6, m5data.o_numbers[6]);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
//向下溢出处理
|
||
if(m5data.overflow_flag_low)
|
||
{
|
||
int32_t oftemp = 0;
|
||
oftemp = 1000000*m5data.o_numbers[0] + 100000*m5data.o_numbers[1] + 10000*m5data.o_numbers[2] + \
|
||
1000*m5data.o_numbers[3] + 100*m5data.o_numbers[4] + 10*m5data.o_numbers[5] + m5data.o_numbers[6];
|
||
|
||
oftemp -= my_power(10, ( 7 - m5data.overflow_flag_low) );
|
||
|
||
//更新数码管显示
|
||
set_nixie_cube(IO_OUTPUT, 99, oftemp);
|
||
|
||
//更新数码管数组
|
||
set_output_value(oftemp);
|
||
|
||
//溢出标志清零
|
||
m5data.overflow_flag_low = 0;
|
||
}
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
//通道选择与切换
|
||
void sig_channel_select(uint8_t io, SIG_FUNCTIONS_TYPE type)
|
||
{
|
||
switch (io)
|
||
{
|
||
case IO_INPUT:
|
||
{
|
||
switch (type)
|
||
{
|
||
case VOLTAGE_MV:
|
||
{
|
||
mux_signal.channel = CH6_IN_MVOL;
|
||
}
|
||
break;
|
||
|
||
case VOLTAGE_V:
|
||
{
|
||
mux_signal.channel = CH5_IN_VOL;
|
||
}
|
||
break;
|
||
|
||
case CURRENT_MA:
|
||
{
|
||
mux_signal.channel = CH7_IN_CUR;
|
||
}
|
||
break;
|
||
|
||
case RESISTANT_OHM:
|
||
{}
|
||
break;
|
||
|
||
case FREQUENCE_KHZ:
|
||
{
|
||
mux_signal.channel = CH8_IN_FRE;
|
||
}
|
||
break;
|
||
|
||
case TC_K:
|
||
{
|
||
mux_signal.channel = CH9_IN_TC;
|
||
}
|
||
break;
|
||
|
||
case RTD_DC:
|
||
{
|
||
mux_signal.channel = CH10_IN_RTD;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case IO_OUTPUT:
|
||
{
|
||
switch (type)
|
||
{
|
||
case VOLTAGE_MV:
|
||
{
|
||
mux_signal.channel = CH1_OUT_VOL_MV;
|
||
}
|
||
break;
|
||
|
||
case VOLTAGE_V:
|
||
{
|
||
mux_signal.channel = CH0_OUT_VOL_V;
|
||
}
|
||
break;
|
||
|
||
case CURRENT_MA:
|
||
{
|
||
mux_signal.channel = CH2_OUT_CUR;
|
||
}
|
||
break;
|
||
|
||
case RESISTANT_OHM:
|
||
{
|
||
mux_signal.channel = CH4_OUT_RES;
|
||
}
|
||
break;
|
||
|
||
case FREQUENCE_KHZ:
|
||
{
|
||
mux_signal.channel = CH3_OUT_FRE;
|
||
}
|
||
break;
|
||
|
||
case TC_K:
|
||
{
|
||
}
|
||
break;
|
||
|
||
case RTD_DC:
|
||
{
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
//更新设定值(根据ON\OFF状态)
|
||
float32 sv_watch = 0;
|
||
void sig_sv_update(void)
|
||
{
|
||
switch (m5data.io_on2off)
|
||
{
|
||
case IO_ON:
|
||
{
|
||
sv_watch = get_output_value();
|
||
mux_signal.data_sv = get_output_value();
|
||
}
|
||
break;
|
||
|
||
case IO_OFF:
|
||
{
|
||
mux_signal.data_sv = 0;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
//设置工作模式和工作模式类型
|
||
void set_working_mode(SIG_FUNCTIONS mode, SIG_FUNCTIONS_TYPE type)
|
||
{
|
||
//为保障安全,切换工作模式后:功能关闭,输入输出值清零
|
||
//{
|
||
//功能关闭
|
||
m5data.io_on2off = IO_OFF;
|
||
io_on2off_status(); //更新ON/OFF/IN/OUT状态指示
|
||
|
||
//清空数码管输入显示值缓存
|
||
for(uint8_t i = 0; i < 7; i++) //用于数值显示的数组,初值为0
|
||
{
|
||
m5data.i_numbers[i] = 0; //输入值/测量值
|
||
}
|
||
//数码管输入显示置零
|
||
set_nixie_cube(IO_INPUT, 99, 0);
|
||
|
||
//数码管输出值置零
|
||
set_output(0);
|
||
|
||
//游标恢复至小数点前1位,个位
|
||
m5data.io_cursor = 3;
|
||
m5data.io_cursor_prv = 3;
|
||
set_cursor_position();
|
||
|
||
//闪烁参数清零
|
||
m5data.twk_flag = 0; //闪烁中止
|
||
m5data.twk_cnt = 0; //闪烁计数清零
|
||
m5data.twk_flip = 0; //0显示,1不显示
|
||
|
||
//曲线绘图值清零(输入缓存已经置零,绘图值不必清零)
|
||
pltdata.yreal_scd_value = 0;
|
||
pltdata.yreal_scd_value_prv = 0;
|
||
//}
|
||
|
||
switch (mode)
|
||
{
|
||
//电压
|
||
case SIG_VOLTAGE:
|
||
{
|
||
lv_label_set_text(guider_ui.screen_main_label_Mode, "Volt");
|
||
|
||
switch (type)
|
||
{
|
||
case VOLTAGE_MV:
|
||
{
|
||
lv_label_set_text(guider_ui.screen_main_label_unit, "mV");
|
||
|
||
pltdata.yreal_pri_up = tabdata.content01[1];
|
||
pltdata.yreal_scd_up = tabdata.content01[1];
|
||
pltdata.yreal_pri_low = tabdata.content02[1];
|
||
pltdata.yreal_scd_low = tabdata.content02[1];
|
||
}
|
||
break;
|
||
|
||
case VOLTAGE_V:
|
||
{
|
||
lv_label_set_text(guider_ui.screen_main_label_unit, "V");
|
||
|
||
pltdata.yreal_pri_up = tabdata.content01[0];
|
||
pltdata.yreal_scd_up = tabdata.content01[0];
|
||
pltdata.yreal_pri_low = tabdata.content02[0];
|
||
pltdata.yreal_scd_low = tabdata.content02[0];
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
}
|
||
break;
|
||
|
||
//电流
|
||
case SIG_CURRENT:
|
||
{
|
||
lv_label_set_text(guider_ui.screen_main_label_Mode, "Cur");
|
||
|
||
switch (type)
|
||
{
|
||
case CURRENT_MA:
|
||
{
|
||
lv_label_set_text(guider_ui.screen_main_label_unit, "mA");
|
||
|
||
pltdata.yreal_pri_up = tabdata.content03;
|
||
pltdata.yreal_scd_up = tabdata.content03;
|
||
pltdata.yreal_pri_low = tabdata.content04;
|
||
pltdata.yreal_scd_low = tabdata.content04;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
//电阻
|
||
case SIG_RESISTANT:
|
||
{
|
||
lv_label_set_text(guider_ui.screen_main_label_Mode, "Res");
|
||
|
||
switch (type)
|
||
{
|
||
case RESISTANT_OHM:
|
||
{
|
||
lv_label_set_text(guider_ui.screen_main_label_unit, "Ω");
|
||
|
||
pltdata.yreal_pri_up = tabdata.content05;
|
||
pltdata.yreal_scd_up = tabdata.content05;
|
||
pltdata.yreal_pri_low = tabdata.content06;
|
||
pltdata.yreal_scd_low = tabdata.content06;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
//频率
|
||
case SIG_FREQUENCE:
|
||
{
|
||
lv_label_set_text(guider_ui.screen_main_label_Mode, "Fre");
|
||
|
||
switch (type)
|
||
{
|
||
case FREQUENCE_KHZ:
|
||
{
|
||
lv_label_set_text(guider_ui.screen_main_label_unit, "KHz");
|
||
|
||
pltdata.yreal_pri_up = tabdata.content07;
|
||
pltdata.yreal_scd_up = tabdata.content07;
|
||
pltdata.yreal_pri_low = tabdata.content08;
|
||
pltdata.yreal_scd_low = tabdata.content08;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
//热电偶
|
||
case SIG_TC:
|
||
{
|
||
//-250~1820℃
|
||
lv_label_set_text(guider_ui.screen_main_label_Mode, "Tc");
|
||
|
||
switch (type)
|
||
{
|
||
case TC_K:
|
||
{
|
||
lv_label_set_text(guider_ui.screen_main_label_unit, "K ℃");
|
||
|
||
pltdata.yreal_pri_up = tabdata.content09;
|
||
pltdata.yreal_scd_up = tabdata.content09;
|
||
pltdata.yreal_pri_low = tabdata.content010;
|
||
pltdata.yreal_scd_low = tabdata.content010;
|
||
}
|
||
break;
|
||
|
||
case TC_N:
|
||
{
|
||
lv_label_set_text(guider_ui.screen_main_label_unit, "N ℃");
|
||
|
||
pltdata.yreal_pri_up = tabdata.content09;
|
||
pltdata.yreal_scd_up = tabdata.content09;
|
||
pltdata.yreal_pri_low = tabdata.content010;
|
||
pltdata.yreal_scd_low = tabdata.content010;
|
||
}
|
||
break;
|
||
|
||
case TC_S:
|
||
{
|
||
lv_label_set_text(guider_ui.screen_main_label_unit, "S ℃");
|
||
|
||
pltdata.yreal_pri_up = tabdata.content09;
|
||
pltdata.yreal_scd_up = tabdata.content09;
|
||
pltdata.yreal_pri_low = tabdata.content010;
|
||
pltdata.yreal_scd_low = tabdata.content010;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
//热电阻
|
||
case SIG_RTD:
|
||
{
|
||
//-200~850℃
|
||
lv_label_set_text(guider_ui.screen_main_label_Mode, "RTD");
|
||
|
||
switch (type)
|
||
{
|
||
case RTD_DC:
|
||
{
|
||
lv_label_set_text(guider_ui.screen_main_label_unit, "℃");
|
||
|
||
pltdata.yreal_pri_up = tabdata.content011;
|
||
pltdata.yreal_scd_up = tabdata.content011;
|
||
pltdata.yreal_pri_low = tabdata.content012;
|
||
pltdata.yreal_scd_low = tabdata.content012;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
//当前输入数值更新为新的上下限
|
||
pltdata.yreal_scd_value = pltdata.yreal_scd_low;
|
||
pltdata.yreal_scd_value_prv = pltdata.yreal_scd_low;
|
||
set_nixie_cube(IO_INPUT, 99, pltdata.yreal_scd_low*1000);
|
||
|
||
//当前输出数值更新为新的上下限
|
||
set_output(pltdata.yreal_pri_low*1000);
|
||
|
||
//通道选择与切换
|
||
sig_channel_select(m5data.io_mode, type);
|
||
}
|
||
|
||
void input_value_show(void)
|
||
{
|
||
if(input_500ms_flag)
|
||
{
|
||
input_500ms_flag = 0;
|
||
|
||
//获取输入值
|
||
pltdata.yreal_scd_value = mux_signal.data_pv;
|
||
|
||
if( MY_ABS(pltdata.yreal_scd_value - pltdata.yreal_scd_value_prv) < (float32)0.01)
|
||
{
|
||
//变化值过小的情况下不更新显示内容
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
//记录前一时刻的值,用于计算变化量
|
||
pltdata.yreal_scd_value_prv = pltdata.yreal_scd_value;
|
||
}
|
||
|
||
int32_t pvi = 0;
|
||
|
||
//输入显示限幅
|
||
if(pltdata.yreal_scd_value >= pltdata.yreal_scd_up)
|
||
{
|
||
pvi = pltdata.yreal_scd_up*1000;
|
||
}
|
||
else if (pltdata.yreal_scd_value <= pltdata.yreal_scd_low)
|
||
{
|
||
pvi = pltdata.yreal_scd_low*1000;
|
||
}
|
||
else
|
||
{
|
||
pvi = (int32_t)(pltdata.yreal_scd_value * 1000); //副轴用于绘制实时输入测量值
|
||
}
|
||
|
||
set_nixie_cube(IO_INPUT, 99, pvi);
|
||
}
|
||
}
|
||
|
||
void io_on2off_status(void)
|
||
{
|
||
switch (m5data.io_on2off)
|
||
{
|
||
case IO_ON:
|
||
{
|
||
lv_label_set_text(guider_ui.screen_main_label_ONOFF, "ON");
|
||
|
||
switch (m5data.io_mode)
|
||
{
|
||
case IO_OUTPUT:
|
||
{
|
||
//输入变回黑色,输出变为绿色
|
||
lv_obj_set_style_text_color(guider_ui.screen_main_label_IN, lv_color_hex(0x000000), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
lv_obj_set_style_text_color(guider_ui.screen_main_label_OUT, lv_color_hex(0x06ff00), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case IO_INPUT:
|
||
{
|
||
//输出变回黑色,输入变为绿色
|
||
lv_obj_set_style_text_color(guider_ui.screen_main_label_IN, lv_color_hex(0x06ff00), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
lv_obj_set_style_text_color(guider_ui.screen_main_label_OUT, lv_color_hex(0x000000), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case IO_OFF:
|
||
{
|
||
lv_label_set_text(guider_ui.screen_main_label_ONOFF, "OFF");
|
||
|
||
switch (m5data.io_mode)
|
||
{
|
||
case IO_OUTPUT:
|
||
{
|
||
//输入变回黑色,输出变为红色
|
||
lv_obj_set_style_text_color(guider_ui.screen_main_label_IN, lv_color_hex(0x000000), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
lv_obj_set_style_text_color(guider_ui.screen_main_label_OUT, lv_color_hex(0xff0027), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case IO_INPUT:
|
||
{
|
||
//输出变回黑色,输入变为红色
|
||
lv_obj_set_style_text_color(guider_ui.screen_main_label_IN, lv_color_hex(0x06ff00), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
lv_obj_set_style_text_color(guider_ui.screen_main_label_OUT, lv_color_hex(0x000000), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
//KEY_SETTING
|
||
void key_functions_setting(void)
|
||
{
|
||
switch (key)
|
||
{
|
||
case KEY_BACK:
|
||
{
|
||
key = 0;
|
||
|
||
//所有选项卡均未选中时,返回主界面,否则熄灭当前选中
|
||
if(tabdata.content_cursor == 99)
|
||
{
|
||
//下次进入设置页面时,从选项卡0开始
|
||
tabdata.item_cursor = 0;
|
||
|
||
//加载主界面
|
||
setup_scr_screen_main(&guider_ui);
|
||
lv_scr_load(guider_ui.screen_main);
|
||
|
||
//切换至菜单后,清除主界面对象,释放内存
|
||
lv_obj_del(guider_ui.screen_setting);
|
||
|
||
//当前界面为主界面
|
||
m5data.scr_now = SCREEN_MAIN;
|
||
|
||
//恢复之前显示的数据
|
||
scr_main_recover();
|
||
}
|
||
else
|
||
{
|
||
if(tabdata.content_focus == 0)
|
||
{
|
||
//当不存在焦点时
|
||
//某个选项卡被选中时,熄灭内部选中的内容
|
||
switch (tabdata.item_cursor)
|
||
{
|
||
case ITEMS_0:
|
||
{
|
||
//熄灭当前内容
|
||
setting_contents_check(99, tabdata.content_cursor);
|
||
|
||
//取消内容选中与焦点
|
||
tabdata.content_cursor = 99;
|
||
tabdata.content_cursor_prv = 99;
|
||
tabdata.content_focus = 0;
|
||
tabdata.content_cursor_x = 0;
|
||
tabdata.content_cursor_y = 0;
|
||
|
||
}
|
||
break;
|
||
|
||
case ITEMS_1:
|
||
{
|
||
//取消内容选中与焦点
|
||
//熄灭当前内容
|
||
setting_contents_check(99, tabdata.content_cursor);
|
||
|
||
tabdata.content_cursor = 99;
|
||
tabdata.content_cursor_prv = 99;
|
||
tabdata.content_focus = 0;
|
||
tabdata.content_cursor_x = 0;
|
||
tabdata.content_cursor_y = 0;
|
||
}
|
||
break;
|
||
|
||
case ITEMS_2:
|
||
{
|
||
//取消内容选中与焦点
|
||
tabdata.content_cursor = 99;
|
||
tabdata.content_cursor_prv = 99;
|
||
tabdata.content_focus = 0;
|
||
tabdata.content_cursor_x = 0;
|
||
tabdata.content_cursor_y = 0;
|
||
}
|
||
break;
|
||
|
||
case ITEMS_3:
|
||
{
|
||
//取消内容选中与焦点
|
||
tabdata.content_cursor = 99;
|
||
tabdata.content_cursor_prv = 99;
|
||
tabdata.content_focus = 0;
|
||
tabdata.content_cursor_x = 0;
|
||
tabdata.content_cursor_y = 0;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//当存在焦点时
|
||
tabdata.content_focus = 0;
|
||
setting_contents_check(tabdata.content_cursor, 99);
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
|
||
case KEY_UP:
|
||
{
|
||
key = 0;
|
||
|
||
//内部游标为99时,说明未选中任何一个选项卡,此时的up和down用于切换选项卡
|
||
if(tabdata.content_cursor == 99)
|
||
{
|
||
tabdata.item_cursor_prv = tabdata.item_cursor;
|
||
tabdata.item_cursor = (tabdata.item_cursor <= 0)?(3):(tabdata.item_cursor - 1);
|
||
|
||
setting_items_check(tabdata.item_cursor, tabdata.item_cursor_prv);
|
||
}
|
||
else
|
||
{
|
||
//某个内容被焦点前,在此处选择内容值
|
||
if(tabdata.content_focus == 0)
|
||
{
|
||
switch (tabdata.item_cursor)
|
||
{
|
||
case ITEMS_0:
|
||
{
|
||
tabdata.content_cursor_prv = tabdata.content_cursor;
|
||
tabdata.content_cursor_y = (tabdata.content_cursor_y <= 0)?(5):(tabdata.content_cursor_y - 1);
|
||
|
||
tabdata.content_cursor = contents_xy2cursor(tabdata.content_cursor_x, tabdata.content_cursor_y);
|
||
setting_contents_check(tabdata.content_cursor, tabdata.content_cursor_prv);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
|
||
}
|
||
else
|
||
{
|
||
//某个内容被焦点后,在此处修改内容值
|
||
setting_contents_modify(tabdata.item_cursor, tabdata.content_cursor, KEY_UP, 1);
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
|
||
case KEY_DOWN:
|
||
{
|
||
key = 0;
|
||
|
||
//内部游标为99时,说明未选中任何一个选项卡,此时的up和down用于切换选项卡
|
||
if(tabdata.content_cursor == 99)
|
||
{
|
||
tabdata.item_cursor_prv = tabdata.item_cursor;
|
||
tabdata.item_cursor = (tabdata.item_cursor >= 3)?(0):(tabdata.item_cursor + 1);
|
||
|
||
setting_items_check(tabdata.item_cursor, tabdata.item_cursor_prv);
|
||
}
|
||
else
|
||
{
|
||
if(tabdata.content_focus == 0)
|
||
{
|
||
//某个内容被焦点前,在此处选择内容值
|
||
switch (tabdata.item_cursor)
|
||
{
|
||
case ITEMS_0:
|
||
{
|
||
tabdata.content_cursor_prv = tabdata.content_cursor;
|
||
tabdata.content_cursor_y = (tabdata.content_cursor_y >= 5)?(0):(tabdata.content_cursor_y + 1);
|
||
|
||
tabdata.content_cursor = contents_xy2cursor(tabdata.content_cursor_x, tabdata.content_cursor_y);
|
||
setting_contents_check(tabdata.content_cursor, tabdata.content_cursor_prv);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//某个内容被焦点后,在此处修改内容值
|
||
setting_contents_modify(tabdata.item_cursor, tabdata.content_cursor, KEY_DOWN, 1);
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
|
||
case KEY_OK:
|
||
{
|
||
key = 0;
|
||
|
||
//OK键用于选择选项卡时:选项卡未选中时内部内容全部熄灭
|
||
if(tabdata.content_cursor == 99)
|
||
{
|
||
//选中后点亮第一个内容
|
||
switch (tabdata.item_cursor)
|
||
{
|
||
case ITEMS_0:
|
||
{
|
||
tabdata.content_cursor_x = 1;
|
||
tabdata.content_cursor_y = 0;
|
||
tabdata.content_cursor = contents_xy2cursor(tabdata.content_cursor_x, tabdata.content_cursor_y);
|
||
tabdata.content_cursor_prv = 99;
|
||
|
||
setting_contents_check(tabdata.content_cursor, tabdata.content_cursor_prv);
|
||
}
|
||
break;
|
||
|
||
case ITEMS_1:
|
||
{
|
||
tabdata.content_cursor_x = 1;
|
||
tabdata.content_cursor_y = 0;
|
||
tabdata.content_cursor = contents_xy2cursor(tabdata.content_cursor_x, tabdata.content_cursor_y);
|
||
tabdata.content_cursor_prv = 99;
|
||
|
||
setting_contents_check(tabdata.content_cursor, tabdata.content_cursor_prv);
|
||
}
|
||
break;
|
||
|
||
case ITEMS_2:
|
||
{
|
||
tabdata.content_cursor_x = 0;
|
||
tabdata.content_cursor_y = 0;
|
||
tabdata.content_cursor = contents_xy2cursor(tabdata.content_cursor_x, tabdata.content_cursor_y);
|
||
tabdata.content_cursor_prv = 99;
|
||
|
||
setting_contents_check(tabdata.content_cursor, tabdata.content_cursor_prv);
|
||
}
|
||
break;
|
||
|
||
case ITEMS_3:
|
||
{
|
||
tabdata.content_cursor_x = 0;
|
||
tabdata.content_cursor_y = 0;
|
||
tabdata.content_cursor = contents_xy2cursor(tabdata.content_cursor_x, tabdata.content_cursor_y);
|
||
tabdata.content_cursor_prv = 99;
|
||
|
||
setting_contents_check(tabdata.content_cursor, tabdata.content_cursor_prv);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//进入此处说明选项卡已被选中,此时需要选择内容
|
||
//内容焦点后,通过KEY_UP和KEY_DOWN修改
|
||
//KEY_BACK按下后,取消焦点
|
||
tabdata.content_focus = 1;
|
||
|
||
setting_contents_check(tabdata.content_cursor, tabdata.content_cursor_prv);
|
||
}
|
||
|
||
}
|
||
break;
|
||
|
||
//仅用于选择内容
|
||
case KEY_LEFT:
|
||
{
|
||
key = 0;
|
||
|
||
if( (tabdata.content_cursor == 99)||(tabdata.content_focus == 1) )
|
||
{
|
||
//选项卡未选中时,直接返回
|
||
//已经存在焦点时,直接返回
|
||
return;
|
||
}
|
||
|
||
switch (tabdata.item_cursor)
|
||
{
|
||
case ITEMS_0:
|
||
{
|
||
tabdata.content_cursor_prv = tabdata.content_cursor;
|
||
|
||
tabdata.content_cursor_x = (tabdata.content_cursor_x <= 1)?(5):(tabdata.content_cursor_x - 2);
|
||
tabdata.content_cursor = contents_xy2cursor(tabdata.content_cursor_x, tabdata.content_cursor_y);
|
||
|
||
setting_contents_check(tabdata.content_cursor, tabdata.content_cursor_prv);
|
||
}
|
||
break;
|
||
|
||
case ITEMS_1:
|
||
{}
|
||
break;
|
||
|
||
case ITEMS_2:
|
||
{}
|
||
break;
|
||
|
||
case ITEMS_3:
|
||
{
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
}
|
||
break;
|
||
|
||
//仅用于选择内容
|
||
case KEY_RIGHT:
|
||
{
|
||
key = 0;
|
||
|
||
if( (tabdata.content_cursor == 99)||(tabdata.content_focus == 1) )
|
||
{
|
||
//选项卡未选中时,直接返回
|
||
//已经存在焦点时,直接返回
|
||
return;
|
||
}
|
||
|
||
switch (tabdata.item_cursor)
|
||
{
|
||
case ITEMS_0:
|
||
{
|
||
tabdata.content_cursor_prv = tabdata.content_cursor;
|
||
|
||
tabdata.content_cursor_x = (tabdata.content_cursor_x >= 5)?(1):(tabdata.content_cursor_x + 2);
|
||
tabdata.content_cursor = contents_xy2cursor(tabdata.content_cursor_x, tabdata.content_cursor_y);
|
||
|
||
setting_contents_check(tabdata.content_cursor, tabdata.content_cursor_prv);
|
||
}
|
||
break;
|
||
|
||
case ITEMS_1:
|
||
{}
|
||
break;
|
||
|
||
case ITEMS_2:
|
||
{}
|
||
break;
|
||
|
||
case ITEMS_3:
|
||
{
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
default:
|
||
{
|
||
key = 0;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
void setting_items_check(uint8_t cursor, uint8_t cursor_prv)
|
||
{
|
||
//操作选项卡
|
||
switch (cursor) //点亮当前选中目标
|
||
{
|
||
case ITEMS_0:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_s0, lv_color_hex(COLOR_ITEMS_CHECKED), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case ITEMS_1:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_s1, lv_color_hex(COLOR_ITEMS_CHECKED), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case ITEMS_2:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_s2, lv_color_hex(COLOR_ITEMS_CHECKED), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case ITEMS_3:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_s3, lv_color_hex(COLOR_ITEMS_CHECKED), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
switch (cursor_prv) //熄灭前一时刻的目标
|
||
{
|
||
case ITEMS_0:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_s0, lv_color_hex(COLOR_ITEMS_UNCHECKED), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case ITEMS_1:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_s1, lv_color_hex(COLOR_ITEMS_UNCHECKED), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case ITEMS_2:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_s2, lv_color_hex(COLOR_ITEMS_UNCHECKED), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case ITEMS_3:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_s3, lv_color_hex(COLOR_ITEMS_UNCHECKED), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
contents_refresh(cursor_prv, cursor);
|
||
}
|
||
|
||
//设置界面选项卡内部内容选中:点亮cursor;熄灭cursor_prv;焦点focus
|
||
void setting_contents_check(uint8_t cursor, uint8_t cursor_prv)
|
||
{
|
||
//根据焦点与否切换点亮时的颜色
|
||
uint32_t color = 0;
|
||
if(tabdata.content_focus)
|
||
{
|
||
color = COLOR_CONTENTS_FOCUSED;
|
||
}
|
||
else
|
||
{
|
||
color = COLOR_CONTENTS_CHECKED;
|
||
}
|
||
|
||
//操作内容
|
||
switch (tabdata.item_cursor)
|
||
{
|
||
case ITEMS_0:
|
||
{
|
||
//点亮cursor
|
||
set_contents_color(cursor, color);
|
||
|
||
//熄灭cursor_prv
|
||
color = COLOR_CONTENTS_UNCHECKED;
|
||
set_contents_color(cursor_prv, color);
|
||
}
|
||
break;
|
||
|
||
case ITEMS_1:
|
||
{
|
||
//点亮cursor
|
||
set_contents_color(cursor, color);
|
||
|
||
//熄灭cursor_prv
|
||
color = COLOR_CONTENTS_UNCHECKED;
|
||
set_contents_color(cursor_prv, color);
|
||
}
|
||
break;
|
||
|
||
case ITEMS_2:
|
||
{
|
||
|
||
}
|
||
break;
|
||
|
||
case ITEMS_3:
|
||
{
|
||
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
//设置界面选项卡内部内容选中之后,修改内容,修改第ite个选项卡的第con个内容
|
||
void setting_contents_modify(uint8_t ite, uint8_t con, uint8_t key_val, int8_t step)
|
||
{
|
||
step = (key_val == KEY_UP)?(step):(0 - step);
|
||
//选中某一选项卡后,对选项卡内部的内容进行选择
|
||
switch (ite)
|
||
{
|
||
case ITEMS_0:
|
||
{
|
||
contents_modify_item_0(con, step);
|
||
}
|
||
break;
|
||
|
||
case ITEMS_1:
|
||
{
|
||
contents_modify_item_1(con, step);
|
||
}
|
||
break;
|
||
|
||
case ITEMS_2:
|
||
{
|
||
}
|
||
break;
|
||
|
||
case ITEMS_3:
|
||
{
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
}
|
||
|
||
//修改选项卡0的内容
|
||
void contents_modify_item_0(uint8_t cursor, int8_t step)
|
||
{
|
||
switch (cursor)
|
||
{
|
||
case CONTENT_0_0:
|
||
{
|
||
if(tabdata.content00 == VOLTAGE_V)
|
||
{
|
||
tabdata.content00 = VOLTAGE_MV;
|
||
}
|
||
else
|
||
{
|
||
tabdata.content00 = VOLTAGE_V;
|
||
}
|
||
|
||
//更新显示内容
|
||
//单位改变时,相关数值也要跟随
|
||
setting_update(ITEMS_0, CONTENT_0_0);
|
||
setting_update(ITEMS_0, CONTENT_0_1);
|
||
setting_update(ITEMS_0, CONTENT_0_2);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_1:
|
||
{
|
||
switch (tabdata.content00)
|
||
{
|
||
case VOLTAGE_MV:
|
||
{
|
||
tabdata.content01[1] += step;
|
||
|
||
//上下限幅
|
||
if( tabdata.content01[1] > VOL[1].up ) tabdata.content01[1] = VOL[1].up;
|
||
if( tabdata.content01[1] < VOL[1].low ) tabdata.content01[1] = VOL[1].low;
|
||
//上限不能低于下限值,避免自相矛盾
|
||
if( tabdata.content01[1] < tabdata.content02[1] ) tabdata.content01[1] = tabdata.content02[1];
|
||
}
|
||
break;
|
||
|
||
case VOLTAGE_V:
|
||
{
|
||
tabdata.content01[0] += step;
|
||
|
||
//上下限幅
|
||
if( tabdata.content01[0] > VOL[0].up ) tabdata.content01[0] = VOL[0].up;
|
||
if( tabdata.content01[0] < VOL[0].low ) tabdata.content01[0] = VOL[0].low;
|
||
//上限不能低于下限值,避免自相矛盾
|
||
if( tabdata.content01[0] < tabdata.content02[0] ) tabdata.content01[0] = tabdata.content02[0];
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
//更新显示内容
|
||
setting_update(ITEMS_0, CONTENT_0_1);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_2:
|
||
{
|
||
switch (tabdata.content00)
|
||
{
|
||
case VOLTAGE_MV:
|
||
{
|
||
tabdata.content02[1] += step;
|
||
|
||
//上下限幅
|
||
if( tabdata.content02[1] > VOL[1].up ) tabdata.content02[1] = VOL[1].up;
|
||
if( tabdata.content02[1] < VOL[1].low ) tabdata.content02[1] = VOL[1].low;
|
||
//下限不能高于下限值,避免自相矛盾
|
||
if( tabdata.content02[1] > tabdata.content01[1] ) tabdata.content02[1] = tabdata.content01[1];
|
||
}
|
||
break;
|
||
|
||
case VOLTAGE_V:
|
||
{
|
||
tabdata.content02[0] += step;
|
||
|
||
//上下限幅
|
||
if( tabdata.content02[0] > VOL[0].up ) tabdata.content02[0] = VOL[0].up;
|
||
if( tabdata.content02[0] < VOL[0].low ) tabdata.content02[0] = VOL[0].low;
|
||
//下限不能高于下限值,避免自相矛盾
|
||
if( tabdata.content02[0] > tabdata.content01[0] ) tabdata.content02[0] = tabdata.content01[0];
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
//更新显示内容
|
||
setting_update(ITEMS_0, CONTENT_0_2);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_3:
|
||
{
|
||
tabdata.content03 += step;
|
||
|
||
if( tabdata.content03 > CUR.up ) tabdata.content03 = CUR.up;
|
||
if( tabdata.content03 < CUR.low ) tabdata.content03 = CUR.low;
|
||
if( tabdata.content03 < tabdata.content04 ) tabdata.content03 = tabdata.content04;
|
||
|
||
//更新显示内容
|
||
setting_update(ITEMS_0, CONTENT_0_3);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_4:
|
||
{
|
||
tabdata.content04 += step;
|
||
|
||
if( tabdata.content04 > CUR.up ) tabdata.content04 = CUR.up;
|
||
if( tabdata.content04 < CUR.low ) tabdata.content04 = CUR.low;
|
||
if( tabdata.content04 > tabdata.content03 ) tabdata.content04 = tabdata.content03;
|
||
|
||
//更新显示内容
|
||
setting_update(ITEMS_0, CONTENT_0_4);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_5:
|
||
{
|
||
tabdata.content05 += step;
|
||
|
||
if( tabdata.content05 > RES.up ) tabdata.content05 = RES.up;
|
||
if( tabdata.content05 < RES.low ) tabdata.content05 = RES.low;
|
||
if( tabdata.content05 < tabdata.content06 ) tabdata.content05 = tabdata.content06;
|
||
|
||
//更新显示内容
|
||
setting_update(ITEMS_0, CONTENT_0_5);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_6:
|
||
{
|
||
tabdata.content06 += step;
|
||
|
||
if( tabdata.content06 > RES.up ) tabdata.content06 = RES.up;
|
||
if( tabdata.content06 < RES.low ) tabdata.content06 = RES.low;
|
||
if( tabdata.content06 > tabdata.content05 ) tabdata.content06 = tabdata.content05;
|
||
|
||
//更新显示内容
|
||
setting_update(ITEMS_0, CONTENT_0_6);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_7:
|
||
{
|
||
tabdata.content07 += step;
|
||
|
||
if( tabdata.content07 > FRE.up ) tabdata.content07 = FRE.up;
|
||
if( tabdata.content07 < FRE.low ) tabdata.content07 = FRE.low;
|
||
if( tabdata.content07 < tabdata.content08 ) tabdata.content07 = tabdata.content08;
|
||
|
||
//更新显示内容
|
||
setting_update(ITEMS_0, CONTENT_0_7);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_8:
|
||
{
|
||
tabdata.content08 += step;
|
||
|
||
if( tabdata.content08 > FRE.up ) tabdata.content08 = FRE.up;
|
||
if( tabdata.content08 < FRE.low ) tabdata.content08 = FRE.low;
|
||
if( tabdata.content08 > tabdata.content07 ) tabdata.content08 = tabdata.content07;
|
||
|
||
//更新显示内容
|
||
setting_update(ITEMS_0, CONTENT_0_8);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_9:
|
||
{
|
||
tabdata.content09 += step;
|
||
|
||
if( tabdata.content09 > TC[0].up ) tabdata.content09 = TC[0].up;
|
||
if( tabdata.content09 < TC[0].low ) tabdata.content09 = TC[0].low;
|
||
if( tabdata.content09 < tabdata.content08 ) tabdata.content09 = tabdata.content08;
|
||
|
||
//更新显示内容
|
||
setting_update(ITEMS_0, CONTENT_0_9);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_10:
|
||
{
|
||
tabdata.content010 += step;
|
||
|
||
if( tabdata.content010 > TC[0].up ) tabdata.content010 = TC[0].up;
|
||
if( tabdata.content010 < TC[0].low ) tabdata.content010 = TC[0].low;
|
||
if( tabdata.content010 > tabdata.content07 ) tabdata.content010 = tabdata.content07;
|
||
|
||
//更新显示内容
|
||
setting_update(ITEMS_0, CONTENT_0_10);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_11:
|
||
{
|
||
tabdata.content011 += step;
|
||
|
||
if( tabdata.content011 > RTD.up ) tabdata.content011 = RTD.up;
|
||
if( tabdata.content011 < RTD.low ) tabdata.content011 = RTD.low;
|
||
if( tabdata.content011 < tabdata.content012 ) tabdata.content011 = tabdata.content012;
|
||
|
||
//更新显示内容
|
||
setting_update(ITEMS_0, CONTENT_0_11);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_12:
|
||
{
|
||
tabdata.content012 += step;
|
||
|
||
if( tabdata.content012 > RTD.up ) tabdata.content012 = RTD.up;
|
||
if( tabdata.content012 < RTD.low ) tabdata.content012 = RTD.low;
|
||
if( tabdata.content012 > tabdata.content011 ) tabdata.content012 = tabdata.content011;
|
||
|
||
//更新显示内容
|
||
setting_update(ITEMS_0, CONTENT_0_12);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
//修改选项卡1的内容
|
||
void contents_modify_item_1(uint8_t cursor, int8_t step)
|
||
{
|
||
switch (cursor)
|
||
{
|
||
case CONTENT_1_0:
|
||
{
|
||
tabdata.light_flag = !tabdata.light_flag;
|
||
|
||
//更新显示内容
|
||
setting_update(ITEMS_1, CONTENT_1_0);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
void setting_update(uint8_t ite, uint8_t con)
|
||
{
|
||
char str_temp[14];
|
||
switch (ite)
|
||
{
|
||
case ITEMS_0:
|
||
{
|
||
switch (con)
|
||
{
|
||
case CONTENT_0_0:
|
||
{
|
||
switch (tabdata.content00)
|
||
{
|
||
case VOLTAGE_MV:
|
||
{
|
||
lv_label_set_text(guider_ui.screen_setting_label_01, "mV");
|
||
}
|
||
break;
|
||
|
||
case VOLTAGE_V:
|
||
{
|
||
lv_label_set_text(guider_ui.screen_setting_label_01, "V");
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_1:
|
||
{
|
||
switch (tabdata.content00)
|
||
{
|
||
case VOLTAGE_MV:
|
||
{
|
||
sprintf(str_temp,"%d",tabdata.content01[1]);
|
||
lv_label_set_text(guider_ui.screen_setting_label_03, str_temp);
|
||
}
|
||
break;
|
||
|
||
case VOLTAGE_V:
|
||
{
|
||
sprintf(str_temp,"%d",tabdata.content01[0]);
|
||
lv_label_set_text(guider_ui.screen_setting_label_03, str_temp);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_2:
|
||
{
|
||
switch (tabdata.content00)
|
||
{
|
||
case VOLTAGE_MV:
|
||
{
|
||
sprintf(str_temp,"%d",tabdata.content02[1]);
|
||
lv_label_set_text(guider_ui.screen_setting_label_05, str_temp);
|
||
}
|
||
break;
|
||
|
||
case VOLTAGE_V:
|
||
{
|
||
sprintf(str_temp,"%d",tabdata.content02[0]);
|
||
lv_label_set_text(guider_ui.screen_setting_label_05, str_temp);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_3:
|
||
{
|
||
sprintf(str_temp,"%d",tabdata.content03);
|
||
lv_label_set_text(guider_ui.screen_setting_label_13, str_temp);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_4:
|
||
{
|
||
sprintf(str_temp,"%d",tabdata.content04);
|
||
lv_label_set_text(guider_ui.screen_setting_label_15, str_temp);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_5:
|
||
{
|
||
sprintf(str_temp,"%d",tabdata.content05);
|
||
lv_label_set_text(guider_ui.screen_setting_label_23, str_temp);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_6:
|
||
{
|
||
sprintf(str_temp,"%d",tabdata.content06);
|
||
lv_label_set_text(guider_ui.screen_setting_label_25, str_temp);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_7:
|
||
{
|
||
sprintf(str_temp,"%d",tabdata.content07);
|
||
lv_label_set_text(guider_ui.screen_setting_label_33, str_temp);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_8:
|
||
{
|
||
sprintf(str_temp,"%d",tabdata.content08);
|
||
lv_label_set_text(guider_ui.screen_setting_label_35, str_temp);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_9:
|
||
{
|
||
sprintf(str_temp,"%d",tabdata.content09);
|
||
lv_label_set_text(guider_ui.screen_setting_label_43, str_temp);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_10:
|
||
{
|
||
sprintf(str_temp,"%d",tabdata.content010);
|
||
lv_label_set_text(guider_ui.screen_setting_label_45, str_temp);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_11:
|
||
{
|
||
sprintf(str_temp,"%d",tabdata.content011);
|
||
lv_label_set_text(guider_ui.screen_setting_label_53, str_temp);
|
||
}
|
||
break;
|
||
|
||
case CONTENT_0_12:
|
||
{
|
||
sprintf(str_temp,"%d",tabdata.content012);
|
||
lv_label_set_text(guider_ui.screen_setting_label_55, str_temp);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case ITEMS_1:
|
||
{
|
||
switch (con)
|
||
{
|
||
case CONTENT_1_0:
|
||
{
|
||
if (tabdata.light_flag)
|
||
{
|
||
lv_label_set_text(guider_ui.screen_setting_label_01, "ON");
|
||
}
|
||
else
|
||
{
|
||
lv_label_set_text(guider_ui.screen_setting_label_01, "OFF");
|
||
}
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case ITEMS_2:
|
||
{}
|
||
break;
|
||
|
||
case ITEMS_3:
|
||
{}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
//设置界面刷新选项卡的内容,隐藏items_prv,显示items_now
|
||
void contents_refresh(uint8_t items_prv, uint8_t items_now)
|
||
{
|
||
char str_temp[14];
|
||
|
||
switch (items_prv)
|
||
{
|
||
case ITEMS_0:
|
||
{
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_00, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_01, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_02, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_03, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_04, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_05, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_10, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_11, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_12, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_13, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_14, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_15, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_20, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_21, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_22, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_23, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_24, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_25, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_30, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_31, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_32, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_33, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_34, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_35, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_40, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_41, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_42, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_43, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_44, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_45, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_50, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_51, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_52, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_53, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_54, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_55, LV_OBJ_FLAG_HIDDEN);
|
||
|
||
|
||
|
||
}
|
||
break;
|
||
|
||
case ITEMS_1:
|
||
{
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_00, LV_OBJ_FLAG_HIDDEN);
|
||
lv_obj_add_flag(guider_ui.screen_setting_label_01, LV_OBJ_FLAG_HIDDEN);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
switch (items_now)
|
||
{
|
||
case ITEMS_0:
|
||
{
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_00, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_00, "电压");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_01, LV_OBJ_FLAG_HIDDEN);
|
||
switch (tabdata.content00)
|
||
{
|
||
case VOLTAGE_MV:
|
||
{
|
||
lv_label_set_text(guider_ui.screen_setting_label_01, "mV");
|
||
}
|
||
break;
|
||
|
||
case VOLTAGE_V:
|
||
{
|
||
lv_label_set_text(guider_ui.screen_setting_label_01, "V");
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_02, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_02, "上限");
|
||
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_03, LV_OBJ_FLAG_HIDDEN);
|
||
switch (tabdata.content00)
|
||
{
|
||
case VOLTAGE_MV:
|
||
{
|
||
sprintf(str_temp,"%d",tabdata.content01[1]);
|
||
lv_label_set_text(guider_ui.screen_setting_label_03, str_temp);
|
||
}
|
||
break;
|
||
|
||
case VOLTAGE_V:
|
||
{
|
||
sprintf(str_temp,"%d",tabdata.content01[0]);
|
||
lv_label_set_text(guider_ui.screen_setting_label_03, str_temp);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_04, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_04, "下限");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_05, LV_OBJ_FLAG_HIDDEN);
|
||
switch (tabdata.content00)
|
||
{
|
||
case VOLTAGE_MV:
|
||
{
|
||
sprintf(str_temp,"%d",tabdata.content02[1]);
|
||
lv_label_set_text(guider_ui.screen_setting_label_05, str_temp);
|
||
}
|
||
break;
|
||
|
||
case VOLTAGE_V:
|
||
{
|
||
sprintf(str_temp,"%d",tabdata.content02[0]);
|
||
lv_label_set_text(guider_ui.screen_setting_label_05, str_temp);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_10, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_10, "电流");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_11, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_11, "mA");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_12, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_12, "上限");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_13, LV_OBJ_FLAG_HIDDEN);
|
||
sprintf(str_temp,"%d",tabdata.content03);
|
||
lv_label_set_text(guider_ui.screen_setting_label_13, str_temp);
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_14, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_14, "下限");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_15, LV_OBJ_FLAG_HIDDEN);
|
||
sprintf(str_temp,"%d",tabdata.content04);
|
||
lv_label_set_text(guider_ui.screen_setting_label_15, str_temp);
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_20, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_20, "电阻");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_21, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_21, "Ω");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_22, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_22, "上限");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_23, LV_OBJ_FLAG_HIDDEN);
|
||
sprintf(str_temp,"%d",tabdata.content05);
|
||
lv_label_set_text(guider_ui.screen_setting_label_23, str_temp);
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_24, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_24, "下限");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_25, LV_OBJ_FLAG_HIDDEN);
|
||
sprintf(str_temp,"%d",tabdata.content06);
|
||
lv_label_set_text(guider_ui.screen_setting_label_25, str_temp);
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_30, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_30, "频率");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_31, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_31, "KHz");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_32, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_32, "上限");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_33, LV_OBJ_FLAG_HIDDEN);
|
||
sprintf(str_temp,"%d",tabdata.content07);
|
||
lv_label_set_text(guider_ui.screen_setting_label_33, str_temp);
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_34, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_34, "下限");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_35, LV_OBJ_FLAG_HIDDEN);
|
||
sprintf(str_temp,"%d",tabdata.content08);
|
||
lv_label_set_text(guider_ui.screen_setting_label_35, str_temp);
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_40, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_40, "TC");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_41, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_41, "℃");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_42, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_42, "上限");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_43, LV_OBJ_FLAG_HIDDEN);
|
||
sprintf(str_temp,"%d",tabdata.content09);
|
||
lv_label_set_text(guider_ui.screen_setting_label_43, str_temp);
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_44, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_44, "下限");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_45, LV_OBJ_FLAG_HIDDEN);
|
||
sprintf(str_temp,"%d",tabdata.content010);
|
||
lv_label_set_text(guider_ui.screen_setting_label_45, str_temp);
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_50, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_50, "RTD");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_51, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_51, "℃");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_52, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_52, "上限");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_53, LV_OBJ_FLAG_HIDDEN);
|
||
sprintf(str_temp,"%d",tabdata.content011);
|
||
lv_label_set_text(guider_ui.screen_setting_label_53, str_temp);
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_54, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_54, "下限");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_55, LV_OBJ_FLAG_HIDDEN);
|
||
sprintf(str_temp,"%d",tabdata.content012);
|
||
lv_label_set_text(guider_ui.screen_setting_label_55, str_temp);
|
||
}
|
||
break;
|
||
|
||
case ITEMS_1:
|
||
{
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_00, LV_OBJ_FLAG_HIDDEN);
|
||
lv_label_set_text(guider_ui.screen_setting_label_00, "照明");
|
||
|
||
lv_obj_clear_flag(guider_ui.screen_setting_label_01, LV_OBJ_FLAG_HIDDEN);
|
||
if(tabdata.light_flag)
|
||
{
|
||
lv_label_set_text(guider_ui.screen_setting_label_01, "ON");
|
||
}
|
||
else
|
||
{
|
||
lv_label_set_text(guider_ui.screen_setting_label_01, "OFF");
|
||
}
|
||
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
//将游标的横纵坐标转换成游标值,x[0,5], y[0,5], cursor[0,35]
|
||
uint8_t contents_xy2cursor(uint8_t px, uint8_t py)
|
||
{
|
||
uint8_t result = 0;
|
||
|
||
result = px + 6 * py;
|
||
|
||
return result;
|
||
}
|
||
|
||
//设置内容的底色
|
||
void set_contents_color(uint8_t cursor, uint32_t color)
|
||
{
|
||
switch (cursor)
|
||
{
|
||
case 0:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_00, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 1:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_01, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 2:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_02, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_03, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 4:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_04, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 5:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_05, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 6:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_10, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 7:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_11, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 8:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_12, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 9:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_13, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 10:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_14, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 11:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_15, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 12:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_20, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 13:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_21, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 14:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_22, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 15:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_23, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 16:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_24, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 17:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_25, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 18:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_30, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 19:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_31, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 20:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_32, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 21:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_33, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 22:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_34, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 23:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_35, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 24:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_40, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 25:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_41, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 26:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_42, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 27:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_43, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 28:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_44, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 29:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_45, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 30:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_50, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 31:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_51, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 32:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_52, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 33:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_53, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 34:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_54, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
case 35:
|
||
{
|
||
lv_obj_set_style_bg_color(guider_ui.screen_setting_label_55, lv_color_hex(color), LV_PART_MAIN|LV_STATE_DEFAULT);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
void scr_main_recover(void)
|
||
{
|
||
// 运行时间 和 电池电量 在主界面的函数中已存在,无需额外恢复
|
||
// 曲线需要在 setup_scr_screen_main.c 中修改
|
||
|
||
io_on2off_status(); //IN&OUT, ON&OFF
|
||
|
||
//输入&输出、工作模式&类型
|
||
switch (m5data.io_mode) //输入、输出模式切换
|
||
{
|
||
case IO_OUTPUT:
|
||
{
|
||
set_working_mode(m5data.output_mode, m5data.output_mode_type);
|
||
}
|
||
break;
|
||
|
||
case IO_INPUT:
|
||
{
|
||
set_working_mode(m5data.input_mode, m5data.input_mode_type);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
}
|
||
|
||
void num_twinkle(void) //数值闪烁
|
||
{
|
||
if(m5data.twk_flag == 0)
|
||
{
|
||
//不需要闪烁的情况下直接返回
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
if(twk_1000ms_flag)
|
||
{
|
||
twk_1000ms_flag = 0;
|
||
|
||
//闪烁开始
|
||
switch (m5data.io_cursor) //闪烁指定位置
|
||
{
|
||
case 0:
|
||
{
|
||
if(m5data.twk_flip)
|
||
{
|
||
set_nixie_cube(IO_OUTPUT, 0, m5data.o_numbers[0]);
|
||
m5data.twk_flip = 0;
|
||
}else
|
||
{
|
||
set_nixie_cube(IO_OUTPUT, 0, 10);
|
||
m5data.twk_flip = 1;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case 1:
|
||
{
|
||
if(m5data.twk_flip)
|
||
{
|
||
set_nixie_cube(IO_OUTPUT, 1, m5data.o_numbers[1]);
|
||
m5data.twk_flip = 0;
|
||
}else
|
||
{
|
||
set_nixie_cube(IO_OUTPUT, 1, 10);
|
||
m5data.twk_flip = 1;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case 2:
|
||
{
|
||
if(m5data.twk_flip)
|
||
{
|
||
set_nixie_cube(IO_OUTPUT, 2, m5data.o_numbers[2]);
|
||
m5data.twk_flip = 0;
|
||
}else
|
||
{
|
||
set_nixie_cube(IO_OUTPUT, 2, 10);
|
||
m5data.twk_flip = 1;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
{
|
||
if(m5data.twk_flip)
|
||
{
|
||
set_nixie_cube(IO_OUTPUT,3, m5data.o_numbers[3]);
|
||
m5data.twk_flip = 0;
|
||
}else
|
||
{
|
||
set_nixie_cube(IO_OUTPUT, 3, 10);
|
||
m5data.twk_flip = 1;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case 4:
|
||
{
|
||
if(m5data.twk_flip)
|
||
{
|
||
set_nixie_cube(IO_OUTPUT, 4, m5data.o_numbers[4]);
|
||
m5data.twk_flip = 0;
|
||
}else
|
||
{
|
||
set_nixie_cube(IO_OUTPUT, 4, 10);
|
||
m5data.twk_flip = 1;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case 5:
|
||
{
|
||
if(m5data.twk_flip)
|
||
{
|
||
set_nixie_cube(IO_OUTPUT, 5, m5data.o_numbers[5]);
|
||
m5data.twk_flip = 0;
|
||
}else
|
||
{
|
||
set_nixie_cube(IO_OUTPUT, 5, 10);
|
||
m5data.twk_flip = 1;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case 6:
|
||
{
|
||
if(m5data.twk_flip)
|
||
{
|
||
set_nixie_cube(IO_OUTPUT, 6, m5data.o_numbers[6]);
|
||
m5data.twk_flip = 0;
|
||
}else
|
||
{
|
||
set_nixie_cube(IO_OUTPUT, 6, 10);
|
||
m5data.twk_flip = 1;
|
||
}
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
m5data.twk_cnt++;
|
||
}
|
||
}
|
||
|
||
if(m5data.twk_cnt > TWINKLE_CNT_MAX) // (TWINKLE_CNT_MAX)秒无动作(上、下、左、右无按下)后停止闪烁
|
||
{
|
||
m5data.twk_cnt = 0;
|
||
m5data.twk_flip = 0;
|
||
m5data.twk_flag = 0;
|
||
m5data.io_cursor_prv = m5data.io_cursor;
|
||
|
||
switch (m5data.io_cursor) //防止空白残留
|
||
{
|
||
case 0:
|
||
{
|
||
set_nixie_cube(IO_OUTPUT, 0, m5data.o_numbers[0]);
|
||
}
|
||
break;
|
||
|
||
case 1:
|
||
{
|
||
set_nixie_cube(IO_OUTPUT, 1, m5data.o_numbers[1]);
|
||
}
|
||
break;
|
||
|
||
case 2:
|
||
{
|
||
set_nixie_cube(IO_OUTPUT, 2, m5data.o_numbers[2]);
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
{
|
||
set_nixie_cube(IO_OUTPUT, 3, m5data.o_numbers[3]);
|
||
}
|
||
break;
|
||
|
||
case 4:
|
||
{
|
||
set_nixie_cube(IO_OUTPUT, 4, m5data.o_numbers[4]);
|
||
}
|
||
break;
|
||
|
||
case 5:
|
||
{
|
||
set_nixie_cube(IO_OUTPUT, 5, m5data.o_numbers[5]);
|
||
}
|
||
break;
|
||
|
||
case 6:
|
||
{
|
||
set_nixie_cube(IO_OUTPUT, 6, m5data.o_numbers[6]);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
//实时曲线绘制
|
||
//将实际值线性转换成绘图值
|
||
void plot_drawing(void)
|
||
{
|
||
if(plot_1500ms_flag)
|
||
{
|
||
plot_1500ms_flag = 0;
|
||
|
||
//输出曲线
|
||
//{
|
||
//将独立数字转换成实际值
|
||
pltdata.yreal_pri_value = get_output_value();
|
||
|
||
//改变之前先记录前一时刻的绘图值
|
||
pltdata.y_pri_value_prv = pltdata.y_pri_value;
|
||
|
||
//将实际值线性转换成chart组件上的绘图值(pltdata.y_pri_low~up,一般0~100)
|
||
pltdata.y_pri_value = ( pltdata.y_pri_up - pltdata.y_pri_low ) * \
|
||
( pltdata.yreal_pri_value - pltdata.yreal_pri_low ) / ( pltdata.yreal_pri_up - pltdata.yreal_pri_low );
|
||
|
||
if( MY_ABS(pltdata.y_pri_value - pltdata.y_pri_value_prv) < 1 )
|
||
{
|
||
//变化幅度小的情况下不更新显示值
|
||
//等待一段时间后不再更新
|
||
if(pltdata.pri_wait_tick < PLOT_WAIT_TICK_MAX)
|
||
{
|
||
pltdata.pri_wait_tick++;
|
||
|
||
//数值限幅
|
||
if(pltdata.y_pri_value >= pltdata.y_pri_up) pltdata.y_pri_value = pltdata.y_pri_up;
|
||
if(pltdata.y_pri_value <= pltdata.y_pri_low) pltdata.y_pri_value = pltdata.y_pri_low;
|
||
|
||
lv_chart_set_next_value(guider_ui.screen_main_chart_1, guider_ui.screen_main_chart_1_0, pltdata.y_pri_value);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//变化幅度较大时,等待计数清零
|
||
pltdata.pri_wait_tick = 0;
|
||
|
||
//数值限幅
|
||
if(pltdata.y_pri_value >= pltdata.y_pri_up) pltdata.y_pri_value = pltdata.y_pri_up;
|
||
if(pltdata.y_pri_value <= pltdata.y_pri_low) pltdata.y_pri_value = pltdata.y_pri_low;
|
||
|
||
lv_chart_set_next_value(guider_ui.screen_main_chart_1, guider_ui.screen_main_chart_1_0, pltdata.y_pri_value);
|
||
}
|
||
//}
|
||
|
||
//输入曲线
|
||
//{
|
||
//改变之前先记录前一时刻的绘图值
|
||
pltdata.y_scd_value_prv = pltdata.y_scd_value;
|
||
|
||
//将实际值线性转换成chart组件上的绘图值(pltdata.y_pri_low~up,一般0~100)
|
||
pltdata.y_scd_value = ( pltdata.y_scd_up - pltdata.y_scd_low ) * \
|
||
( pltdata.yreal_scd_value - pltdata.yreal_scd_low ) / ( pltdata.yreal_scd_up - pltdata.yreal_scd_low );
|
||
|
||
if( MY_ABS(pltdata.y_scd_value - pltdata.y_scd_value_prv) < 1 )
|
||
{
|
||
//变化幅度小的情况下不更新显示值
|
||
//等待一段时间后不再更新
|
||
if(pltdata.scd_wait_tick < PLOT_WAIT_TICK_MAX)
|
||
{
|
||
pltdata.scd_wait_tick++;
|
||
|
||
//数值限幅
|
||
if(pltdata.y_scd_value >= pltdata.y_scd_up) pltdata.y_scd_value = pltdata.y_scd_up;
|
||
if(pltdata.y_scd_value <= pltdata.y_scd_low) pltdata.y_scd_value = pltdata.y_scd_low;
|
||
|
||
lv_chart_set_next_value(guider_ui.screen_main_chart_1, guider_ui.screen_main_chart_1_1, pltdata.y_scd_value);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
pltdata.scd_wait_tick = 0;
|
||
|
||
//数值限幅
|
||
if(pltdata.y_scd_value >= pltdata.y_scd_up) pltdata.y_scd_value = pltdata.y_scd_up;
|
||
if(pltdata.y_scd_value <= pltdata.y_scd_low) pltdata.y_scd_value = pltdata.y_scd_low;
|
||
|
||
lv_chart_set_next_value(guider_ui.screen_main_chart_1, guider_ui.screen_main_chart_1_1, pltdata.y_scd_value);
|
||
}
|
||
//}
|
||
}
|
||
}
|
||
|
||
void scr_setting_recover(void)
|
||
{
|
||
//在这里恢复选项卡0的显示内容
|
||
//ITEMS_0
|
||
setting_update(ITEMS_0, CONTENT_0_0);
|
||
setting_update(ITEMS_0, CONTENT_0_1);
|
||
setting_update(ITEMS_0, CONTENT_0_2);
|
||
setting_update(ITEMS_0, CONTENT_0_3);
|
||
setting_update(ITEMS_0, CONTENT_0_4);
|
||
setting_update(ITEMS_0, CONTENT_0_5);
|
||
setting_update(ITEMS_0, CONTENT_0_6);
|
||
setting_update(ITEMS_0, CONTENT_0_7);
|
||
setting_update(ITEMS_0, CONTENT_0_8);
|
||
setting_update(ITEMS_0, CONTENT_0_9);
|
||
setting_update(ITEMS_0, CONTENT_0_10);
|
||
setting_update(ITEMS_0, CONTENT_0_11);
|
||
setting_update(ITEMS_0, CONTENT_0_12);
|
||
|
||
}
|
||
|
||
//计算a的b次方
|
||
float32 my_power(int a, int b)
|
||
{
|
||
if(a == 0)
|
||
{
|
||
return 0;
|
||
}
|
||
|
||
if(b == 0)
|
||
{
|
||
return 1;
|
||
}
|
||
|
||
float32 result = 1;
|
||
|
||
if( b > 0 )
|
||
{
|
||
for(uint8_t i = 0; i < b; i++)
|
||
{
|
||
result *= a;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for(uint8_t i = 0; i < b; i++)
|
||
{
|
||
result /= (float32)a;
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
void scr_setting_run(void) //详细设置界面
|
||
{
|
||
//照明控制
|
||
if(tabdata.light_flag)
|
||
{
|
||
LIGHT_ON;
|
||
}
|
||
else
|
||
{
|
||
LIGHT_OFF;
|
||
}
|
||
}
|
||
|
||
/**********test5**********/
|
||
|
||
|
||
|
||
|
||
|
||
|