更新:

1、曲线颜色自定义部分代码精简;
2、采样间隔、描点数量、输出&输入曲线颜色、语言选择加入EEPROM存储;
3、界面切换逻辑调整,降低了卡死的概率;
This commit is contained in:
吴俊潮 2025-04-18 13:12:47 +08:00
parent 956ca7baaa
commit 9b7de39574
17 changed files with 18509 additions and 14595 deletions

View File

@ -16,7 +16,6 @@
//主界面 //主界面
//{ //{
//主界面编号1信号输入输出示波器显示 //主界面编号1信号输入输出示波器显示
#define SCREEN_MAIN 1 #define SCREEN_MAIN 1
@ -53,6 +52,11 @@
//数码管数值增加(正负情况交替时up和down两个键起到的作用会对调因此专门定义参数用于区分数值的增减) //数码管数值增加(正负情况交替时up和down两个键起到的作用会对调因此专门定义参数用于区分数值的增减)
#define NIXIE_DECREASE 0 #define NIXIE_DECREASE 0
//数码管闪烁功能使能
#define NIXIE_CUBE_ENABLE 0
//EEPROM状态监控
#define EEPROM_MONITOR_ENABLE 1
//} //}
//菜单数据初始化 //菜单数据初始化

View File

@ -125,7 +125,7 @@ extern int16_t reset_cnt;
//内容焦点后的底色 //内容焦点后的底色
#define COLOR_CONTENTS_FOCUSED 0X9dffb0 #define COLOR_CONTENTS_FOCUSED 0X9dffb0
//曲线颜色 //曲线备选颜色
//{ //{
//淡蓝色 //淡蓝色
#define COLOR_BLUE 0 #define COLOR_BLUE 0
@ -151,11 +151,11 @@ extern int16_t reset_cnt;
#define COLOR_PURPLE 5 #define COLOR_PURPLE 5
#define COLOR_PURPLE_VALUE 0xFF00D4 #define COLOR_PURPLE_VALUE 0xFF00D4
//输入图例颜色值 //黑色
#define COLOR_LEGEND_INPUT COLOR_YELLOW_VALUE #define COLOR_BLACK 7
#define COLOR_BLACK_VALUE 0x000000
//输出图例颜色值 extern int32_t color_table[7];
#define COLOR_LEGEND_OUTPUT COLOR_BLUE_VALUE
//} //}
//} //}
@ -163,8 +163,8 @@ extern int16_t reset_cnt;
//设置菜单数据初始化 //设置菜单数据初始化
void tab_data_init(void); void tab_data_init(void);
//选项卡 0 数据初始化 //选项卡EEPROM部分数据初始化
void item0_data_init(void); void eeprom_item_data_init(void);
//按键功能,详细设置菜单界面 //按键功能,详细设置菜单界面
void key_functions_setting(void); void key_functions_setting(void);

View File

@ -97,10 +97,9 @@ typedef struct
//screen_init //screen_init
uint8_t scr_init_flag; //初始界面标志,是否播放过开机动画 uint8_t scr_init_flag; //初始界面标志,是否播放过开机动画
uint8_t bar_anime_step; //进度条动画步骤
uint8_t bar_anime_end_flag; //进度条动画结束标志
//screen_main //screen_main
uint8_t key_main_enable; //按键功能使能标志
uint8_t runtime_seconds; uint8_t runtime_seconds;
uint8_t runtime_minutes; uint8_t runtime_minutes;
uint8_t runtime_hours; uint8_t runtime_hours;
@ -116,15 +115,18 @@ typedef struct
SIG_FUNCTIONS_TYPE input_mode_type; //当前输入模式的类型 SIG_FUNCTIONS_TYPE input_mode_type; //当前输入模式的类型
SIG_FUNCTIONS output_mode; //当前的输出模式 SIG_FUNCTIONS output_mode; //当前的输出模式
SIG_FUNCTIONS_TYPE output_mode_type; //当前输出模式的类型 SIG_FUNCTIONS_TYPE output_mode_type; //当前输出模式的类型
#if NIXIE_CUBE_ENABLE
uint8_t twk_flag; //闪烁使能标志 uint8_t twk_flag; //闪烁使能标志
uint8_t twk_flip; //0-1变量用于控制显示内容翻转显示/不显示) uint8_t twk_flip; //0-1变量用于控制显示内容翻转显示/不显示)
uint8_t twk_cnt; //闪烁计数,计数达到上限后闪烁停止 uint8_t twk_cnt; //闪烁计数,计数达到上限后闪烁停止
#endif
uint8_t overflow_flag_up; //向上溢出标志 uint8_t overflow_flag_up; //向上溢出标志
uint8_t overflow_flag_low; //向下溢出标志 uint8_t overflow_flag_low; //向下溢出标志
uint8_t sign_flag_in; //输入信号符号位标志0->不显示1->显示负号 uint8_t sign_flag_in; //输入信号符号位标志0->不显示1->显示负号
uint8_t sign_flag_out; //输出信号符号位标志0->不显示1->显示负号 uint8_t sign_flag_out; //输出信号符号位标志0->不显示1->显示负号
//screen_setting //screen_setting
uint8_t key_setting_enable; //按键功能使能标志
}MENU_DATA; }MENU_DATA;
@ -225,6 +227,7 @@ extern PHYSICAL_QUANTITY RES; //电阻,Ω
extern PHYSICAL_QUANTITY FRE; //频率KHz extern PHYSICAL_QUANTITY FRE; //频率KHz
extern PHYSICAL_QUANTITY TC[8]; //热电偶共8种 extern PHYSICAL_QUANTITY TC[8]; //热电偶共8种
extern PHYSICAL_QUANTITY RTD; //热电阻 extern PHYSICAL_QUANTITY RTD; //热电阻
extern uint16_t screen_switch_wait; //屏幕切换的等待时间
//按键值 //按键值
#define KEY_OUT 76 #define KEY_OUT 76

View File

