更新:数码管显示函数重构,删除进位&退位&溢出处理函数
This commit is contained in:
parent
45d0edfb1f
commit
3357a8af8d
|
@ -2,7 +2,7 @@
|
|||
* @Author: wujunchao wujunchao@wuxismart.com
|
||||
* @Date: 2024-12-27 11:51:06
|
||||
* @LastEditors: wujunchao wujunchao@wuxismart.com
|
||||
* @LastEditTime: 2025-03-19 11:29:20
|
||||
* @LastEditTime: 2025-03-19 17:02:06
|
||||
* @FilePath: \signal_generator\App\APP_WU\Inc\apps_gather.h
|
||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
*/
|
||||
|
@ -309,7 +309,7 @@ typedef struct
|
|||
uint8_t runtime_hours;
|
||||
char runtime_show[16]; //存放运行时间转化得到的字符串
|
||||
uint8_t battery_cnt; //电池计数
|
||||
uint8_t io_cursor; //当前游标位置, [000,000], 0~5整数表示6个位置
|
||||
uint8_t io_cursor; //当前游标位置, [0000,000], 0~6整数表示7个位置
|
||||
uint8_t io_cursor_prv; //前一时刻的游标位置
|
||||
uint8_t i_numbers[7]; //实时显示的字符,输入
|
||||
uint8_t o_numbers[7]; //实时显示的字符,输出
|
||||
|
@ -439,23 +439,21 @@ void set_cursor_position(void);
|
|||
//设置数码管符号位,0->熄灭,1->显示负号
|
||||
void set_nixie_cube_sign(uint8_t on2off, uint8_t sg);
|
||||
|
||||
//设置数码管显示值:io_slc->输入/输出,pos->第几个数字,num->数值
|
||||
//设置数码管显示值:io_slc->输入/输出,pos->第几个数字,num->数值*1000
|
||||
//补充说明:pos = 99时,num=[0000000,9999999];pos = 10时,数值显示为空白。
|
||||
//该部分未对输出缓存数组做处理
|
||||
void set_nixie_cube(uint8_t io_slc, uint8_t pos, int32_t num);
|
||||
|
||||
//获取当前设定的输出值(数组&符号 -> (有符号)实际值)
|
||||
float32 get_output_value(void);
|
||||
|
||||
//设置当前的输出值(实际值*1000 -> (无符号)数组),可直接输入负数
|
||||
void set_output_value(int32_t pvo);
|
||||
//设置当前的输出值,1000*实际值->(无符号)数组,可直接输入负数
|
||||
void set_output_array(int32_t pvo);
|
||||
|
||||
//设置输出值:数字显示 + 符号 + 缓存
|
||||
void set_output(int32_t sto);
|
||||
//设置输出值:数字显示 + 符号 + 缓存,sto->实际值
|
||||
void set_output(float32 sto);
|
||||
|
||||
//改变数码管的显示与缓存值,dir:增加或减少(NIXIE_INCREASE & NIXIE_DECREASE),val:改变量(通常为1)
|
||||
//该函数仅适用于改变前后符号相同的情况
|
||||
void change_nixie_cube_OUT(uint8_t dir, uint8_t val);
|
||||
//RE:按键修改输出值
|
||||
void keyset_output(int8_t key_step);
|
||||
|
||||
//通道选择与切换
|
||||
void sig_channel_select(uint8_t io, SIG_FUNCTIONS_TYPE type);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author: wujunchao wujunchao@wuxismart.com
|
||||
* @Date: 2024-12-27 11:50:56
|
||||
* @LastEditors: wujunchao wujunchao@wuxismart.com
|
||||
* @LastEditTime: 2025-03-19 16:34:55
|
||||
* @LastEditTime: 2025-03-19 18:35:25
|
||||
* @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
|
||||
*/
|
||||
|
@ -403,48 +403,50 @@ void key_functions_main(void)
|
|||
m5data.twk_flag = 1; // 上、下、左、右 任意一个键按下后,闪烁开始
|
||||
m5data.twk_cnt = 0; //每次按下后闪烁计数清零
|
||||
|
||||
uint8_t step = 1; //up键步长,默认为1
|
||||
float32 step_real = 0; //实际值步长
|
||||
float32 pv = 0, sv = 0, up = 0;
|
||||
keyset_output(1);
|
||||
|
||||
//根据当前游标位置计算步进值
|
||||
step_real = step * my_power(10, (3 - m5data.io_cursor));
|
||||
//按下up键后,即将刷新的实际值
|
||||
pv = get_output_value();
|
||||
sv = pv + step_real;
|
||||
up = pltdata.yreal_pri_up;
|
||||
// uint8_t step = 1; //up键步长,默认为1
|
||||
// float32 step_real = 0; //实际值步长
|
||||
// float32 pv = 0, sv = 0, up = 0;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
// //根据当前游标位置计算步进值
|
||||
// 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;
|
||||
|
||||
|
@ -747,48 +749,50 @@ void key_functions_main(void)
|
|||
m5data.twk_flag = 1; // 上、下、左、右 任意一个键按下后,闪烁开始
|
||||
m5data.twk_cnt = 0; //每次按下后闪烁计数清零
|
||||
|
||||
uint8_t step = 1; //down键步长,默认为1
|
||||
float32 step_real = 0; //实际值步长
|
||||
float32 pv = 0, sv = 0, low = 0;
|
||||
keyset_output(-1);
|
||||
|
||||
//根据当前游标位置计算步进值
|
||||
step_real = step * my_power(10, (3 - m5data.io_cursor));
|
||||
//按下down键后,即将刷新的实际值
|
||||
pv = get_output_value();
|
||||
sv = pv - step_real;
|
||||
low = pltdata.yreal_pri_low;
|
||||
// uint8_t step = 1; //down键步长,默认为1
|
||||
// float32 step_real = 0; //实际值步长
|
||||
// float32 pv = 0, sv = 0, low = 0;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
// //根据当前游标位置计算步进值
|
||||
// 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;
|
||||
|
||||
|
@ -1035,7 +1039,7 @@ void set_nixie_cube_sign(uint8_t on2off, uint8_t sg)
|
|||
|
||||
}
|
||||
|
||||
//设置数码管显示值:io_slc-输入/输出,pos-第几个数字(99代表全部),num->(可正可负)实际数值*1000
|
||||
//设置数码管显示值:io_slc-输入/输出,pos-第几个数字(99代表全部),num->(可正可负)实际数值
|
||||
void set_nixie_cube(uint8_t io_slc, uint8_t pos, int32_t num)
|
||||
{
|
||||
switch (io_slc)
|
||||
|
@ -1057,7 +1061,9 @@ void set_nixie_cube(uint8_t io_slc, uint8_t pos, int32_t num)
|
|||
set_nixie_cube_sign(IO_INPUT, 0);
|
||||
}
|
||||
|
||||
num = (m5data.sign_flag_in)?(0 - num):(num);
|
||||
//负数转正数
|
||||
num = ( num >= 0 )?(num):(0 - num);
|
||||
|
||||
int32_t temp = 0;
|
||||
//显示当前测量值,从左往右 0->6
|
||||
temp = (num/1000000 > 9)?(0):(num/1000000);
|
||||
|
@ -1208,6 +1214,17 @@ void set_nixie_cube(uint8_t io_slc, uint8_t pos, int32_t num)
|
|||
|
||||
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);
|
||||
|
||||
|
@ -1255,10 +1272,28 @@ void set_nixie_cube(uint8_t io_slc, uint8_t pos, int32_t num)
|
|||
}
|
||||
}
|
||||
|
||||
//设置当前的输出值((可正可负)实际值*1000 -> 数组)
|
||||
void set_output_value(int32_t pvo)
|
||||
//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 );
|
||||
}
|
||||
|
||||
//设置当前的输出值(实际值-> (无符号)数组),可直接输入负数
|
||||
void set_output_array(int32_t pvo)
|
||||
{
|
||||
pvo = (pvo > 0)?(pvo):(0 - pvo);
|
||||
|
||||
//将实际值转换成6个独立数字
|
||||
m5data.o_numbers[0] = (pvo/1000000 > 9)?(9):(pvo/1000000);
|
||||
m5data.o_numbers[1] = (pvo/100000) % 10;
|
||||
|
@ -1269,24 +1304,17 @@ void set_output_value(int32_t pvo)
|
|||
m5data.o_numbers[6] = pvo % 10;
|
||||
}
|
||||
|
||||
//设置输出值:数字显示 + 符号 + 缓存,sto:实际值*1000
|
||||
void set_output(int32_t sto)
|
||||
//设置输出值:数字显示 + 符号 + 缓存,sto:实际值(有符号)
|
||||
void set_output(float32 sto)
|
||||
{
|
||||
//显示
|
||||
//乘以1000用于绕开 int32 和 float32 之间的转换
|
||||
sto *= 1000;
|
||||
|
||||
//设置数码管 数值 显示与 符号 显示
|
||||
set_nixie_cube(IO_OUTPUT, 99, sto);
|
||||
|
||||
//缓存
|
||||
set_output_value(sto);
|
||||
|
||||
//符号
|
||||
if( sto >= 0 )
|
||||
{
|
||||
set_nixie_cube_sign(IO_OUTPUT, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
set_nixie_cube_sign(IO_OUTPUT, 1);
|
||||
}
|
||||
//更新缓存
|
||||
set_output_array(sto);
|
||||
}
|
||||
|
||||
//获取当前设定的输出值
|
||||
|
@ -1302,375 +1330,6 @@ float32 get_output_value(void)
|
|||
return pvo;
|
||||
}
|
||||
|
||||
//改变数码管的显示与缓存值,dir:增加或减少(NIXIE_INCREASE & NIXIE_DECREASE),val:改变量(通常为1)
|
||||
//该函数仅适用于改变前后符号相同的情况
|
||||
void change_nixie_cube_OUT(uint8_t dir, uint8_t val)
|
||||
{
|
||||
switch (dir)
|
||||
{
|
||||
case NIXIE_INCREASE:
|
||||
{
|
||||
switch (m5data.io_cursor)
|
||||
{
|
||||
//达到9之后保持不变,不作循环处理
|
||||
case 0:
|
||||
{
|
||||
m5data.o_numbers[0] = (m5data.o_numbers[0] >= 9)?(9):(m5data.o_numbers[0] + val);
|
||||
|
||||
set_nixie_cube(IO_OUTPUT, 0, m5data.o_numbers[0]);
|
||||
}
|
||||
break;
|
||||
|
||||
//当前面(第0个)数字不全为9时,循环计数,溢出标志置1,否则保持9不变。
|
||||
case 1:
|
||||
{
|
||||
if(m5data.o_numbers[1] >= 9)
|
||||
{
|
||||
if( m5data.o_numbers[0]!=9 )
|
||||
{
|
||||
m5data.o_numbers[1] = 0;
|
||||
m5data.overflow_flag_up = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
m5data.o_numbers[1] = 9;
|
||||
}
|
||||
}else
|
||||
{
|
||||
m5data.o_numbers[1] += val;
|
||||
}
|
||||
|
||||
set_nixie_cube(IO_OUTPUT, 1, m5data.o_numbers[1]);
|
||||
}
|
||||
break;
|
||||
|
||||
//当前面(第0~1个)数字不全为9时,循环计数,溢出标志置1,否则保持9不变。
|
||||
case 2:
|
||||
{
|
||||
if(m5data.o_numbers[2] >= 9)
|
||||
{
|
||||
if( (m5data.o_numbers[0]!=9)||(m5data.o_numbers[1]!=9))
|
||||
{
|
||||
m5data.o_numbers[2] = 0;
|
||||
m5data.overflow_flag_up = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
m5data.o_numbers[2] = 9;
|
||||
}
|
||||
}else
|
||||
{
|
||||
m5data.o_numbers[2] += val;
|
||||
}
|
||||
|
||||
set_nixie_cube(IO_OUTPUT, 2, m5data.o_numbers[2]);
|
||||
}
|
||||
break;
|
||||
|
||||
//当前面(第0~2个)数字不全为9时,循环计数,溢出标志置1,否则保持9不变。
|
||||
case 3:
|
||||
{
|
||||
if(m5data.o_numbers[3] >= 9)
|
||||
{
|
||||
if( (m5data.o_numbers[0]!=9)||(m5data.o_numbers[1]!=9)||(m5data.o_numbers[2]!=9))
|
||||
{
|
||||
m5data.o_numbers[3] = 0;
|
||||
m5data.overflow_flag_up = 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
m5data.o_numbers[3] = 9;
|
||||
}
|
||||
}else
|
||||
{
|
||||
m5data.o_numbers[3] += val;
|
||||
}
|
||||
|
||||
set_nixie_cube(IO_OUTPUT, 3, m5data.o_numbers[3]);
|
||||
}
|
||||
break;
|
||||
|
||||
//当前面(第0~3个)数字不全为9时,循环计数,溢出标志置1,否则保持9不变。
|
||||
case 4:
|
||||
{
|
||||
if(m5data.o_numbers[4] >= 9)
|
||||
{
|
||||
if( (m5data.o_numbers[0]!=9)||(m5data.o_numbers[1]!=9)||(m5data.o_numbers[2]!=9)||(m5data.o_numbers[3]!=9))
|
||||
{
|
||||
m5data.o_numbers[4] = 0;
|
||||
m5data.overflow_flag_up = 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
m5data.o_numbers[4] = 9;
|
||||
}
|
||||
}else
|
||||
{
|
||||
m5data.o_numbers[4] += val;
|
||||
}
|
||||
|
||||
set_nixie_cube(IO_OUTPUT, 4, m5data.o_numbers[4]);
|
||||
}
|
||||
break;
|
||||
|
||||
//当前面(第0~4个)数字不全为9时,循环计数,溢出标志置1,否则保持9不变。
|
||||
case 5:
|
||||
{
|
||||
if(m5data.o_numbers[5] >= 9)
|
||||
{
|
||||
if( (m5data.o_numbers[0]!=9)||(m5data.o_numbers[1]!=9)||(m5data.o_numbers[2]!=9)||(m5data.o_numbers[3]!=9)||(m5data.o_numbers[4]!=9))
|
||||
{
|
||||
m5data.o_numbers[5] = 0;
|
||||
m5data.overflow_flag_up = 5;
|
||||
}
|
||||
else
|
||||
{
|
||||
m5data.o_numbers[5] = 9;
|
||||
}
|
||||
}else
|
||||
{
|
||||
m5data.o_numbers[5] += val;
|
||||
}
|
||||
|
||||
set_nixie_cube(IO_OUTPUT, 5, m5data.o_numbers[5]);
|
||||
}
|
||||
break;
|
||||
|
||||
//当前面(第0~5个)数字不全为9时,循环计数,溢出标志置1,否则保持9不变。
|
||||
case 6:
|
||||
{
|
||||
if(m5data.o_numbers[6] >= 9)
|
||||
{
|
||||
if( (m5data.o_numbers[0]!=9)||(m5data.o_numbers[1]!=9)||(m5data.o_numbers[2]!=9)||(m5data.o_numbers[3]!=9)||(m5data.o_numbers[4]!=9)||(m5data.o_numbers[5]!=9))
|
||||
{
|
||||
m5data.o_numbers[6] = 0;
|
||||
m5data.overflow_flag_up = 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
m5data.o_numbers[6] = 9;
|
||||
}
|
||||
}else
|
||||
{
|
||||
m5data.o_numbers[6] += val;
|
||||
}
|
||||
|
||||
set_nixie_cube(IO_OUTPUT, 6, m5data.o_numbers[6]);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
//发生向上溢出时,根据溢出的位置对实际数值进行处理
|
||||
if(m5data.overflow_flag_up)
|
||||
{
|
||||
int32_t oftemp = 0;
|
||||
//还原成实际数值
|
||||
oftemp = 1000000*m5data.o_numbers[0] + 100000*m5data.o_numbers[1] + 10000*m5data.o_numbers[2] + \
|
||||
1000*m5data.o_numbers[3] + 100*m5data.o_numbers[4] + 10*m5data.o_numbers[5] + m5data.o_numbers[6];
|
||||
|
||||
//根据溢出的位置对实际值进行计算
|
||||
oftemp += my_power(10, ( 7 - m5data.overflow_flag_up) );
|
||||
|
||||
set_nixie_cube(IO_OUTPUT, 99, oftemp);
|
||||
|
||||
set_output_value(oftemp);
|
||||
|
||||
//溢出处理完成,标志清零
|
||||
m5data.overflow_flag_up = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case NIXIE_DECREASE:
|
||||
{
|
||||
switch (m5data.io_cursor)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
if(m5data.o_numbers[0] <= 0)
|
||||
{
|
||||
m5data.o_numbers[0] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
m5data.o_numbers[0] -= val;
|
||||
}
|
||||
|
||||
set_nixie_cube(IO_OUTPUT, 0, m5data.o_numbers[0]);
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
{
|
||||
if(m5data.o_numbers[1] <= 0)
|
||||
{
|
||||
if(m5data.o_numbers[0])
|
||||
{
|
||||
m5data.o_numbers[1] = 9;
|
||||
m5data.overflow_flag_low = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
m5data.o_numbers[1] = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m5data.o_numbers[1] -= val;
|
||||
}
|
||||
|
||||
set_nixie_cube(IO_OUTPUT, 1, m5data.o_numbers[1]);
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
{
|
||||
if(m5data.o_numbers[2] <= 0)
|
||||
{
|
||||
if(m5data.o_numbers[0]||m5data.o_numbers[1])
|
||||
{
|
||||
m5data.o_numbers[2] = 9;
|
||||
m5data.overflow_flag_low = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
m5data.o_numbers[2] = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m5data.o_numbers[2] -= val;
|
||||
}
|
||||
|
||||
set_nixie_cube(IO_OUTPUT, 2, m5data.o_numbers[2]);
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
{
|
||||
if(m5data.o_numbers[3] <= 0)
|
||||
{
|
||||
if(m5data.o_numbers[0]||m5data.o_numbers[1]||m5data.o_numbers[2])
|
||||
{
|
||||
m5data.o_numbers[3] = 9;
|
||||
m5data.overflow_flag_low = 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
m5data.o_numbers[3] = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m5data.o_numbers[3] -= val;
|
||||
}
|
||||
|
||||
set_nixie_cube(IO_OUTPUT, 3, m5data.o_numbers[3]);
|
||||
}
|
||||
break;
|
||||
|
||||
case 4:
|
||||
{
|
||||
if(m5data.o_numbers[4] <= 0)
|
||||
{
|
||||
if(m5data.o_numbers[0]||m5data.o_numbers[1]||m5data.o_numbers[2]||m5data.o_numbers[3])
|
||||
{
|
||||
m5data.o_numbers[4] = 9;
|
||||
m5data.overflow_flag_low = 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
m5data.o_numbers[4] = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m5data.o_numbers[4] -= val;
|
||||
}
|
||||
|
||||
set_nixie_cube(IO_OUTPUT, 4, m5data.o_numbers[4]);
|
||||
}
|
||||
break;
|
||||
|
||||
case 5:
|
||||
{
|
||||
if(m5data.o_numbers[5] <= 0)
|
||||
{
|
||||
if(m5data.o_numbers[0]||m5data.o_numbers[1]||m5data.o_numbers[2]||m5data.o_numbers[3]||m5data.o_numbers[4])
|
||||
{
|
||||
m5data.o_numbers[5] = 9;
|
||||
m5data.overflow_flag_low = 5;
|
||||
}
|
||||
else
|
||||
{
|
||||
m5data.o_numbers[5] = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m5data.o_numbers[5] -= val;
|
||||
}
|
||||
|
||||
set_nixie_cube(IO_OUTPUT, 5, m5data.o_numbers[5]);
|
||||
}
|
||||
break;
|
||||
|
||||
case 6:
|
||||
{
|
||||
if(m5data.o_numbers[6] <= 0)
|
||||
{
|
||||
if(m5data.o_numbers[0]||m5data.o_numbers[1]||m5data.o_numbers[2]||m5data.o_numbers[3]||m5data.o_numbers[4]||m5data.o_numbers[5])
|
||||
{
|
||||
m5data.o_numbers[6] = 9;
|
||||
m5data.overflow_flag_low = 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
m5data.o_numbers[6] = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m5data.o_numbers[6] -= val;
|
||||
}
|
||||
|
||||
set_nixie_cube(IO_OUTPUT, 6, m5data.o_numbers[6]);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
//向下溢出处理
|
||||
if(m5data.overflow_flag_low)
|
||||
{
|
||||
int32_t oftemp = 0;
|
||||
oftemp = 1000000*m5data.o_numbers[0] + 100000*m5data.o_numbers[1] + 10000*m5data.o_numbers[2] + \
|
||||
1000*m5data.o_numbers[3] + 100*m5data.o_numbers[4] + 10*m5data.o_numbers[5] + m5data.o_numbers[6];
|
||||
|
||||
oftemp -= my_power(10, ( 7 - m5data.overflow_flag_low) );
|
||||
|
||||
//更新数码管显示
|
||||
set_nixie_cube(IO_OUTPUT, 99, oftemp);
|
||||
|
||||
//更新数码管数组
|
||||
set_output_value(oftemp);
|
||||
|
||||
//溢出标志清零
|
||||
m5data.overflow_flag_low = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//通道选择与切换
|
||||
void sig_channel_select(uint8_t io, SIG_FUNCTIONS_TYPE type)
|
||||
{
|
||||
|
@ -1714,6 +1373,48 @@ void sig_channel_select(uint8_t io, SIG_FUNCTIONS_TYPE type)
|
|||
}
|
||||
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;
|
||||
|
@ -1765,6 +1466,41 @@ void sig_channel_select(uint8_t io, SIG_FUNCTIONS_TYPE type)
|
|||
}
|
||||
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:
|
||||
{
|
||||
}
|
||||
|
@ -2083,7 +1819,7 @@ void set_working_mode(SIG_FUNCTIONS mode, SIG_FUNCTIONS_TYPE type)
|
|||
set_nixie_cube(IO_INPUT, 99, pltdata.yreal_scd_low*1000);
|
||||
|
||||
//当前输出数值更新为新的上下限
|
||||
set_output(pltdata.yreal_pri_low*1000);
|
||||
set_output(pltdata.yreal_pri_low);
|
||||
|
||||
//通道选择与切换
|
||||
sig_channel_select(m5data.io_mode, type);
|
||||
|
@ -2122,7 +1858,7 @@ void input_value_show(void)
|
|||
}
|
||||
else
|
||||
{
|
||||
pvi = (int32_t)(pltdata.yreal_scd_value * 1000); //副轴用于绘制实时输入测量值
|
||||
pvi = (int32_t)(pltdata.yreal_scd_value*1000); //副轴用于绘制实时输入测量值
|
||||
}
|
||||
|
||||
set_nixie_cube(IO_INPUT, 99, pvi);
|
||||
|
@ -4396,7 +4132,7 @@ float32 my_power(int a, int b)
|
|||
}
|
||||
else
|
||||
{
|
||||
for(uint8_t i = 0; i < b; i++)
|
||||
for(uint8_t i = 0; i < (-b); i++)
|
||||
{
|
||||
result /= (float32)a;
|
||||
}
|
||||
|
|
|
@ -270,6 +270,11 @@
|
|||
<WinNumber>1</WinNumber>
|
||||
<ItemText>RTD,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>23</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>watch_temp</ItemText>
|
||||
</Ww>
|
||||
</WatchWindow1>
|
||||
<MemoryWindow1>
|
||||
<Mm>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue