sggt/App/APP_WU/Src/apps_gather.c

4189 lines
130 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.

/*
* @Author: wujunchao wujunchao@wuxismart.com
* @Date: 2024-12-27 11:50:56
* @LastEditors: wujunchao wujunchao@wuxismart.com
* @LastEditTime: 2025-03-19 19:06:14
* @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[8]; //热电偶共8种
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 = -2500;
VOL[1].up = 2500;
VOL[1].pv = 0;
CUR.tag = SIG_CURRENT;
CUR.typ = CURRENT_MA;
CUR.low = 0;
CUR.up = 25;
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;
//热电偶K
TC[0].tag = SIG_TC;
TC[0].typ = TC_K;
TC[0].low = -270;
TC[0].up = 1370;
TC[0].pv = 0;
//热电偶S
TC[1].tag = SIG_TC;
TC[1].typ = TC_S;
TC[1].low = -50;
TC[1].up = 1768;
TC[1].pv = 0;
//热电偶N
TC[2].tag = SIG_TC;
TC[2].typ = TC_N;
TC[2].low = -270;
TC[2].up = 1300;
TC[2].pv = 0;
//热电偶B
TC[3].tag = SIG_TC;
TC[3].typ = TC_B;
TC[3].low = 0;
TC[3].up = 1820;
TC[3].pv = 0;
//热电偶E
TC[4].tag = SIG_TC;
TC[4].typ = TC_E;
TC[4].low = -270;
TC[4].up = 1000;
TC[4].pv = 0;
//热电偶J
TC[5].tag = SIG_TC;
TC[5].typ = TC_J;
TC[5].low = -210;
TC[5].up = 1200;
TC[5].pv = 0;
//热电偶R
TC[6].tag = SIG_TC;
TC[6].typ = TC_R;
TC[6].low = -50;
TC[6].up = 1768;
TC[6].pv = 0;
//热电偶T
TC[7].tag = SIG_TC;
TC[7].typ = TC_T;
TC[7].low = -270;
TC[7].up = 400;
TC[7].pv = 0;
RTD.tag = SIG_RTD;
RTD.typ = RTD_DC;
RTD.low = -200;
RTD.up = 660;
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输入IN1输出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[0] = TC[0].up; //TCK上限
tabdata.content010[0] = TC[0].low; //TCK下限
tabdata.content09[1] = TC[1].up; //TCS上限
tabdata.content010[1] = TC[1].low; //TCS下限
tabdata.content09[2] = TC[2].up; //TCN上限
tabdata.content010[2] = TC[2].low; //TCN下限
tabdata.content09[3] = TC[3].up; //TCB上限
tabdata.content010[3] = TC[3].low; //TCB下限
tabdata.content09[4] = TC[4].up; //TCE上限
tabdata.content010[4] = TC[4].low; //TCE下限
tabdata.content09[5] = TC[5].up; //TCJ上限
tabdata.content010[5] = TC[5].low; //TCJ下限
tabdata.content09[6] = TC[6].up; //TCR上限
tabdata.content010[6] = TC[6].low; //TCR下限
tabdata.content09[7] = TC[7].up; //TCT上限
tabdata.content010[7] = TC[7].low; //TCT下限
tabdata.content011 = RTD.up; //RTD上限
tabdata.content012 = RTD.low; //RTD下限
tabdata.content013 = TC_K; //默认为K类型的热电偶
//}
//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; //每次按下后闪烁计数清零
keyset_output(1);
// 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 >= 12)?(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; //每次按下后闪烁计数清零
keyset_output(-1);
// 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; //开机动画结束后,默认进入主界面
}
}
void scr_main_run(void)
{
//实时更新设定值
sig_sv_update(); //不做延时,尽快响应
//运行时间显示
runtime_show(); //1000ms
//电池电量显示
battery_show(); //3000ms
//动态曲线绘制
plot_drawing(); //1500ms
//当前输入值/测量值显示
input_value_show(); //500ms
//数值闪烁
num_twinkle(); //1000ms
}
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;
}
// 000000该字符串的长度大于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->(可正可负)实际数值
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 = ( num >= 0 )?(num):(0 - 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:
{
if( (num < 0)&&(m5data.sign_flag_out == 0) )
{
//出现负数并且没有显示负号时
set_nixie_cube_sign(IO_OUTPUT, 1);
}
else if(( (num >= 0)&&(m5data.sign_flag_out == 1) ))
{
//数值为非负数,但仍然显示负号时
set_nixie_cube_sign(IO_OUTPUT, 0);
}
//负数转正数
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;
}
}
//RE按键修改输出值
void keyset_output(int8_t key_step)
{
float32 pv = 0, sv = 0;
uint8_t cursor = 0;
cursor = m5data.io_cursor;
pv = get_output_value();
sv = pv + key_step * my_power(10, ( 3 - cursor ) );
if( sv > pltdata.yreal_pri_up ) sv = pltdata.yreal_pri_up;
if( sv < pltdata.yreal_pri_low ) sv = pltdata.yreal_pri_low;
set_output( sv );
}
//设置当前的输出值(实际值-> (无符号)数组),可直接输入负数
//记录缓存变化的位置
uint8_t change_flag[7] = {0};
void set_output_array(int32_t pvo)
{
int32_t temp = 0;
pvo = (pvo > 0)?(pvo):(0 - pvo);
//将实际值转换成6个独立数字
for(uint8_t i = 0; i < 7; i++)
{
temp = ( pvo / (int32_t)my_power( 10,( 6 - i ) ) ) % 10;
if(temp != m5data.o_numbers[i])
{
m5data.o_numbers[i] = temp;
change_flag[i] = 1;
}
}
if( m5data.o_numbers[0] > 9 ) m5data.o_numbers[0] = 9;
}
//设置输出值:数字显示 + 符号 + 缓存sto实际值(有符号)
void set_output(float32 sto)
{
if( (sto < 0)&&(m5data.sign_flag_out == 0) )
{
//出现负数并且没有显示负号时
set_nixie_cube_sign(IO_OUTPUT, 1);
}
else if(( (sto >= 0)&&(m5data.sign_flag_out == 1) ))
{
//数值为非负数,但仍然显示负号时
set_nixie_cube_sign(IO_OUTPUT, 0);
}
//乘以1000用于绕开 int32 和 float32 之间的转换
sto *= 1000;
//更新缓存
set_output_array(sto);
//刷新改变的位置
for(uint8_t i = 0;i < 7;i++)
{
if(change_flag[i])
{
set_nixie_cube(IO_OUTPUT, i, m5data.o_numbers[i]);
}
}
}
//获取当前设定的输出值
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;
}
//通道选择与切换
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 TC_S:
{
mux_signal.channel = CH9_IN_TC;
}
break;
case TC_N:
{
mux_signal.channel = CH9_IN_TC;
}
break;
case TC_B:
{
mux_signal.channel = CH9_IN_TC;
}
break;
case TC_E:
{
mux_signal.channel = CH9_IN_TC;
}
break;
case TC_J:
{
mux_signal.channel = CH9_IN_TC;
}
break;
case TC_R:
{
mux_signal.channel = CH9_IN_TC;
}
break;
case TC_T:
{
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 TC_S:
{
}
break;
case TC_N:
{
}
break;
case TC_B:
{
}
break;
case TC_E:
{
}
break;
case TC_J:
{
}
break;
case TC_R:
{
}
break;
case TC_T:
{
}
break;
case RTD_DC:
{
}
break;
default:
break;
}
}
break;
default:
break;
}
}
//更新设定值根据ON\OFF状态
void sig_sv_update(void)
{
switch (m5data.io_on2off)
{
case IO_ON:
{
mux_signal.data_sv = real2mux( 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:
{
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[0];
pltdata.yreal_scd_up = tabdata.content09[0];
pltdata.yreal_pri_low = tabdata.content010[0];
pltdata.yreal_scd_low = tabdata.content010[0];
}
break;
case TC_S:
{
lv_label_set_text(guider_ui.screen_main_label_unit, "S ℃");
pltdata.yreal_pri_up = tabdata.content09[1];
pltdata.yreal_scd_up = tabdata.content09[1];
pltdata.yreal_pri_low = tabdata.content010[1];
pltdata.yreal_scd_low = tabdata.content010[1];
}
break;
case TC_N:
{
lv_label_set_text(guider_ui.screen_main_label_unit, "N ℃");
pltdata.yreal_pri_up = tabdata.content09[2];
pltdata.yreal_scd_up = tabdata.content09[2];
pltdata.yreal_pri_low = tabdata.content010[2];
pltdata.yreal_scd_low = tabdata.content010[2];
}
break;
case TC_B:
{
lv_label_set_text(guider_ui.screen_main_label_unit, "B ℃");
pltdata.yreal_pri_up = tabdata.content09[3];
pltdata.yreal_scd_up = tabdata.content09[3];
pltdata.yreal_pri_low = tabdata.content010[3];
pltdata.yreal_scd_low = tabdata.content010[3];
}
break;
case TC_E:
{
lv_label_set_text(guider_ui.screen_main_label_unit, "E ℃");
pltdata.yreal_pri_up = tabdata.content09[4];
pltdata.yreal_scd_up = tabdata.content09[4];
pltdata.yreal_pri_low = tabdata.content010[4];
pltdata.yreal_scd_low = tabdata.content010[4];
}
break;
case TC_J:
{
lv_label_set_text(guider_ui.screen_main_label_unit, "J ℃");
pltdata.yreal_pri_up = tabdata.content09[5];
pltdata.yreal_scd_up = tabdata.content09[5];
pltdata.yreal_pri_low = tabdata.content010[5];
pltdata.yreal_scd_low = tabdata.content010[5];
}
break;
case TC_R:
{
lv_label_set_text(guider_ui.screen_main_label_unit, "R ℃");
pltdata.yreal_pri_up = tabdata.content09[6];
pltdata.yreal_scd_up = tabdata.content09[6];
pltdata.yreal_pri_low = tabdata.content010[6];
pltdata.yreal_scd_low = tabdata.content010[6];
}
break;
case TC_T:
{
lv_label_set_text(guider_ui.screen_main_label_unit, "T ℃");
pltdata.yreal_pri_up = tabdata.content09[7];
pltdata.yreal_scd_up = tabdata.content09[7];
pltdata.yreal_pri_low = tabdata.content010[7];
pltdata.yreal_scd_low = tabdata.content010[7];
}
break;
default:
break;
}
}
break;
//热电阻
case SIG_RTD:
{
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);
//通道选择与切换
sig_channel_select(m5data.io_mode, type);
}
void input_value_show(void)
{
if(input_500ms_flag)
{
input_500ms_flag = 0;
//获取输入值
pltdata.yreal_scd_value = mux2real(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:
{
uint8_t c09_temp = 0;
c09_temp = (uint8_t)tabdata.content013;
c09_temp -= 5; //[5, 12]->[0, 7]
tabdata.content09[c09_temp] += step;
if( tabdata.content09[c09_temp] > TC[c09_temp].up ) tabdata.content09[c09_temp] = TC[c09_temp].up;
if( tabdata.content09[c09_temp] < TC[c09_temp].low ) tabdata.content09[c09_temp] = TC[c09_temp].low;
if( tabdata.content010[c09_temp] > tabdata.content09[c09_temp] ) tabdata.content09[c09_temp] = tabdata.content010[c09_temp];
//更新显示内容
setting_update(ITEMS_0, CONTENT_0_9);
}
break;
case CONTENT_0_10:
{
uint8_t c010_temp = 0;
c010_temp = (uint8_t)tabdata.content013;
c010_temp -= 5; //[5, 12]->[0, 7]
if( tabdata.content010[c010_temp] > TC[c010_temp].up ) tabdata.content010[c010_temp] = TC[c010_temp].up;
if( tabdata.content010[c010_temp] < TC[c010_temp].low ) tabdata.content010[c010_temp] = TC[c010_temp].low;
if( tabdata.content010[c010_temp] > tabdata.content09[c010_temp] ) tabdata.content010[c010_temp] = tabdata.content09[c010_temp];
//更新显示内容
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;
case CONTENT_0_13:
{
uint8_t c13_temp = 0;
c13_temp = (uint8_t)tabdata.content013;
c13_temp =(c13_temp >= 12)?(5):(c13_temp + 1); //不使用step
tabdata.content013 = (SIG_FUNCTIONS_TYPE)c13_temp;
//更新显示内容
setting_update(ITEMS_0, CONTENT_0_13);
//类型改变时,相关数值也要跟随
setting_update(ITEMS_0, CONTENT_0_9);
setting_update(ITEMS_0, CONTENT_0_10);
}
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:
{
uint8_t c09_temp = 0;
c09_temp = (uint8_t)tabdata.content013;
c09_temp -= 5; //[5, 12]->[0, 7]
sprintf(str_temp,"%d",tabdata.content09[c09_temp]);
lv_label_set_text(guider_ui.screen_setting_label_43, str_temp);
}
break;
case CONTENT_0_10:
{
uint8_t c10_temp = 0;
c10_temp = (uint8_t)tabdata.content013;
c10_temp -= 5; //[5, 12]->[0, 7]
sprintf(str_temp,"%d",tabdata.content010[c10_temp]);
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;
case CONTENT_0_13:
{
switch (tabdata.content013)
{
case TC_K:
{
lv_label_set_text(guider_ui.screen_setting_label_41, "K ℃");
}
break;
case TC_S:
{
lv_label_set_text(guider_ui.screen_setting_label_41, "S ℃");
}
break;
case TC_N:
{
lv_label_set_text(guider_ui.screen_setting_label_41, "N ℃");
}
break;
case TC_B:
{
lv_label_set_text(guider_ui.screen_setting_label_41, "B ℃");
}
break;
case TC_E:
{
lv_label_set_text(guider_ui.screen_setting_label_41, "E ℃");
}
break;
case TC_J:
{
lv_label_set_text(guider_ui.screen_setting_label_41, "J ℃");
}
break;
case TC_R:
{
lv_label_set_text(guider_ui.screen_setting_label_41, "R ℃");
}
break;
case TC_T:
{
lv_label_set_text(guider_ui.screen_setting_label_41, "T ℃");
}
break;
default:
break;
}
}
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[ (uint8_t)tabdata.content013 ]);
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[ (uint8_t)tabdata.content013 ]);
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;
}
}
//数据转换mux_signal.pv -> real_value
float32 mux2real(float32 mux_pv)
{
float32 result = 0;
SIG_FUNCTIONS mode;
SIG_FUNCTIONS_TYPE type;
switch (m5data.io_mode)
{
case IO_INPUT:
{
mode = m5data.input_mode;
type = m5data.input_mode_type;
}
break;
case IO_OUTPUT:
{
mode = m5data.output_mode;
type = m5data.output_mode_type;
}
break;
default:
break;
}
switch (mode)
{
//电压
case SIG_VOLTAGE:
{
switch (type)
{
//[-2.5, 2.5V] -> [-2500mv, 2500mv]
case VOLTAGE_MV:
{
result = mux_pv * 1000;
}
break;
//1:1
case VOLTAGE_V:
{
result = mux_pv;
}
break;
default:
break;
}
}
break;
//电流
case SIG_CURRENT:
{
switch (type)
{
//1:1
case CURRENT_MA:
{
result = mux_pv;
}
break;
default:
break;
}
}
break;
//电阻
case SIG_RESISTANT:
{
switch (type)
{
case RESISTANT_OHM:
{
result = mux_pv;
}
break;
default:
break;
}
}
break;
//频率
case SIG_FREQUENCE:
{
switch (type)
{
case FREQUENCE_KHZ:
{
//Hz -> KHz
result = mux_pv / 1000;
}
break;
default:
break;
}
}
break;
//热电偶
case SIG_TC:
{
switch (type)
{
case TC_K:
{
result = mux_pv;
}
break;
case TC_N:
{
result = mux_pv;
}
break;
case TC_S:
{
result = mux_pv;
}
break;
default:
break;
}
}
break;
//热电阻
case SIG_RTD:
{
switch (type)
{
case RTD_DC:
{
result = mux_pv;
}
break;
default:
break;
}
}
break;
default:
break;
}
return result;
}
//数据转换real_value -> mux_signal.sv
float32 real2mux(float32 real_value)
{
float32 result = 0;
SIG_FUNCTIONS mode;
SIG_FUNCTIONS_TYPE type;
switch (m5data.io_mode)
{
case IO_INPUT:
{
mode = m5data.input_mode;
type = m5data.input_mode_type;
}
break;
case IO_OUTPUT:
{
mode = m5data.output_mode;
type = m5data.output_mode_type;
}
break;
default:
break;
}
switch (mode)
{
//电压
case SIG_VOLTAGE:
{
switch (type)
{
//[-2500mV, 2500mV] -> [-2.5V, 2.5V]
case VOLTAGE_MV:
{
result = real_value / (float32)1000;
}
break;
//1:1
case VOLTAGE_V:
{
result = real_value;
}
break;
default:
break;
}
}
break;
//电流
case SIG_CURRENT:
{
switch (type)
{
//1:1
case CURRENT_MA:
{
result = real_value;
}
break;
default:
break;
}
}
break;
//电阻
case SIG_RESISTANT:
{
switch (type)
{
case RESISTANT_OHM:
{
result = real_value;
}
break;
default:
break;
}
}
break;
//频率
case SIG_FREQUENCE:
{
switch (type)
{
case FREQUENCE_KHZ:
{
//KHz -> Hz
result = real_value * 1000;
}
break;
default:
break;
}
}
break;
//热电偶
case SIG_TC:
{
switch (type)
{
case TC_K:
{
result = real_value;
}
break;
case TC_N:
{
result = real_value;
}
break;
case TC_S:
{
result = real_value;
}
break;
default:
break;
}
}
break;
//热电阻
case SIG_RTD:
{
switch (type)
{
case RTD_DC:
{
result = real_value;
}
break;
default:
break;
}
}
break;
default:
break;
}
return result;
}
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);
setting_update(ITEMS_0, CONTENT_0_13);
}
//计算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**********/