@ -41,95 +41,110 @@
//my address //my address
//{ //{
//0x7D0 - 0x7E0标记后写入0xAAAA连续16位“1”“0”交替 //0x7D0 - 0x7E0(2000 - 2016)标记后写入0xAAAA连续16位“1”“0”交替
#define DEVICE_CHECK 0x0007D0 #define DEVICE_CHECK 0x0007D0
#define EE_START_ADDR 0x000000 #define EE_START_ADDR 0x000000
#define EE_INTERVAL 16 #define EE_INTERVAL 16
//电压V上限tag0 //电压V上限tag0EE_START_ADDR + 0*EE_INTERVAL
#define VOL_V_UP_ADDR EE_START_ADDR #define VOL_V_UP_ADDR EE_START_ADDR
//电压V下限tag0 //电压V下限tag0EE_START_ADDR + 1*EE_INTERVAL
#define VOL_V_LOW_ADDR (VOL_V_UP_ADDR + EE_INTERVAL) #define VOL_V_LOW_ADDR (VOL_V_UP_ADDR + EE_INTERVAL)
//电压mV上限tag0 //电压mV上限tag0EE_START_ADDR + 2*EE_INTERVAL
#define VOL_MV_UP_ADDR (VOL_V_LOW_ADDR + EE_INTERVAL) #define VOL_MV_UP_ADDR (VOL_V_LOW_ADDR + EE_INTERVAL)
//电压mV下限tag0 //电压mV下限tag0EE_START_ADDR + 3*EE_INTERVAL
#define VOL_MV_LOW_ADDR (VOL_MV_UP_ADDR + EE_INTERVAL) #define VOL_MV_LOW_ADDR (VOL_MV_UP_ADDR + EE_INTERVAL)
//电流上限tag1 //电流上限tag1EE_START_ADDR + 4*EE_INTERVAL
#define CUR_UP_ADDR (VOL_MV_LOW_ADDR + EE_INTERVAL) #define CUR_UP_ADDR (VOL_MV_LOW_ADDR + EE_INTERVAL)
//电流下限tag1 //电流下限tag1EE_START_ADDR + 5*EE_INTERVAL
#define CUR_LOW_ADDR (CUR_UP_ADDR + EE_INTERVAL) #define CUR_LOW_ADDR (CUR_UP_ADDR + EE_INTERVAL)
//电阻上限tag2 //电阻上限tag2EE_START_ADDR + 6*EE_INTERVAL
#define RES_UP_ADDR (CUR_LOW_ADDR + EE_INTERVAL) #define RES_UP_ADDR (CUR_LOW_ADDR + EE_INTERVAL)
//电阻下限tag2 //电阻下限tag2EE_START_ADDR + 7*EE_INTERVAL
#define RES_LOW_ADDR (RES_UP_ADDR + EE_INTERVAL) #define RES_LOW_ADDR (RES_UP_ADDR + EE_INTERVAL)
//频率上限tag3 //频率上限tag3EE_START_ADDR + 8*EE_INTERVAL
#define FRE_UP_ADDR (RES_LOW_ADDR + EE_INTERVAL) #define FRE_UP_ADDR (RES_LOW_ADDR + EE_INTERVAL)
//频率下限tag3 //频率下限tag3EE_START_ADDR + 9*EE_INTERVAL
#define FRE_LOW_ADDR (FRE_UP_ADDR + EE_INTERVAL) #define FRE_LOW_ADDR (FRE_UP_ADDR + EE_INTERVAL)
//TC_K上限tag4 //TC_K上限tag4EE_START_ADDR + 10*EE_INTERVAL
#define TC_K_UP_ADDR (FRE_LOW_ADDR + EE_INTERVAL) #define TC_K_UP_ADDR (FRE_LOW_ADDR + EE_INTERVAL)
//TC_K下限tag4 //TC_K下限tag4EE_START_ADDR + 11*EE_INTERVAL
#define TC_K_LOW_ADDR (TC_K_UP_ADDR + EE_INTERVAL) #define TC_K_LOW_ADDR (TC_K_UP_ADDR + EE_INTERVAL)
//TC_S上限tag5 //TC_S上限tag5EE_START_ADDR + 12*EE_INTERVAL
#define TC_S_UP_ADDR (TC_K_LOW_ADDR + EE_INTERVAL) #define TC_S_UP_ADDR (TC_K_LOW_ADDR + EE_INTERVAL)
//TC_S下限tag5 //TC_S下限tag5EE_START_ADDR + 13*EE_INTERVAL
#define TC_S_LOW_ADDR (TC_S_UP_ADDR + EE_INTERVAL) #define TC_S_LOW_ADDR (TC_S_UP_ADDR + EE_INTERVAL)
//TC_N上限tag6 //TC_N上限tag6EE_START_ADDR + 14*EE_INTERVAL
#define TC_N_UP_ADDR (TC_S_LOW_ADDR + EE_INTERVAL) #define TC_N_UP_ADDR (TC_S_LOW_ADDR + EE_INTERVAL)
//TC_N下限tag6 //TC_N下限tag6EE_START_ADDR + 15*EE_INTERVAL
#define TC_N_LOW_ADDR (TC_N_UP_ADDR + EE_INTERVAL) #define TC_N_LOW_ADDR (TC_N_UP_ADDR + EE_INTERVAL)
//TC_B上限tag7 //TC_B上限tag7EE_START_ADDR + 16*EE_INTERVAL
#define TC_B_UP_ADDR (TC_N_LOW_ADDR + EE_INTERVAL) #define TC_B_UP_ADDR (TC_N_LOW_ADDR + EE_INTERVAL)
//TC_B下限tag7 //TC_B下限tag7EE_START_ADDR + 17*EE_INTERVAL
#define TC_B_LOW_ADDR (TC_B_UP_ADDR + EE_INTERVAL) #define TC_B_LOW_ADDR (TC_B_UP_ADDR + EE_INTERVAL)
//TC_E上限tag8 //TC_E上限tag8EE_START_ADDR + 18*EE_INTERVAL
#define TC_E_UP_ADDR (TC_B_LOW_ADDR + EE_INTERVAL) #define TC_E_UP_ADDR (TC_B_LOW_ADDR + EE_INTERVAL)
//TC_E下限tag8 //TC_E下限tag8EE_START_ADDR + 19*EE_INTERVAL
#define TC_E_LOW_ADDR (TC_E_UP_ADDR + EE_INTERVAL) #define TC_E_LOW_ADDR (TC_E_UP_ADDR + EE_INTERVAL)
//TC_J上限tag9 //TC_J上限tag9EE_START_ADDR + 20*EE_INTERVAL
#define TC_J_UP_ADDR (TC_E_LOW_ADDR + EE_INTERVAL) #define TC_J_UP_ADDR (TC_E_LOW_ADDR + EE_INTERVAL)
//TC_J下限tag9 //TC_J下限tag9EE_START_ADDR + 21*EE_INTERVAL
#define TC_J_LOW_ADDR (TC_J_UP_ADDR + EE_INTERVAL) #define TC_J_LOW_ADDR (TC_J_UP_ADDR + EE_INTERVAL)
//TC_R上限tag10 //TC_R上限tag10EE_START_ADDR + 22*EE_INTERVAL
#define TC_R_UP_ADDR (TC_J_LOW_ADDR + EE_INTERVAL) #define TC_R_UP_ADDR (TC_J_LOW_ADDR + EE_INTERVAL)
//TC_R下限tag10 //TC_R下限tag10EE_START_ADDR + 23*EE_INTERVAL
#define TC_R_LOW_ADDR (TC_R_UP_ADDR + EE_INTERVAL) #define TC_R_LOW_ADDR (TC_R_UP_ADDR + EE_INTERVAL)
//TC_T上限tag11 //TC_T上限tag11EE_START_ADDR + 24*EE_INTERVAL
#define TC_T_UP_ADDR (TC_R_LOW_ADDR + EE_INTERVAL) #define TC_T_UP_ADDR (TC_R_LOW_ADDR + EE_INTERVAL)
//TC_T下限tag11 //TC_T下限tag11EE_START_ADDR + 25*EE_INTERVAL
#define TC_T_LOW_ADDR (TC_T_UP_ADDR + EE_INTERVAL) #define TC_T_LOW_ADDR (TC_T_UP_ADDR + EE_INTERVAL)
//RTD上限tag12 //RTD上限tag12EE_START_ADDR + 26*EE_INTERVAL
#define RTD_UP_ADDR (TC_T_LOW_ADDR + EE_INTERVAL) #define RTD_UP_ADDR (TC_T_LOW_ADDR + EE_INTERVAL)
//RTD下限tag12 //RTD下限tag12EE_START_ADDR + 27*EE_INTERVAL
#define RTD_LOW_ADDR (RTD_UP_ADDR + EE_INTERVAL) #define RTD_LOW_ADDR (RTD_UP_ADDR + EE_INTERVAL)
//采样间隔画点时间间隔tag13EE_START_ADDR + 28*EE_INTERVAL
#define SAMPLE_INTERVAL_ADDR (RTD_LOW_ADDR + EE_INTERVAL)
//描点数量tag14EE_START_ADDR + 29*EE_INTERVAL
#define PLOT_COUNT_ADDR (SAMPLE_INTERVAL_ADDR + EE_INTERVAL)
//输入曲线颜色tag15EE_START_ADDR + 30*EE_INTERVAL
#define INPUT_COLOR_ADDR (PLOT_COUNT_ADDR + EE_INTERVAL)
//输出曲线颜色tag16EE_START_ADDR + 31*EE_INTERVAL
#define OUTPUT_COLOR_ADDR (INPUT_COLOR_ADDR + EE_INTERVAL)
//语言选择tag17EE_START_ADDR + 32*EE_INTERVAL
#define LANGUAGE_SELECT_ADDR (OUTPUT_COLOR_ADDR + EE_INTERVAL)
//根据需求后续在此处向后添加 //根据需求后续在此处向后添加
//} //}

View File

@ -3,6 +3,10 @@
#include "apps_gather.h" #include "apps_gather.h"
#define LIGHT_ON HAL_GPIO_WritePin(light_GPIO_Port, light_Pin, GPIO_PIN_SET)
#define LIGHT_OFF HAL_GPIO_WritePin(light_GPIO_Port, light_Pin, GPIO_PIN_RESET)
//修改选项卡0的值 //修改选项卡0的值
void set_item0_value(uint8_t con, int8_t step); void set_item0_value(uint8_t con, int8_t step);

View File

@ -13,8 +13,8 @@
extern int heart_1000ms_flag; extern int heart_1000ms_flag;
extern int heart_1000ms_cnt; extern int heart_1000ms_cnt;
extern int battery_3000ms_flag; extern int battery_2000ms_flag;
extern int battery_3000ms_cnt; extern int battery_2000ms_cnt;
extern int plot_ms_flag; extern int plot_ms_flag;
extern int plot_ms_cnt; extern int plot_ms_cnt;
extern int twk_1000ms_flag; extern int twk_1000ms_flag;

View File

