更新:

1、新增针对静默状态的判断与处理,降低了静默状态下的CPU占用;
2、 绘图值变化较小时不对曲线的下一个进行更新;
3、数码管输入部分:变化值较小时不做变动,对于详细设置菜单中的设置项进行同步;
4、数码管输出部分:与设置项中的上下限进行同步;
This commit is contained in:
吴俊潮 2025-03-10 16:41:22 +08:00
parent 13369ef45b
commit deb4946c7b
4 changed files with 16794 additions and 16670 deletions

View File

@ -65,6 +65,9 @@ extern const lv_img_dsc_t * screen_main_animimg_14_imgs[11];
#define KEY_DOWN 86
#define KEY_BACK 94
//绝对值计算
#define MY_ABS(pa, pb) ( ( (pa-pb) >= 0 )?(pa-pb):(pb-pa) )
//初始界面
//{
@ -97,6 +100,9 @@ extern const lv_img_dsc_t * screen_main_animimg_14_imgs[11];
//闪烁次数上限
#define TWINKLE_CNT_MAX 10
//绘图等待滴答数上限
#define PLOT_WAIT_TICK_MAX 5
//}
//设置界面
@ -272,12 +278,17 @@ typedef struct
float32 yreal_scd_low; //实际值y下限
//lv_chart_set_next_value(ui->screen_main_chart_1, ui->screen_main_chart_1_0, 1);
uint8_t pri_wait_tick; //主轴等待滴答数,一段时间没变化后不更新曲线
int y_pri_value; //0号曲线的下一个点主y轴
int y_pri_value_prv; //前一时刻的点,用于判断是否需要更新内容
float32 yreal_pri_value; //0号曲线的下一个实际值
//lv_chart_set_next_value(ui->screen_main_chart_1, ui->screen_main_chart_1_1, 1);
uint8_t scd_wait_tick; //副轴等待滴答数,一段时间没变化后不更新曲线
int y_scd_value; //1号曲线的下一个点副y轴
int y_scd_value_prv; //前一时刻的点,用于判断是否需要更新内容
float32 yreal_scd_value; //1号曲线的下一个实际值
float32 yreal_scd_value_prv;//前一时刻的点,用于判断是否需要更新内容
}PLOT_DATA;

View File