@ -14,21 +14,19 @@ void screen_data_init(void)
//screen_init //screen_init
m5data.scr_init_flag = 0; //是否进行过初始化(开机动画) m5data.scr_init_flag = 0; //是否进行过初始化(开机动画)
m5data.bar_anime_step = 0; //进度条动画步骤
m5data.bar_anime_end_flag = 0; //进度条动画结束标志
//screen_main //screen_main
main_data_init(); main_data_init();
//screen_setting //screen_setting
tab_data_init(); tab_data_init();
LIGHT_OFF; m5data.key_setting_enable = 0; //按键默认不使能
} }
//主界面参数初始化 //主界面参数初始化
void main_data_init(void) void main_data_init(void)
{ {
m5data.key_main_enable = 0; //按键默认不使能
m5data.runtime_seconds = 0; //秒 m5data.runtime_seconds = 0; //秒
m5data.runtime_minutes = 0; //分钟 m5data.runtime_minutes = 0; //分钟
m5data.runtime_hours = 0; //小时 m5data.runtime_hours = 0; //小时
@ -38,9 +36,11 @@ void main_data_init(void)
m5data.io_cursor = 3; //当前游标位置,[0000,000]:0~6 m5data.io_cursor = 3; //当前游标位置,[0000,000]:0~6
m5data.io_cursor_prv = 3; //前一时刻游标位置 m5data.io_cursor_prv = 3; //前一时刻游标位置
#if NIXIE_CUBE_ENABLE
m5data.twk_flag = 0; //0停止闪烁1开始闪烁 m5data.twk_flag = 0; //0停止闪烁1开始闪烁
m5data.twk_flip = 0; //0显示1不显示 m5data.twk_flip = 0; //0显示1不显示
m5data.twk_cnt = 0; //闪烁计数 m5data.twk_cnt = 0; //闪烁计数
#endif
m5data.overflow_flag_low = 0; //向上溢出 m5data.overflow_flag_low = 0; //向上溢出
m5data.overflow_flag_up = 0; //向下溢出 m5data.overflow_flag_up = 0; //向下溢出
m5data.sign_flag_in = 0; //默认不显示符号 m5data.sign_flag_in = 0; //默认不显示符号
@ -54,10 +54,10 @@ void main_data_init(void)
m5data.o_numbers[i] = 0; //输出值/设定值 m5data.o_numbers[i] = 0; //输出值/设定值
} }
m5data.input_mode = VOL[0].tag; //输入功能初始为电压模式 m5data.input_mode = CUR.tag; //输入功能初始为电流模式
m5data.input_mode_type = VOL[0].typ; //电压单位初始为V m5data.input_mode_type = CUR.typ; //电流单位为mA
m5data.output_mode = VOL[0].tag; //输出功能初始为电压模式 m5data.output_mode = CUR.tag; //输出功能初始为电流模式
m5data.output_mode_type = VOL[0].typ; //电压单位初始为V m5data.output_mode_type = CUR.typ; //电压单位初始为mA
sig_channel_select(m5data.io_mode, m5data.output_mode_type); //默认通道 sig_channel_select(m5data.io_mode, m5data.output_mode_type); //默认通道
//绘图数据初始化 //绘图数据初始化
@ -81,13 +81,13 @@ void plot_data_init(void)
pltdata.scd_wait_tick = 0; //副轴等待滴答数 pltdata.scd_wait_tick = 0; //副轴等待滴答数
//chart组件显示int,实际值 //chart组件显示int,实际值
pltdata.yreal_pri_low = VOL[0].low; //实际值的显示下限,主轴 pltdata.yreal_pri_low = 0; //实际值的显示下限,主轴
pltdata.yreal_pri_up = VOL[0].up; //实际值的显示上限,主轴 pltdata.yreal_pri_up = 0; //实际值的显示上限,主轴
pltdata.yreal_scd_low = VOL[0].low; //实际值的显示下限,副轴 pltdata.yreal_scd_low = 0; //实际值的显示下限,副轴
pltdata.yreal_scd_up = VOL[0].up; //实际值的显示上限,副轴 pltdata.yreal_scd_up = 0; //实际值的显示上限,副轴
pltdata.yreal_pri_value = VOL[0].pv; //主轴的实时值,即输出/设定值 pltdata.yreal_pri_value = 0; //主轴的实时值,即输出/设定值
pltdata.yreal_scd_value = VOL[0].pv; //副轴的实时值,即输入/测量值 pltdata.yreal_scd_value = 0; //副轴的实时值,即输入/测量值
pltdata.yreal_scd_value_prv = VOL[0].pv; //前一时刻的输入测量值 pltdata.yreal_scd_value_prv = 0; //前一时刻的输入测量值
} }
void menu_reset(void) void menu_reset(void)
@ -210,32 +210,60 @@ void key_functions_main(void)
{ {
return; return;
} }
// m5data.twk_flag = 1; // 上、下、左、右 任意一个键按下后,闪烁开始 #if NIXIE_CUBE_ENABLE
// m5data.twk_cnt = 0; //每次按下后闪烁计数清零 m5data.twk_flag = 1; // 上、下、左、右 任意一个键按下后,闪烁开始
m5data.twk_cnt = 0; //每次按下后闪烁计数清零
#endif
keyset_output(1); keyset_output(1);
} }
break; break;
case KEY_MENU: case KEY_MENU:
{ {
key = 0; if( m5data.tick_prv == -1 )
{
//恢复默认工作模式关闭、电压V输出
set_working_mode(SIG_CURRENT, CURRENT_MA);
//加载菜单界面
setup_scr_screen_setting(&guider_ui);
scr_setting_recover();
//恢复默认工作模式关闭、电压V输出 delay_cnt(100);
set_working_mode(SIG_VOLTAGE, VOLTAGE_V);
//加载菜单界面 lv_scr_load(guider_ui.screen_setting);
setup_scr_screen_setting(&guider_ui);
delay_cnt(500);
lv_scr_load(guider_ui.screen_setting);
//切换至菜单后,清除主界面对象,释放内存 //按键标志置0等待一段时间后再切换至设置菜单的按键功能
lv_obj_del(guider_ui.screen_main); m5data.key_main_enable = 0;
m5data.tick_prv = xTaskGetTickCount(); //记录起始时刻
}else
{
m5data.tick_cur = xTaskGetTickCount(); //记录当前时刻
m5data.scr_now = SCREEN_SETTING; //当前界面为详细设置菜单 if(m5data.tick_cur < m5data.tick_prv) //防止溢出当前tick小于前一刻的tick
{
m5data.tick_prv = -1; //溢出后复位并返回
m5data.tick_cur = -1;
return;
}
scr_setting_recover(); if( (m5data.tick_cur - m5data.tick_prv) >= screen_switch_wait) //tick间隔达到目标后执行功能
{
//清除主界面对象,释放内存
lv_obj_del(guider_ui.screen_main);
//等待结束,切换成设置菜单的按键功能
m5data.scr_now = SCREEN_SETTING; //当前界面为详细设置菜单
m5data.key_setting_enable = 1;
key = 0;
m5data.tick_prv = -1;
m5data.tick_cur = -1;
}
}
} }
break; break;
@ -319,8 +347,10 @@ void key_functions_main(void)
return; return;
} }
#if NIXIE_CUBE_ENABLE
// m5data.twk_flag = 1; //上、下、左、右 任意一个键按下后,闪烁开始 // m5data.twk_flag = 1; //上、下、左、右 任意一个键按下后,闪烁开始
// m5data.twk_cnt = 0; //每次按下后闪烁计数清零 // m5data.twk_cnt = 0; //每次按下后闪烁计数清零
#endif
//避免游标移动的瞬间,前一刻的数值处于闪烁熄灭的状态,移动游标前重新显示一次当前数值 //避免游标移动的瞬间,前一刻的数值处于闪烁熄灭的状态,移动游标前重新显示一次当前数值
set_nixie_cube(IO_OUTPUT, m5data.io_cursor, m5data.o_numbers[m5data.io_cursor]); set_nixie_cube(IO_OUTPUT, m5data.io_cursor, m5data.o_numbers[m5data.io_cursor]);
@ -359,8 +389,10 @@ void key_functions_main(void)
return; return;
} }
// m5data.twk_flag = 1; // 上、下、左、右 任意一个键按下后,闪烁开始 #if NIXIE_CUBE_ENABLE
// m5data.twk_cnt = 0; //每次按下后闪烁计数清零 m5data.twk_flag = 1; // 上、下、左、右 任意一个键按下后,闪烁开始
m5data.twk_cnt = 0; //每次按下后闪烁计数清零
#endif
//避免游标移动的瞬间,前一刻的数值处于闪烁熄灭的状态,移动游标前重新显示一次当前数值 //避免游标移动的瞬间,前一刻的数值处于闪烁熄灭的状态,移动游标前重新显示一次当前数值
set_nixie_cube(IO_OUTPUT, m5data.io_cursor, m5data.o_numbers[m5data.io_cursor]); set_nixie_cube(IO_OUTPUT, m5data.io_cursor, m5data.o_numbers[m5data.io_cursor]);
@ -515,8 +547,10 @@ void key_functions_main(void)
return; return;
} }
// m5data.twk_flag = 1; // 上、下、左、右 任意一个键按下后,闪烁开始 #if NIXIE_CUBE_ENABLE
// m5data.twk_cnt = 0; //每次按下后闪烁计数清零 m5data.twk_flag = 1; // 上、下、左、右 任意一个键按下后,闪烁开始
m5data.twk_cnt = 0; //每次按下后闪烁计数清零
#endif
keyset_output(-1); keyset_output(-1);
} }
@ -536,56 +570,97 @@ void key_functions_main(void)
} }
} }
uint8_t init_step = 0;
void scr_init_run(void) void scr_init_run(void)
{ {
//进度条动画结束后,界面切换至主界面 switch (init_step)
if( m5data.bar_anime_end_flag != 2 )
{ {
if(m5data.bar_anime_end_flag == 0) case 0:
{ {
if( init_set_bar(0, 30, 1500) ) if( init_set_bar(0, 30, 1500) )
{ {
m5data.bar_anime_end_flag = 1; init_step = 1;
} }
} }
break;
if(m5data.bar_anime_end_flag == 1)
case 1:
{ {
if( init_set_bar(60, 100, 1500) ) if( init_set_bar(60, 100, 1500) )
{ {
m5data.bar_anime_end_flag = 2; init_step = 2;
} }
} }
break;
}
else
{
// //开机动画结束后,清除初始界面内部组件,保留对象,释放内存
// lv_obj_clean(guider_ui.screen_init);
//加载主界面 case 2:
setup_scr_screen_main(&guider_ui); {
delay_cnt(500); // //开机动画结束后,清除初始界面内部组件,保留对象,释放内存
// lv_obj_clean(guider_ui.screen_init);
lv_scr_load(guider_ui.screen_main); //加载主界面
setup_scr_screen_main(&guider_ui);
scr_main_recover();
//删除初始界面对象,释放剩余内存 delay_cnt(500);
lv_obj_del(guider_ui.screen_init);
m5data.scr_init_flag = 1; //开机动画结束,只执行一次 init_step = 3;
m5data.scr_now = SCREEN_MAIN; //开机动画结束后,默认进入主界面 }
break;
set_working_mode(SIG_VOLTAGE, VOLTAGE_V); case 3:
{
if( m5data.tick_prv == -1 )
{
lv_scr_load(guider_ui.screen_main);
delay_cnt(5000); //删除初始界面对象,释放剩余内存
lv_obj_del(guider_ui.screen_init);
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 >= screen_switch_wait) //tick间隔达到目标后执行功能
{
init_step = 4;
m5data.tick_prv = -1;
m5data.tick_cur = -1;
}
}
}
break;
case 4:
{
m5data.scr_init_flag = 1; //开机动画结束,只执行一次
m5data.scr_now = SCREEN_MAIN; //开机动画结束后,默认进入主界面
m5data.key_main_enable = 1;
init_step = 0;
}
break;
default:
break;
} }
} }
//进度条设置, start[0, end], end[start,100], interval[ms]结束后返回1 //进度条设置, start[0, end], end[start,100], interval[ms]结束后返回1
//时间轴:开始 -> 设置起点 -> 等待interval[ms] -> 设置终点 -> 等待interval[ms] -> 结束 //时间轴:开始 -> 设置起点 -> 等待interval[ms] -> 设置终点 -> 等待interval[ms] -> 结束
uint8_t bar_anime_step = 0;
uint8_t init_set_bar(uint8_t start, uint8_t end, uint16_t interval) uint8_t init_set_bar(uint8_t start, uint8_t end, uint16_t interval)
{ {
switch (m5data.bar_anime_step) switch (bar_anime_step)
{ {
case 0: case 0:
{ {
@ -596,7 +671,7 @@ uint8_t init_set_bar(uint8_t start, uint8_t end, uint16_t interval)
{ {
lv_bar_set_value(guider_ui.screen_init_bar_1, end, LV_ANIM_ON); lv_bar_set_value(guider_ui.screen_init_bar_1, end, LV_ANIM_ON);
m5data.bar_anime_step = 1; bar_anime_step = 1;
} }
else else
{ {
@ -605,7 +680,8 @@ uint8_t init_set_bar(uint8_t start, uint8_t end, uint16_t interval)
m5data.tick_prv = xTaskGetTickCount(); //记录起始时刻 m5data.tick_prv = xTaskGetTickCount(); //记录起始时刻
} }
}else }
else
{ {
m5data.tick_cur = xTaskGetTickCount(); //记录当前时刻 m5data.tick_cur = xTaskGetTickCount(); //记录当前时刻
@ -616,14 +692,14 @@ uint8_t init_set_bar(uint8_t start, uint8_t end, uint16_t interval)
return 0; return 0;
} }
if(m5data.tick_cur - m5data.tick_prv >= interval) //tick间隔达到目标后执行功能 if( (m5data.tick_cur - m5data.tick_prv) >= interval) //tick间隔达到目标后执行功能
{ {
m5data.tick_prv = -1; m5data.tick_prv = -1;
m5data.tick_cur = -1; m5data.tick_cur = -1;
lv_bar_set_value(guider_ui.screen_init_bar_1, end, LV_ANIM_ON); lv_bar_set_value(guider_ui.screen_init_bar_1, end, LV_ANIM_ON);
m5data.bar_anime_step = 1; bar_anime_step = 1;
} }
} }
} }
@ -645,12 +721,12 @@ uint8_t init_set_bar(uint8_t start, uint8_t end, uint16_t interval)
return 0; return 0;
} }
if(m5data.tick_cur - m5data.tick_prv >= interval) //tick间隔达到目标后执行功能 if( (m5data.tick_cur - m5data.tick_prv) >= interval) //tick间隔达到目标后执行功能
{ {
m5data.tick_prv = -1; m5data.tick_prv = -1;
m5data.tick_cur = -1; m5data.tick_cur = -1;
m5data.bar_anime_step = 0; bar_anime_step = 0;
return 1; return 1;
} }
@ -683,10 +759,14 @@ void scr_main_run(void)
//当前输入值/测量值显示 //当前输入值/测量值显示
input_value_show(); //500ms input_value_show(); //500ms
#if NIXIE_CUBE_ENABLE
//数值闪烁 //数值闪烁
//num_twinkle(); //1000ms num_twinkle(); //1000ms
#endif
} }
#if EEPROM_MONITOR_ENABLE
//eeprom状态监控置于运行时间显示内部 //eeprom状态监控置于运行时间显示内部
uint8_t ee_status_test = 0; uint8_t ee_status_test = 0;
void eep_status_monitor(void) void eep_status_monitor(void)
@ -704,6 +784,7 @@ void eep_status_monitor(void)
delay_cnt(10); delay_cnt(10);
EEPROM_CS_H; EEPROM_CS_H;
} }
#endif
void runtime_show(void) void runtime_show(void)
{ {
@ -733,16 +814,19 @@ void runtime_show(void)
sprintf(m5data.runtime_show, "%02d:%02d:%02d",m5data.runtime_hours, m5data.runtime_minutes, m5data.runtime_seconds); 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); lv_span_set_text(guider_ui.screen_main_spangroup_time_span, m5data.runtime_show);
#if EEPROM_MONITOR_ENABLE
eep_status_monitor(); eep_status_monitor();
#endif
} }
} }
void battery_show(void) void battery_show(void)
{ {
//每隔3秒读取一次当前电量 //每隔3秒读取一次当前电量
if(battery_3000ms_flag) if(battery_2000ms_flag)
{ {
battery_3000ms_flag = 0; battery_2000ms_flag = 0;
read_battery(); read_battery();
@ -1322,7 +1406,7 @@ void scr_main_recover(void)
break; break;
} }
//设置项同步 //曲线设置项同步
lv_chart_set_point_count(guider_ui.screen_main_chart_1, tabdata.item1_page0_plot_num); lv_chart_set_point_count(guider_ui.screen_main_chart_1, tabdata.item1_page0_plot_num);
for(uint8_t i = 0; i < tabdata.item1_page0_plot_num; i++) for(uint8_t i = 0; i < tabdata.item1_page0_plot_num; i++)
{ {
@ -1337,116 +1421,20 @@ void scr_main_recover(void)
//颜色更新 //颜色更新
void scr_main_color_update(void) void scr_main_color_update(void)
{ {
switch (tabdata.item1_page0_color_input) //输入
{ lv_chart_set_series_color(guider_ui.screen_main_chart_1, guider_ui.screen_main_chart_1_1, lv_color_hex( color_table[tabdata.item1_page0_color_input] ));
case COLOR_BLUE: lv_obj_set_style_line_color(guider_ui.screen_main_line_legend_IN, lv_color_hex( color_table[tabdata.item1_page0_color_input] ), LV_PART_MAIN|LV_STATE_DEFAULT);
{ set_obj_color(guider_ui.screen_main_label_area_IN, tabdata.item1_page0_color_input);
lv_chart_set_series_color(guider_ui.screen_main_chart_1, guider_ui.screen_main_chart_1_1, lv_color_hex(COLOR_BLUE_VALUE));
lv_obj_set_style_line_color(guider_ui.screen_main_line_legend_IN, lv_color_hex(COLOR_BLUE_VALUE), LV_PART_MAIN|LV_STATE_DEFAULT);
set_obj_color(guider_ui.screen_main_label_area_IN, COLOR_BLUE);
}
break;
case COLOR_DARK_BLUE: //输出
{ lv_chart_set_series_color(guider_ui.screen_main_chart_1, guider_ui.screen_main_chart_1_0, lv_color_hex( color_table[tabdata.item1_page0_color_output] ));
lv_chart_set_series_color(guider_ui.screen_main_chart_1, guider_ui.screen_main_chart_1_1, lv_color_hex(COLOR_DARK_BLUE_VALUE)); lv_obj_set_style_line_color(guider_ui.screen_main_line_legend_OUT, lv_color_hex( color_table[tabdata.item1_page0_color_output] ), LV_PART_MAIN|LV_STATE_DEFAULT);
lv_obj_set_style_line_color(guider_ui.screen_main_line_legend_IN, lv_color_hex(COLOR_DARK_BLUE_VALUE), LV_PART_MAIN|LV_STATE_DEFAULT); set_obj_color(guider_ui.screen_main_label_area_OUT, tabdata.item1_page0_color_output);
set_obj_color(guider_ui.screen_main_label_area_IN, COLOR_DARK_BLUE);
}
break;
case COLOR_YELLOW:
{
lv_chart_set_series_color(guider_ui.screen_main_chart_1, guider_ui.screen_main_chart_1_1, lv_color_hex(COLOR_YELLOW_VALUE));
lv_obj_set_style_line_color(guider_ui.screen_main_line_legend_IN, lv_color_hex(COLOR_YELLOW_VALUE), LV_PART_MAIN|LV_STATE_DEFAULT);
set_obj_color(guider_ui.screen_main_label_area_IN, COLOR_YELLOW);
}
break;
case COLOR_GREEN:
{
lv_chart_set_series_color(guider_ui.screen_main_chart_1, guider_ui.screen_main_chart_1_1, lv_color_hex(COLOR_GREEN_VALUE));
lv_obj_set_style_line_color(guider_ui.screen_main_line_legend_IN, lv_color_hex(COLOR_GREEN_VALUE), LV_PART_MAIN|LV_STATE_DEFAULT);
set_obj_color(guider_ui.screen_main_label_area_IN, COLOR_GREEN);
}
break;
case COLOR_RED:
{
lv_chart_set_series_color(guider_ui.screen_main_chart_1, guider_ui.screen_main_chart_1_1, lv_color_hex(COLOR_RED_VALUE));
lv_obj_set_style_line_color(guider_ui.screen_main_line_legend_IN, lv_color_hex(COLOR_RED_VALUE), LV_PART_MAIN|LV_STATE_DEFAULT);
set_obj_color(guider_ui.screen_main_label_area_IN, COLOR_RED);
}
break;
case COLOR_PURPLE:
{
lv_chart_set_series_color(guider_ui.screen_main_chart_1, guider_ui.screen_main_chart_1_1, lv_color_hex(COLOR_PURPLE_VALUE));
lv_obj_set_style_line_color(guider_ui.screen_main_line_legend_IN, lv_color_hex(COLOR_PURPLE_VALUE), LV_PART_MAIN|LV_STATE_DEFAULT);
set_obj_color(guider_ui.screen_main_label_area_IN, COLOR_PURPLE);
}
break;
default:
break;
}
switch (tabdata.item1_page0_color_output)
{
case COLOR_BLUE:
{
lv_chart_set_series_color(guider_ui.screen_main_chart_1, guider_ui.screen_main_chart_1_0, lv_color_hex(COLOR_BLUE_VALUE));
lv_obj_set_style_line_color(guider_ui.screen_main_line_legend_OUT, lv_color_hex(COLOR_BLUE_VALUE), LV_PART_MAIN|LV_STATE_DEFAULT);
set_obj_color(guider_ui.screen_main_label_area_OUT, COLOR_BLUE);
}
break;
case COLOR_DARK_BLUE:
{
lv_chart_set_series_color(guider_ui.screen_main_chart_1, guider_ui.screen_main_chart_1_0, lv_color_hex(COLOR_DARK_BLUE_VALUE));
lv_obj_set_style_line_color(guider_ui.screen_main_line_legend_OUT, lv_color_hex(COLOR_DARK_BLUE_VALUE), LV_PART_MAIN|LV_STATE_DEFAULT);
set_obj_color(guider_ui.screen_main_label_area_OUT, COLOR_DARK_BLUE);
}
break;
case COLOR_YELLOW:
{
lv_chart_set_series_color(guider_ui.screen_main_chart_1, guider_ui.screen_main_chart_1_0, lv_color_hex(COLOR_YELLOW_VALUE));
lv_obj_set_style_line_color(guider_ui.screen_main_line_legend_OUT, lv_color_hex(COLOR_YELLOW_VALUE), LV_PART_MAIN|LV_STATE_DEFAULT);
set_obj_color(guider_ui.screen_main_label_area_OUT, COLOR_YELLOW);
}
break;
case COLOR_GREEN:
{
lv_chart_set_series_color(guider_ui.screen_main_chart_1, guider_ui.screen_main_chart_1_0, lv_color_hex(COLOR_GREEN_VALUE));
lv_obj_set_style_line_color(guider_ui.screen_main_line_legend_OUT, lv_color_hex(COLOR_GREEN_VALUE), LV_PART_MAIN|LV_STATE_DEFAULT);
set_obj_color(guider_ui.screen_main_label_area_OUT, COLOR_GREEN);
}
break;
case COLOR_RED:
{
lv_chart_set_series_color(guider_ui.screen_main_chart_1, guider_ui.screen_main_chart_1_0, lv_color_hex(COLOR_RED_VALUE));
lv_obj_set_style_line_color(guider_ui.screen_main_line_legend_OUT, lv_color_hex(COLOR_RED_VALUE), LV_PART_MAIN|LV_STATE_DEFAULT);
set_obj_color(guider_ui.screen_main_label_area_OUT, COLOR_RED);
}
break;
case COLOR_PURPLE:
{
lv_chart_set_series_color(guider_ui.screen_main_chart_1, guider_ui.screen_main_chart_1_0, lv_color_hex(COLOR_PURPLE_VALUE));
lv_obj_set_style_line_color(guider_ui.screen_main_line_legend_OUT, lv_color_hex(COLOR_PURPLE_VALUE), LV_PART_MAIN|LV_STATE_DEFAULT);
set_obj_color(guider_ui.screen_main_label_area_OUT, COLOR_PURPLE);
}
break;
default:
break;
}
} }
void num_twinkle(void) //数值闪烁 #if NIXIE_CUBE_ENABLE
//数值闪烁
void num_twinkle(void)
{ {
if(m5data.twk_flag == 0) if(m5data.twk_flag == 0)
{ {
@ -1487,6 +1475,7 @@ void num_twinkle(void) //数值闪烁
set_nixie_cube(IO_OUTPUT, m5data.io_cursor, m5data.o_numbers[ m5data.io_cursor ]); set_nixie_cube(IO_OUTPUT, m5data.io_cursor, m5data.o_numbers[ m5data.io_cursor ]);
} }
} }
#endif
//实时曲线绘制 //实时曲线绘制
//将实际值线性转换成绘图值 //将实际值线性转换成绘图值
@ -1610,10 +1599,12 @@ void set_working_mode(SIG_FUNCTIONS mode, SIG_FUNCTIONS_TYPE type)
m5data.io_cursor_prv = 3; m5data.io_cursor_prv = 3;
set_cursor_position(); set_cursor_position();
#if NIXIE_CUBE_ENABLE
//闪烁参数清零 //闪烁参数清零
// m5data.twk_flag = 0; //闪烁中止 m5data.twk_flag = 0; //闪烁中止
// m5data.twk_cnt = 0; //闪烁计数清零 m5data.twk_cnt = 0; //闪烁计数清零
// m5data.twk_flip = 0; //0显示1不显示 m5data.twk_flip = 0; //0显示1不显示
#endif
//} //}
switch (mode) switch (mode)

View File

@ -1,6 +1,16 @@
#include "app_screen_setting.h" #include "app_screen_setting.h"
TABVIEW_DATA tabdata; //设置页面参数初始化 TABVIEW_DATA tabdata; //设置页面参数初始化
int32_t color_table[7] =
{
COLOR_BLUE_VALUE,
COLOR_DARK_BLUE_VALUE,
COLOR_YELLOW_VALUE,
COLOR_GREEN_VALUE,
COLOR_RED_VALUE,
COLOR_PURPLE_VALUE,
COLOR_BLACK_VALUE
};
//设置菜单数据初始化 //设置菜单数据初始化
void tab_data_init(void) void tab_data_init(void)
@ -13,34 +23,36 @@ void tab_data_init(void)
tabdata.content_cursor_prv = 99; //前一刻的~ tabdata.content_cursor_prv = 99; //前一刻的~
tabdata.content_focus = 0; //默认无焦点 tabdata.content_focus = 0; //默认无焦点
//设置界面的初始默认值 //设置界面的初始默认值
//ITEMS_0 选项卡0 //EEPROM部分
item0_data_init(); eeprom_item_data_init();
//ITEMS_1 //ITEMS_0 选项卡0注释项位于EERPOM读取
tabdata.item1_page0_sample_interval = 1500; //ms
tabdata.item1_page0_plot_num = 5; //曲线上同时显示的点数
tabdata.item1_page0_color_input = COLOR_YELLOW; //输入曲线颜色
tabdata.item1_page0_color_output = COLOR_BLUE; //输出曲线颜色
//ITEMS_2
tabdata.item2_page0_saveflag = 0; //[0, 1, 2 ] -> [未保存,保存中,已保存]
tabdata.input_log_temp = 0; //无纸化记录中转存入eeprom
tabdata.output_log_temp = 0; //无纸化记录中转存入eeprom
tabdata.item2_page0_resetflag = 0; //[0, 1, 2 ] -> [未复位,复位中,已复位]
//ITEMS_3
tabdata.item3_page0_lightflag = 0; //照明状态标志0熄灭1开启
tabdata.item3_page0_language = MENU_SIMPLYFY_CHINESE; //语言类型
}
//选项卡 0 数据初始化
void item0_data_init(void)
{
tabdata.item0_page0_vunit = VOLTAGE_V; //电压单位 tabdata.item0_page0_vunit = VOLTAGE_V; //电压单位
tabdata.item0_page1_TCtype = TC_K; //默认为K类型的热电偶 tabdata.item0_page1_TCtype = TC_K; //默认为K类型的热电偶
//ITEMS_1注释项位于EERPOM读取
// tabdata.item1_page0_sample_interval = 1500; //ms
// tabdata.item1_page0_plot_num = 5; //曲线上同时显示的点数
// tabdata.item1_page0_color_input = COLOR_YELLOW; //输入曲线颜色
// tabdata.item1_page0_color_output = COLOR_BLUE; //输出曲线颜色
//ITEMS_2注释项位于EERPOM读取
tabdata.item2_page0_saveflag = 0; //[0, 1, 2 ] -> [未保存,保存中,已保存]
tabdata.input_log_temp = 0; //无纸化记录中转存入eeprom
tabdata.output_log_temp = 0; //无纸化记录中转存入eeprom
tabdata.item2_page0_resetflag = 0; //[0, 1, 2 ] -> [未复位,复位中,已复位]
//ITEMS_3注释项位于EERPOM读取
tabdata.item3_page0_lightflag = 0; //照明状态标志0熄灭1开启
LIGHT_OFF;
// tabdata.item3_page0_language = MENU_SIMPLYFY_CHINESE; //语言类型
}
//选项卡EEPROM部分数据初始化
void eeprom_item_data_init(void)
{
if(tabdata.item2_page0_resetflag != 1) if(tabdata.item2_page0_resetflag != 1)
{ {
//判断eeprom内是否存在数据 //判断eeprom内是否存在数据
@ -54,39 +66,43 @@ void item0_data_init(void)
return; return;
} }
} }
//eeprom_rd_error_flag = 1;
//读取过程中出现过错误,或者触发复位 //读取过程中出现过错误,或者触发复位
if( (eeprom_rd_error_flag == 1)||(tabdata.item2_page0_resetflag == 1) ) if( (eeprom_rd_error_flag == 1)||(tabdata.item2_page0_resetflag == 1) )
{ {
tabdata.item0_page0_vup[0] = VOL[0].up; //电压V上限 tabdata.item0_page0_vup[0] = VOL[0].up; //电压V上限
tabdata.item0_page0_vlow[0] = VOL[0].low; //电压V下限 tabdata.item0_page0_vlow[0] = VOL[0].low; //电压V下限
tabdata.item0_page0_vup[1] = VOL[1].up; //电压mV上限 tabdata.item0_page0_vup[1] = VOL[1].up; //电压mV上限
tabdata.item0_page0_vlow[1] = VOL[1].low; //电压mV下限 tabdata.item0_page0_vlow[1] = VOL[1].low; //电压mV下限
tabdata.item0_page0_cup = CUR.up; //电流上限 tabdata.item0_page0_cup = CUR.up; //电流上限
tabdata.item0_page0_clow = CUR.low; //电流下限 tabdata.item0_page0_clow = CUR.low; //电流下限
tabdata.item0_page0_rup = RES.up; //电阻上限 tabdata.item0_page0_rup = RES.up; //电阻上限
tabdata.item0_page1_rlow = RES.low; //电阻下限 tabdata.item0_page1_rlow = RES.low; //电阻下限
tabdata.item0_page1_fup = FRE.up; //频率上限 tabdata.item0_page1_fup = FRE.up; //频率上限
tabdata.item0_page1_flow = FRE.low; //频率下限 tabdata.item0_page1_flow = FRE.low; //频率下限
tabdata.item0_page1_TCup[0] = TC[0].up; //TCK上限 tabdata.item0_page1_TCup[0] = TC[0].up; //TCK上限
tabdata.item0_page1_TClow[0] = TC[0].low; //TCK下限 tabdata.item0_page1_TClow[0] = TC[0].low; //TCK下限
tabdata.item0_page1_TCup[1] = TC[1].up; //TCS上限 tabdata.item0_page1_TCup[1] = TC[1].up; //TCS上限
tabdata.item0_page1_TClow[1] = TC[1].low; //TCS下限 tabdata.item0_page1_TClow[1] = TC[1].low; //TCS下限
tabdata.item0_page1_TCup[2] = TC[2].up; //TCN上限 tabdata.item0_page1_TCup[2] = TC[2].up; //TCN上限
tabdata.item0_page1_TClow[2] = TC[2].low; //TCN下限 tabdata.item0_page1_TClow[2] = TC[2].low; //TCN下限
tabdata.item0_page1_TCup[3] = TC[3].up; //TCB上限 tabdata.item0_page1_TCup[3] = TC[3].up; //TCB上限
tabdata.item0_page1_TClow[3] = TC[3].low; //TCB下限 tabdata.item0_page1_TClow[3] = TC[3].low; //TCB下限
tabdata.item0_page1_TCup[4] = TC[4].up; //TCE上限 tabdata.item0_page1_TCup[4] = TC[4].up; //TCE上限
tabdata.item0_page1_TClow[4] = TC[4].low; //TCE下限 tabdata.item0_page1_TClow[4] = TC[4].low; //TCE下限
tabdata.item0_page1_TCup[5] = TC[5].up; //TCJ上限 tabdata.item0_page1_TCup[5] = TC[5].up; //TCJ上限
tabdata.item0_page1_TClow[5] = TC[5].low; //TCJ下限 tabdata.item0_page1_TClow[5] = TC[5].low; //TCJ下限
tabdata.item0_page1_TCup[6] = TC[6].up; //TCR上限 tabdata.item0_page1_TCup[6] = TC[6].up; //TCR上限
tabdata.item0_page1_TClow[6] = TC[6].low; //TCR下限 tabdata.item0_page1_TClow[6] = TC[6].low; //TCR下限
tabdata.item0_page1_TCup[7] = TC[7].up; //TCT上限 tabdata.item0_page1_TCup[7] = TC[7].up; //TCT上限
tabdata.item0_page1_TClow[7] = TC[7].low; //TCT下限 tabdata.item0_page1_TClow[7] = TC[7].low; //TCT下限
tabdata.item0_page2_RTDup = RTD.up; //RTD上限 tabdata.item0_page2_RTDup = RTD.up; //RTD上限
tabdata.item0_page2_RTDlow = RTD.low; //RTD下限 tabdata.item0_page2_RTDlow = RTD.low; //RTD下限
tabdata.item1_page0_sample_interval = 1500; //采样间隔
tabdata.item1_page0_plot_num = 5; //描点数量
tabdata.item1_page0_color_input = COLOR_YELLOW; //输入曲线颜色
tabdata.item1_page0_color_output = COLOR_BLUE; //输出曲线颜色
tabdata.item3_page0_language = MENU_SIMPLYFY_CHINESE; //语言选择
//针对复位的情况追加进行保存 //针对复位的情况追加进行保存
if(tabdata.item2_page0_resetflag == 1) if(tabdata.item2_page0_resetflag == 1)
@ -94,9 +110,6 @@ void item0_data_init(void)
//eeprom_datasave(); //eeprom_datasave();
eeprom_datasave_changed(); eeprom_datasave_changed();
//保存状态更改为“已保存”
tabdata.item2_page0_saveflag = 0;
set_item1_text(DATA_SAVE);
} }
} }
} }
@ -114,33 +127,60 @@ void key_functions_setting(void)
{ {
case KEY_BACK: case KEY_BACK:
{ {
key = 0;
//从设置界面返回主界面 //从设置界面返回主界面
if(tabdata.content_cursor == 99) if(tabdata.content_cursor == 99)
{ {
//下次进入设置页面时从选项卡0开始 if( m5data.tick_prv == -1 )
tabdata.item_cursor = 0; {
//下次进入设置页面时从选项卡0开始
tabdata.item_cursor = 0;
//加载主界面 //加载主界面
setup_scr_screen_main(&guider_ui); setup_scr_screen_main(&guider_ui);
delay_cnt(500);
//恢复之前显示的数据 //恢复之前显示的数据
scr_main_recover(); scr_main_recover();
lv_scr_load(guider_ui.screen_main); delay_cnt(100);
//切换至菜单后,清除主界面对象,释放内存 lv_scr_load(guider_ui.screen_main);
lv_obj_del(guider_ui.screen_setting);
//设置菜单按键使能置零,等待一段时间后切换至主界面的按键功能
m5data.key_setting_enable = 0;
//当前界面为主界面 m5data.tick_prv = xTaskGetTickCount(); //记录起始时刻
m5data.scr_now = SCREEN_MAIN; }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) >= screen_switch_wait) //tick间隔达到目标后执行功能
{
//清除设置界面对象,释放内存
lv_obj_del(guider_ui.screen_setting);
//等待结束,切换至主界面的按键功能
m5data.scr_now = SCREEN_MAIN;
m5data.key_main_enable = 1;
key = 0;
m5data.tick_prv = -1;
m5data.tick_cur = -1;
}
}
} }
else else
{ {
key = 0;
//当不存在焦点时,从内容选择返回选项卡选择 //当不存在焦点时,从内容选择返回选项卡选择
if(tabdata.content_focus == 0) if(tabdata.content_focus == 0)
{ {
@ -616,8 +656,8 @@ void setting_items_page(uint8_t ite, uint8_t page)
//特殊处理,避免其他选项卡也被染上颜色 //特殊处理,避免其他选项卡也被染上颜色
if(ite != ITEMS_1) if(ite != ITEMS_1)
{ {
set_obj_color(guider_ui.screen_setting_label_21, 99); set_obj_color(guider_ui.screen_setting_label_21, 7);
set_obj_color(guider_ui.screen_setting_label_31, 99); set_obj_color(guider_ui.screen_setting_label_31, 7);
} }
switch (ite) switch (ite)
@ -951,6 +991,9 @@ void setting_contents_modify(uint8_t ite, uint8_t con, int8_t step)
{ {
set_item1_value(con, step); set_item1_value(con, step);
set_item1_text(con); set_item1_text(con);
if(tabdata.item2_page0_saveflag == 2) tabdata.item2_page0_saveflag = 0;
if(tabdata.item2_page0_resetflag == 2) tabdata.item2_page0_resetflag = 0;
} }
break; break;
@ -1033,41 +1076,110 @@ void scr_setting_recover(void)
// uint8_t eep_test_flag = 0; // uint8_t eep_test_flag = 0;
// uint8_t tx = 0, rx = 0; // uint8_t tx = 0, rx = 0;
// uint8_t addr_test[3] = {0}; // uint8_t addr_test[3] = {0};
uint8_t reset_step = 0, save_step = 0;
void scr_setting_run(void) //详细设置界面 void scr_setting_run(void) //详细设置界面
{ {
if(tabdata.item2_page0_saveflag == 1) if(tabdata.item2_page0_saveflag == 1)
{ {
save_cnt++; if(save_step == 0)
if(save_cnt > 5)
{ {
save_cnt = 0; save_step = 1;
if(eeprom_wrt_error_flag == 0) //执行保存
//eeprom_datasave();
eeprom_datasave_changed();
}
else
{
save_cnt++;
if(save_cnt > 5)
{ {
//未出错 save_cnt = 0;
tabdata.item2_page0_saveflag = 2;
if(eeprom_wrt_error_flag == 0)
{
//未出错
tabdata.item2_page0_saveflag = 2;
set_item2_text(DATA_SAVE);
}
else
{
//出现过错误
tabdata.item2_page0_saveflag = 0;
set_item2_text(DATA_SAVE);
}
set_item2_text(DATA_SAVE); save_step = 0;
}
else
{
//出现过错误
tabdata.item2_page0_saveflag = 0;
set_item2_text(DATA_SAVE);
} }
} }
} }
if(tabdata.item2_page0_resetflag == 1) if(tabdata.item2_page0_resetflag == 1)
{ {
reset_cnt++; if(reset_step == 0)
if(reset_cnt > 5)
{ {
reset_cnt = 0; reset_step = 1;
tabdata.item2_page0_resetflag = 2;
set_item2_text(DATA_RESET); //执行复位
eeprom_item_data_init();
tabdata.item3_page0_lightflag = 0; //照明状态标志0熄灭1开启
LIGHT_OFF;
tabdata.item0_page0_vunit = VOLTAGE_V; //电压单位
tabdata.item0_page1_TCtype = TC_K; //默认为K类型的热电偶
}
else
{
reset_cnt++;
if(reset_cnt > 5)
{
reset_cnt = 0;
tabdata.item2_page0_resetflag = 2;
//更新本页文本
//保存状态更改为“已保存”
tabdata.item2_page0_saveflag = 0;
set_item2_text(DATA_SAVE);
//选项卡与标题
setting_laguage_switch(tabdata.item3_page0_language);
//内容左列
switch (tabdata.item3_page0_language)
{
case MENU_SIMPLYFY_CHINESE:
{
lv_label_set_text(guider_ui.screen_setting_label_00, "参数保存");
lv_label_set_text(guider_ui.screen_setting_label_10, "输入记录");
lv_label_set_text(guider_ui.screen_setting_label_20, "输出记录");
lv_label_set_text(guider_ui.screen_setting_label_30, "参数复位");
}
break;
case MENU_ENGLISH:
{
lv_label_set_text(guider_ui.screen_setting_label_00, "Para save");
lv_label_set_text(guider_ui.screen_setting_label_10, "Input log");
lv_label_set_text(guider_ui.screen_setting_label_20, "Output log");
lv_label_set_text(guider_ui.screen_setting_label_30, "Para reset");
}
break;
default:
break;
}
//内容右列
set_item2_text(DATA_RESET);
set_item2_text(DATA_SAVE);
set_item2_text(INPUT_LOG);
set_item2_text(OUTPUT_LOG);
reset_step = 0;
}
} }
} }

View File

@ -146,6 +146,8 @@ void physical_quantity_init(void)
RTD.pv = 0; RTD.pv = 0;
} }
//切换屏幕的等待时间ms
uint16_t screen_switch_wait = 300;
void screen_run(void) void screen_run(void)
{ {
if(m5data.menu_reset_flag) if(m5data.menu_reset_flag)
@ -167,15 +169,34 @@ void screen_run(void)
{ {
case SCREEN_MAIN: case SCREEN_MAIN:
{ {
scr_main_run(); //主界面显示 if(m5data.key_main_enable)
key_functions_main(); //主界面的按键功能 {
scr_main_run(); //主界面显示
key_functions_main(); //主界面的按键功能
}
else
{
//KEY_MENU按下后进入此处等待screen_switch_waitms直接切换存在卡死风险
key = KEY_MENU;
key_functions_main(); //主界面的按键功能
}
} }
break; break;
case SCREEN_SETTING: case SCREEN_SETTING:
{ {
scr_setting_run(); //设置界面 if (m5data.key_setting_enable)
key_functions_setting(); //设置界面的按键功能 {
scr_setting_run(); //设置界面
key_functions_setting(); //设置界面的按键功能
}
else
{
//KEY_BACK按下后进入此处等待screen_switch_waitms直接切换存在卡死风险
key = KEY_BACK;
key_functions_setting(); //主界面的按键功能
}
} }
break; break;

View File

@ -384,6 +384,36 @@ void eeprom_datasave(void)
eeprom_writedata(RTD_LOW_ADDR, temp_h); eeprom_writedata(RTD_LOW_ADDR, temp_h);
eeprom_writedata(RTD_LOW_ADDR + 8, temp_l); eeprom_writedata(RTD_LOW_ADDR + 8, temp_l);
//采样间隔
temp_h = tabdata.item1_page0_sample_interval >> 8;
temp_l = tabdata.item1_page0_sample_interval & 0xFF;
eeprom_writedata(SAMPLE_INTERVAL_ADDR, temp_h);
eeprom_writedata(SAMPLE_INTERVAL_ADDR + 8, temp_l);
//描点数量
temp_h = tabdata.item1_page0_plot_num >> 8;
temp_l = tabdata.item1_page0_plot_num & 0xFF;
eeprom_writedata(PLOT_COUNT_ADDR, temp_h);
eeprom_writedata(PLOT_COUNT_ADDR + 8, temp_l);
//输入曲线颜色
temp_h = tabdata.item1_page0_color_input >> 8;
temp_l = tabdata.item1_page0_color_input & 0xFF;
eeprom_writedata(INPUT_COLOR_ADDR, temp_h);
eeprom_writedata(INPUT_COLOR_ADDR + 8, temp_l);
//输出曲线颜色
temp_h = tabdata.item1_page0_color_output >> 8;
temp_l = tabdata.item1_page0_color_output & 0xFF;
eeprom_writedata(OUTPUT_COLOR_ADDR, temp_h);
eeprom_writedata(OUTPUT_COLOR_ADDR + 8, temp_l);
//语言选择
temp_h = tabdata.item3_page0_language >> 8;
temp_l = tabdata.item3_page0_language & 0xFF;
eeprom_writedata(LANGUAGE_SELECT_ADDR, temp_h);
eeprom_writedata(LANGUAGE_SELECT_ADDR + 8, temp_l);
} }
#else #else
@ -448,6 +478,41 @@ void eeprom_datasave_changed(void)
eeprom_datasave_single(12); eeprom_datasave_single(12);
} }
if(tab_temp.item1_page0_sample_interval != tabdata.item1_page0_sample_interval)
{
tabdata.item1_page0_sample_interval = tab_temp.item1_page0_sample_interval;
eeprom_datasave_single(13);
}
if(tab_temp.item1_page0_plot_num != tabdata.item1_page0_plot_num)
{
tabdata.item1_page0_plot_num = tab_temp.item1_page0_plot_num;
eeprom_datasave_single(14);
}
if(tab_temp.item1_page0_color_input != tabdata.item1_page0_color_input)
{
tabdata.item1_page0_color_input = tab_temp.item1_page0_color_input;
eeprom_datasave_single(15);
}
if(tab_temp.item1_page0_color_output != tabdata.item1_page0_color_output)
{
tabdata.item1_page0_color_output = tab_temp.item1_page0_color_output;
eeprom_datasave_single(16);
}
if(tab_temp.item3_page0_language != tabdata.item3_page0_language)
{
tabdata.item3_page0_language = tab_temp.item3_page0_language;
eeprom_datasave_single(17);
}
} }
#endif #endif
@ -663,7 +728,57 @@ void eeprom_datasave_single(uint8_t tag)
eeprom_writedata(RTD_LOW_ADDR + 8, temp_l); eeprom_writedata(RTD_LOW_ADDR + 8, temp_l);
} }
break; break;
case 13:
{
//采样间隔
temp_h = tabdata.item1_page0_sample_interval >> 8;
temp_l = tabdata.item1_page0_sample_interval & 0xFF;
eeprom_writedata(SAMPLE_INTERVAL_ADDR, temp_h);
eeprom_writedata(SAMPLE_INTERVAL_ADDR + 8, temp_l);
}
break;
case 14:
{
//描点数量
temp_h = tabdata.item1_page0_plot_num >> 8;
temp_l = tabdata.item1_page0_plot_num & 0xFF;
eeprom_writedata(PLOT_COUNT_ADDR, temp_h);
eeprom_writedata(PLOT_COUNT_ADDR + 8, temp_l);
}
break;
case 15:
{
//输入曲线颜色
temp_h = tabdata.item1_page0_color_input >> 8;
temp_l = tabdata.item1_page0_color_input & 0xFF;
eeprom_writedata(INPUT_COLOR_ADDR, temp_h);
eeprom_writedata(INPUT_COLOR_ADDR + 8, temp_l);
}
break;
case 16:
{
//输出曲线颜色
temp_h = tabdata.item1_page0_color_output >> 8;
temp_l = tabdata.item1_page0_color_output & 0xFF;
eeprom_writedata(OUTPUT_COLOR_ADDR, temp_h);
eeprom_writedata(OUTPUT_COLOR_ADDR + 8, temp_l);
}
break;
case 17:
{
//语言选择
temp_h = tabdata.item3_page0_language >> 8;
temp_l = tabdata.item3_page0_language & 0xFF;
eeprom_writedata(LANGUAGE_SELECT_ADDR, temp_h);
eeprom_writedata(LANGUAGE_SELECT_ADDR + 8, temp_l);
}
break;
default: default:
break; break;
} }
@ -802,6 +917,31 @@ void eeprom_dataread(void)
temp_h = eeprom_readdata(RTD_LOW_ADDR); temp_h = eeprom_readdata(RTD_LOW_ADDR);
temp_l = eeprom_readdata(RTD_LOW_ADDR + 8); temp_l = eeprom_readdata(RTD_LOW_ADDR + 8);
tabdata.item0_page2_RTDlow = ( temp_h << 8 ) + temp_l; tabdata.item0_page2_RTDlow = ( temp_h << 8 ) + temp_l;
//采样间隔
temp_h = eeprom_readdata(SAMPLE_INTERVAL_ADDR);
temp_l = eeprom_readdata(SAMPLE_INTERVAL_ADDR + 8);
tabdata.item1_page0_sample_interval = ( temp_h << 8 ) + temp_l;
//描点数量
temp_h = eeprom_readdata(PLOT_COUNT_ADDR);
temp_l = eeprom_readdata(PLOT_COUNT_ADDR + 8);
tabdata.item1_page0_plot_num = ( temp_h << 8 ) + temp_l;
//输入曲线颜色
temp_h = eeprom_readdata(INPUT_COLOR_ADDR);
temp_l = eeprom_readdata(INPUT_COLOR_ADDR + 8);
tabdata.item1_page0_color_input = ( temp_h << 8 ) + temp_l;
//输出曲线颜色
temp_h = eeprom_readdata(OUTPUT_COLOR_ADDR);
temp_l = eeprom_readdata(OUTPUT_COLOR_ADDR + 8);
tabdata.item1_page0_color_output = ( temp_h << 8 ) + temp_l;
//语言选择
temp_h = eeprom_readdata(LANGUAGE_SELECT_ADDR);
temp_l = eeprom_readdata(LANGUAGE_SELECT_ADDR + 8);
tabdata.item3_page0_language = ( temp_h << 8 ) + temp_l;
} }
//判断EEPROM内是否已存在数据 //判断EEPROM内是否已存在数据