@ -2,7 +2,7 @@
* @Author: wujunchao wujunchao@wuxismart.com
* @Date: 2024-12-27 11:50:56
* @LastEditors: wujunchao wujunchao@wuxismart.com
* @LastEditTime: 2025-03-07 15:27:25
* @LastEditTime: 2025-03-10 16:37:01
* @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
*/
@ -62,7 +62,12 @@ void menu_data_init(void)
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; //副轴等待滴答数
//实际物理量float32
pltdata.yreal_pri_low = 0; //实际值的显示下限,主轴
@ -71,6 +76,7 @@ void menu_data_init(void)
pltdata.yreal_scd_up = 30; //实际值的显示上限,副轴
pltdata.yreal_pri_value = 0; //主轴的实时值,即输出/设定值
pltdata.yreal_scd_value = 0; //副轴的实时值,即输入/测量值
pltdata.yreal_scd_value_prv = 0; //前一时刻的输入测量值
// }
//screen_setting
@ -368,14 +374,14 @@ void key_functions_main(void)
break;
}
int oftemp = 0;
//还原成实际数值
oftemp = 100000*m5data.o_numbers[0] + 10000*m5data.o_numbers[1] + 1000*m5data.o_numbers[2] + \
100*m5data.o_numbers[3] + 10*m5data.o_numbers[4] + m5data.o_numbers[5];
//发生向上溢出时,根据溢出的位置对实际数值进行处理
if(m5data.overflow_flag_up)
{
int oftemp = 0;
//还原成实际数值
oftemp = 100000*m5data.o_numbers[0] + 10000*m5data.o_numbers[1] + 1000*m5data.o_numbers[2] + \
100*m5data.o_numbers[3] + 10*m5data.o_numbers[4] + m5data.o_numbers[5];
//根据溢出的位置对实际值进行计算
switch (m5data.overflow_flag_up)
{
@ -413,6 +419,17 @@ void key_functions_main(void)
break;
}
}
//输入值上限限幅
if(oftemp >= (pltdata.yreal_pri_up*1000) )
{
oftemp = pltdata.yreal_pri_up*1000;
}
//仅当发生过溢出或者达到上限的情况下才需要执行以下操作
if( (m5data.overflow_flag_up)||(oftemp == pltdata.yreal_pri_up*1000) )
{
//将实际值转换成6个独立数字
m5data.o_numbers[0] = (oftemp/100000 > 9)?(9):(oftemp/100000);
lv_img_set_src(guider_ui.screen_main_animimg_2, screen_main_animimg_2_imgs[ m5data.o_numbers[0] ]);
@ -426,10 +443,10 @@ void key_functions_main(void)
lv_img_set_src(guider_ui.screen_main_animimg_6, screen_main_animimg_6_imgs[ m5data.o_numbers[4] ]);
m5data.o_numbers[5] = oftemp % 10;
lv_img_set_src(guider_ui.screen_main_animimg_7, screen_main_animimg_7_imgs[ m5data.o_numbers[5] ]);
//溢出处理完成,标志清零
m5data.overflow_flag_up = 0;
}
//溢出处理完成,标志清零
m5data.overflow_flag_up = 0;
}
break;
@ -961,12 +978,13 @@ void key_functions_main(void)
break;
}
if(m5data.overflow_flag_low) //发生向下溢出
{
int oftemp = 0;
oftemp = 100000*m5data.o_numbers[0] + 10000*m5data.o_numbers[1] + 1000*m5data.o_numbers[2] + \
100*m5data.o_numbers[3] + 10*m5data.o_numbers[4] + m5data.o_numbers[5];
int oftemp = 0;
oftemp = 100000*m5data.o_numbers[0] + 10000*m5data.o_numbers[1] + 1000*m5data.o_numbers[2] + \
100*m5data.o_numbers[3] + 10*m5data.o_numbers[4] + m5data.o_numbers[5];
//向下溢出处理
if(m5data.overflow_flag_low)
{
switch (m5data.overflow_flag_low)
{
case 1:
@ -1002,7 +1020,17 @@ void key_functions_main(void)
default:
break;
}
}
//输入值上限限幅
if(oftemp <= (pltdata.yreal_pri_low*1000) )
{
oftemp = pltdata.yreal_pri_low*1000;
}
//仅当发生过溢出或者达到下限的情况下才需要执行以下操作
if( (m5data.overflow_flag_low)||(oftemp == pltdata.yreal_pri_low*1000) )
{
m5data.o_numbers[0] = (oftemp/100000 > 9)?(0):(oftemp/100000);
lv_img_set_src(guider_ui.screen_main_animimg_2, screen_main_animimg_2_imgs[ m5data.o_numbers[0] ]);
m5data.o_numbers[1] = (oftemp/10000) % 10;
@ -1015,9 +1043,10 @@ void key_functions_main(void)
lv_img_set_src(guider_ui.screen_main_animimg_6, screen_main_animimg_6_imgs[ m5data.o_numbers[4] ]);
m5data.o_numbers[5] = oftemp % 10;
lv_img_set_src(guider_ui.screen_main_animimg_7, screen_main_animimg_7_imgs[ m5data.o_numbers[5] ]);
m5data.overflow_flag_low = 0;
}
//溢出标志清零
m5data.overflow_flag_low = 0;
}
break;
@ -1148,8 +1177,31 @@ void battery_show(void)
void input_value_show(void)
{
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;
pvi = (int32_t)(pltdata.yreal_scd_value * 1000); //副轴用于绘制实时输入测量值
//输入显示限幅
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); //副轴用于绘制实时输入测量值
}
//显示当前测量值,从左往右 0->5
m5data.i_numbers[0] = (pvi/100000 > 9)?(0):(pvi/100000);
lv_img_set_src(guider_ui.screen_main_animimg_9, screen_main_animimg_9_imgs[ m5data.i_numbers[0] ]);
@ -2174,10 +2226,30 @@ void plot_drawing(void)
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(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);
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++;
pltdata.y_pri_value_prv = pltdata.y_pri_value;
//数值限幅
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;
pltdata.y_pri_value_prv = pltdata.y_pri_value;
//数值限幅
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);
}
//}
//输入曲线
@ -2186,10 +2258,30 @@ void plot_drawing(void)
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(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);
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++;
pltdata.y_scd_value_prv = pltdata.y_scd_value;
//数值限幅
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;
pltdata.y_scd_value_prv = pltdata.y_scd_value;
//数值限幅
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);
}
//}
}
}

View File

@ -140,7 +140,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>JL2CM3</Key>
<Name>-U69404082 -O78 -S1 -ZTIFSpeedSel10000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407VGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name>
<Name>-U69404082 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407VGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>

File diff suppressed because it is too large Load Diff