View File

@ -902,50 +902,7 @@ void set_item3_text(uint8_t con)
//修改对象颜色 //修改对象颜色
void set_obj_color(lv_obj_t * obj, uint8_t color) void set_obj_color(lv_obj_t * obj, uint8_t color)
{ {
switch (color) lv_obj_set_style_text_color(obj, lv_color_hex(color_table[color]), LV_PART_MAIN|LV_STATE_DEFAULT);
{
case COLOR_BLUE:
{
lv_obj_set_style_text_color(obj, lv_color_hex(COLOR_BLUE_VALUE), LV_PART_MAIN|LV_STATE_DEFAULT);
}
break;
case COLOR_DARK_BLUE:
{
lv_obj_set_style_text_color(obj, lv_color_hex(COLOR_DARK_BLUE_VALUE), LV_PART_MAIN|LV_STATE_DEFAULT);
}
break;
case COLOR_YELLOW:
{
lv_obj_set_style_text_color(obj, lv_color_hex(COLOR_YELLOW_VALUE), LV_PART_MAIN|LV_STATE_DEFAULT);
}
break;
case COLOR_GREEN:
{
lv_obj_set_style_text_color(obj, lv_color_hex(COLOR_GREEN_VALUE), LV_PART_MAIN|LV_STATE_DEFAULT);
}
break;
case COLOR_RED:
{
lv_obj_set_style_text_color(obj, lv_color_hex(COLOR_RED_VALUE), LV_PART_MAIN|LV_STATE_DEFAULT);
}
break;
case COLOR_PURPLE:
{
lv_obj_set_style_text_color(obj, lv_color_hex(COLOR_PURPLE_VALUE), LV_PART_MAIN|LV_STATE_DEFAULT);
}
break;
default:
{
lv_obj_set_style_text_color(obj, lv_color_hex(0x000000), LV_PART_MAIN|LV_STATE_DEFAULT);
}
break;
}
} }

View File

@ -294,12 +294,6 @@ void set_item2_value(uint8_t con, int8_t step)
{ {
tabdata.item2_page0_saveflag = 1; tabdata.item2_page0_saveflag = 1;
set_item2_text(DATA_SAVE);
//执行保存
//eeprom_datasave();
eeprom_datasave_changed();
save_cnt = 0; save_cnt = 0;
} }
} }
@ -310,12 +304,7 @@ void set_item2_value(uint8_t con, int8_t step)
if(tabdata.item2_page0_resetflag == 0) if(tabdata.item2_page0_resetflag == 0)
{ {
tabdata.item2_page0_resetflag = 1; tabdata.item2_page0_resetflag = 1;
set_item2_text(DATA_RESET);
//执行复位
item0_data_init();
reset_cnt = 0; reset_cnt = 0;
} }
} }
@ -347,6 +336,9 @@ void set_item3_value(uint8_t con, int8_t step)
{ {
tabdata.item3_page0_language = (tabdata.item3_page0_language > 0)?(0):(tabdata.item3_page0_language + 1); tabdata.item3_page0_language = (tabdata.item3_page0_language > 0)?(0):(tabdata.item3_page0_language + 1);
if(tabdata.item2_page0_saveflag == 2) tabdata.item2_page0_saveflag = 0;
if(tabdata.item2_page0_resetflag == 2) tabdata.item2_page0_resetflag = 0;
//修改语言选项后,随即更改标题、选项卡、当前页面的语言 //修改语言选项后,随即更改标题、选项卡、当前页面的语言
setting_laguage_switch(tabdata.item3_page0_language); setting_laguage_switch(tabdata.item3_page0_language);
} }

View File

@ -10,8 +10,8 @@
int heart_1000ms_flag = 0; int heart_1000ms_flag = 0;
int heart_1000ms_cnt = 0; int heart_1000ms_cnt = 0;
int battery_3000ms_flag = 0; int battery_2000ms_flag = 0;
int battery_3000ms_cnt = 0; int battery_2000ms_cnt = 0;
int plot_ms_flag = 0; int plot_ms_flag = 0;
int plot_ms_cnt = 0; int plot_ms_cnt = 0;
int twk_1000ms_flag = 0; int twk_1000ms_flag = 0;
@ -35,11 +35,11 @@ void duty_tim6(void)
heart_1000ms_flag = 1; heart_1000ms_flag = 1;
} }
battery_3000ms_cnt++; battery_2000ms_cnt++;
if( battery_3000ms_cnt >= 3000) if( battery_2000ms_cnt >= 2000)
{ {
battery_3000ms_cnt = 0; battery_2000ms_cnt = 0;
battery_3000ms_flag = 1; battery_2000ms_flag = 1;
} }
plot_ms_cnt++; plot_ms_cnt++;

View File

@ -47,9 +47,9 @@ extern "C" {
#define LED_TOG HAL_GPIO_TogglePin(light_GPIO_Port, light_Pin) #define LED_TOG HAL_GPIO_TogglePin(light_GPIO_Port, light_Pin)
#define LIGHT_ON HAL_GPIO_WritePin(light_GPIO_Port, light_Pin, GPIO_PIN_SET) // #define LIGHT_ON HAL_GPIO_WritePin(light_GPIO_Port, light_Pin, GPIO_PIN_SET)
#define LIGHT_OFF HAL_GPIO_WritePin(light_GPIO_Port, light_Pin, GPIO_PIN_RESET) // #define LIGHT_OFF HAL_GPIO_WritePin(light_GPIO_Port, light_Pin, GPIO_PIN_RESET)
//#define RS485_RW(RW) HAL_GPIO_WritePin(RS485_RW_GPIO_Port, RS485_RW_Pin, RW) //#define RS485_RW(RW) HAL_GPIO_WritePin(RS485_RW_GPIO_Port, RS485_RW_Pin, RW)

View File

@ -310,7 +310,7 @@ void start_menu(void const * argument)
for(;;) for(;;)
{ {
screen_run(); screen_run();
osDelay(200); osDelay(500);
menu_stack_watch = uxTaskGetStackHighWaterMark(NULL); menu_stack_watch = uxTaskGetStackHighWaterMark(NULL);
menu_stack_watch = 512 - menu_stack_watch; menu_stack_watch = 512 - menu_stack_watch;
} }

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff