📄 menu.c
字号:
#include <c8051f350.h>
#include "menu.h"
#include "variable.h"
#include "I2C.h"
#include "adc.h"
#include "math.h"
bit bdata set_flag;
bit bdata dis_flag;
bit bdata zero_flag;
bit bdata dem_flag;
bit bdata pin_flag;
bit bdata menu_flag;
bit bdata t_flag;
unsigned int code default_ref_table[16]=//为了节省代码空间,ref_table_temp[40]为40个参数,省掉的24个
//参数是标定用的,不用初始化
{
(Itm_k-Itm_s) //分度号default_ref_sn 默认开始是k。 加9则是pt100
, 1 //参数设置位default_ref_bits 判断是否同步显示
, 0 //标称/变送的低端default_ref_sc0
, 1000 //标称/变送的高端default_ref_scf
, 416 //变送的下限default_ref_da0
, 2945 //变送的上限default_ref_daf
, 0 //断线或溢出时的输出设定default_ref_dab
, 0xf1 //当前温度对应的AD值default_ref_trv
, 0 //输出修正0default_ref_d0
, 0 //输出修正fdefault_ref_df
, 0 //显示修正0default_ref_du0
, 0 //显示修正fdefault_ref_duf
, 0 //过滤类型default_ref_filt
, 8 //过滤参数1default_ref_filr
, 29 //当前温度default_ref_tr
, 0
};
unsigned char code num_code[16]= //十进制和十六进制的数字表示表
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,chr_a,chr_b,chr_c,chr_d,chr_e,chr_f};
unsigned char code Tab_Menu_Item[54][4] =
{ chr_sp,chr_sp, chr_sp,chr_sp //0 null
,chr_p, chr_n, chr_b, chr_o //1 pnbo
,chr_sp,chr_sp, chr_s, chr_n //2 sn
,chr_sp,chr_sp, chr_p, chr_d //3 pd
,chr_sp,chr_s, (chr_c&chr_dot), num_0 //4 sc.0
,chr_sp,chr_s, (chr_c&chr_dot), chr_f //5 sc.f
,chr_sp,chr_sp, chr_t, chr_r //6 tr
,chr_sp,chr_d, (chr_a&chr_dot), num_0 //7 da.0
,chr_sp,chr_sp, (chr_d&chr_dot), num_0 //8 d0
,chr_sp,chr_sp, (chr_d&chr_dot), chr_f //9 df
,chr_sp,chr_d, (chr_u&chr_dot), num_0 //10 du0
,chr_sp,chr_d, (chr_u&chr_dot), chr_f //11 duf
,chr_f, chr_i, (chr_l&chr_dot), chr_t //12 fil.t
,chr_f, chr_i, (chr_l&chr_dot), chr_r //13 fil.r
,chr_sp,chr_t, chr_r, chr_s //14 trs
,chr_sp,chr_r, (chr_t&chr_dot), num_1 //15 r.1
,chr_sp,chr_r, (chr_t&chr_dot), num_2 //16 r.2
,chr_sp,chr_r, (chr_t&chr_dot), num_3 //17 r.3
,chr_sp,chr_r, (chr_t&chr_dot), num_4 //18 r.4
,chr_sp,chr_r, (chr_t&chr_dot), num_5 //19 r.5
,chr_sp,chr_t, (chr_c&chr_dot), num_0 //20 tc.0
,chr_sp,chr_t, (chr_c&chr_dot), chr_f //21 tc.f
,chr_sp,chr_d, (chr_a&chr_dot), chr_f //22 da.F
,chr_sp,chr_d, (chr_a&chr_dot), chr_b //23 da.b
,chr_sp,chr_sp, chr_o, chr_t //24 ot
,chr_g, chr_b, chr_a, chr_k //25 rev
,chr_sp,chr_b, chr_a, chr_k //26 bak
,num_1, chr_dot,chr_sp, chr_sp //overflow
,chr_b, chr_r, chr_o, chr_k //brok
,chr_sp, chr_o, chr_f, chr_f //off
,chr_sp, chr_sp, chr_o, chr_n //on
,chr_sp, chr_sp, chr_n, chr_o //no
,chr_sp, chr_y, chr_e, chr_s //yes
,chr_sp, chr_sp, chr_sp, chr_s //sn:s tc
,chr_sp, chr_sp, chr_sp, chr_r //sn:r tc
,chr_sp, chr_sp, chr_sp, chr_b //sn:b tc
,chr_sp, chr_sp, chr_sp, chr_k //sn:k tc
,chr_sp, chr_sp, chr_sp, chr_e //sn:e tc
,chr_sp, chr_sp, chr_sp, chr_j //sn:j tc
,chr_sp, chr_sp, chr_sp, chr_n //sn:n tc
,chr_sp, chr_sp, chr_sp, chr_t //sn:t tc
,chr_sp, chr_t, chr_u, num_3 //sn:tu3 tc
,chr_sp, chr_t, chr_u, num_5 //sn:tu5 tc
,chr_t, chr_u, num_2, num_0 //sn:tu20 tc
,chr_t, chr_u, num_2, num_6 //sn:tu26 tc
,chr_p, num_1, num_0, num_0 //sn:pt100 rt
,chr_c, chr_u, num_1, num_0 //sn:cu100 rt
,chr_c, chr_u, num_5, num_0 //sn:cu50 rt
,chr_sp, chr_t, chr_p&chr_dot, num_1 //tp1
,chr_sp, chr_t, chr_p&chr_dot, num_2 //tp2
,chr_sp, chr_t, chr_p&chr_dot, num_3 //tp3
,chr_a, chr_r, chr_e, chr_a
,chr_d, chr_a, chr_t, chr_e
,chr_n, chr_u, chr_b, chr_r
};
unsigned int code Tab_mnu_ent_value[8]= //菜单入口值
{
mnu_value_sn
,mnu_value_sc0
,mnu_value_d0
,mnu_value_ot
,mnu_value_pd
,mnu_value_da0
,mnu_value_rt1
};
unsigned char code Tab_mnu_ent_menu[8]= //菜单索引号
{
mnu_sn
,mnu_sc0
,mnu_d0
,mnu_ot
,mnu_pd
,mnu_da0
,mnu_rt1
};
/********************************************
函数名: menu_hdl
功能: 菜单处理
形式参数:无
返回值:无
********************************************/
void menu_hdl(void)
{
if(keyval)
{
switch(page_point)
{
case 0: mnu_hdl_null( );break; //0
case 1: mnu_hdl_main( );break; //1
case 2: mnu_hdl_sn ( );break; //2
//case 3: mnu_hdl_dsp ( );break; //3
case 4: mnu_hdl_sc0 ( );break; //4
case 5: mnu_hdl_scf ( );break; //5
case 6: mnu_hdl_tr ( );break; //6
//case 7: mnu_hdl_da0 ( );break; //7
case 8: mnu_hdl_d0 ( );break; //8
case 9: mnu_hdl_df ( );break; //9
case 10: mnu_hdl_du0 ( );break; //10
case 11: mnu_hdl_duf ( );break; //11
//case 12: mnu_hdl_filt( );break; //12
//case 13: mnu_hdl_filr( );break; //13
//case 14: mnu_hdl_trs ( );break; //14
case 15: mnu_hdl_rtx ( );break; //15
case 16: mnu_hdl_rtx ( );break; //16
case 17: mnu_hdl_rtx ( );break; //17
case 18: mnu_hdl_rtx ( );break; //18
case 19: mnu_hdl_rtx ( );break; //19
case 20: mnu_hdl_tc0 ( );break; //20
case 21: mnu_hdl_tc0 ( );break; //21
/*case 22: mnu_hdl_da0 ( );break; //22
//case 23: mnu_hdl_dab ( );break; //23*/
case 24: mnu_hdl_ot ( );break; //24
}
}
}
/********************************************
函数名: mnu_hdl_null
功能: 空菜单操作
形式参数:无
返回值:无
********************************************/
void mnu_hdl_null(void)
{
switch(keyval)
{
case key_up|key_ent:
menu_flag=1;
page_point=1;
set_flag=1;
renew_page_high(mnu_main);
renew_page_low(mnu_null);
}
}
/********************************************
函数名: mnu_hdl_main
功能: 主菜单操作
形式参数:无
返回值:无
********************************************/
void mnu_hdl_main(void)
{
switch(keyval)
{
case key_up:
if(!set_flag)
{
mod_value=mod_value+key_mov;
if(mod_value>9999)mod_value=9999;
point_pos=0;//小数点位置
dis_flag=1; //高低4位标置 1-高4位 0-低4位
display_num(mod_value);//数字显示
}
break;
case key_down:
if(!set_flag)
{
mod_value=mod_value-key_mov;
if(mod_value<-1999)mod_value=-1999;
point_pos=0;//小数点位置
dis_flag=1;//高低4位标置
display_num(mod_value);//数字显示
}
break;
case key_ent:
if(set_flag)
{
set_flag=0;
mod_value=mnu_value_null; //mnu_value_null=2004
mod_bak=mnu_value_null; //备份菜单号(即2004)
point_pos=0;
dis_flag=1;//高低4位标置
display_num(mod_value);//数字显示
}
else
{
select_page(mod_value);//选择界面
}
break;
case key_set:
menu_flag=0;
page_point=0;
renew_page_high(mnu_null);
renew_page_low(mnu_null);
break;
}
}
//选择界面
void select_page(int cod)
{
switch(cod)
{
//case mnu_value_null:
// menu_flag=0;
// page_point=0;
// renew_page_high(mnu_null);
// renew_page_low(mnu_null);
// break;
case mnu_value_sn:
page_point=2;
mod_bak=mnu_value_sn;//备份菜单入口数据
renew_page_high(Tab_mnu_ent_menu[0]);
mod_value=ref_table[ref_sn];//应读取分度号值
renew_page_low(mod_value+Itm_s);
break;
case mnu_value_sc0:
page_point=4;
mod_bak=mnu_value_sc0;
renew_page_high(Tab_mnu_ent_menu[1]);
mod_value=ref_table[ref_sc0];
//set_flag=0;
dis_flag=0;
get_pos();
display_num(ref_table[ref_sc0]);
break;
case mnu_value_da0:
//page_point=7;
break;
case mnu_value_d0:
page_point=8;
mod_bak=mnu_value_d0;
renew_page_high(Tab_mnu_ent_menu[2]);
mod_value=ref_table[ref_d0];
dis_flag=0;
get_pos();
display_num(ref_table[ref_d0]);
break;
case mnu_value_filt:
//page_point=12;
break;
case mnu_value_rt1:
page_point=15;
dem_flag=1;
set_flag=1;
point_pos_1=1;
volt_range1=1; //为mnu_hdl_rtx 初始化
sub_function2();
ref_buffer=ref_rt1; //为mnu_hdl_rtx 初始化
counter=1; //为mnu_hdl_rtx 初始化
renew_page_high(mnu_rt1);
mod_bak=mnu_value_rt1;
mod_value=ref_table[ref_rt1];
pin_flag=1;
break;
case mnu_value_tc0:
page_point=20;
dem_flag=1;
set_flag=1;
point_pos_1=1;
volt_range1=1;
sub_function2();
ref_buffer=ref_tc0;
counter=1;
renew_page_high(mnu_tc0);
mod_bak=mnu_value_tc0;
mod_value=ref_table[ref_tc0];
pin_flag=0;
break;
case mnu_value_pd:
break;
case mnu_value_ot:
page_point=24;
mod_bak=mnu_value_ot;
renew_page_high(Tab_mnu_ent_menu[3]);
mod_value=0;
dis_flag=0;
point_pos=2;
display_num(0);
break;
}
}
/********************************************
函数名: mnu_hdl_sn
功能: 分度表菜单操作
形式参数:无
返回值:无
********************************************/
void mnu_hdl_sn(void)
{
switch(keyval)
{
case key_up:
mod_value++;
if(mod_value>14)
mod_value=0;
renew_page_low(mod_value+Itm_s);
break;
case key_down:
mod_value--;
if(mod_value<0)
mod_value=14;
renew_page_low(mod_value+Itm_s);
break;
case key_set:
ref_table[ref_sn]=mod_value;
store_ref(ref_sn);//保存参数值
mnu_return();//返回上级菜单
break;
//case key_ent:
//;
}
}
/********************************************
函数名: mnu_hdl_sc0
功能: 量程零点设置
形式参数:无
返回值:无
********************************************/
void mnu_hdl_sc0(void)
{
switch(keyval)
{
case key_up:
mod_value=mod_value+key_mov;
if(mod_value>9999)mod_value=9999;
get_pos();//小数点位置
dis_flag=0; //高低4位标置 1-高4位 0-低4位
display_num(mod_value);//数字显示
break;
case key_down:
mod_value=mod_value-key_mov;
if(mod_value<-1999)mod_value=-1999;
get_pos();//小数点位置
dis_flag=0;//高低4位标置
display_num(mod_value);//数字显示
break;
case key_set:
ref_table[ref_sc0]=mod_value;
store_ref(ref_sc0);//保存参数值
page_point=5;//进入满量程菜单
renew_page_high(mnu_scf);
mod_value=ref_table[ref_scf];
//set_flag=0;
dis_flag=0;
display_num(ref_table[ref_scf]);
break;
//case key_ent:
}
}
/********************************************
函数名: mnu_hdl_scf
功能: 量程满程设置
形式参数:无
返回值:无
********************************************/
void mnu_hdl_scf(void)
{
switch(keyval)
{
case key_up:
mod_value=mod_value+key_mov;
if(mod_value>9999)mod_value=9999;
get_pos();//小数点位置
dis_flag=0; //高低4位标置 1-高4位 0-低4位
display_num(mod_value);//数字显示
break;
case key_down:
mod_value=mod_value-key_mov;
if(mod_value<-1999)mod_value=-1999;
get_pos();//小数点位置
dis_flag=0;//高低4位标置
display_num(mod_value);//数字显示
break;
case key_set:
ref_table[ref_scf]=mod_value;
store_ref(ref_scf);//保存参数值
page_point=6;//进入当前温度菜单
renew_page_high(mnu_tr);
mod_value=ref_table[ref_tr];
//set_flag=0;
dis_flag=0;
display_num(ref_table[ref_tr]);
break;
//case key_ent:
}
}
/********************************************
函数名: mnu_hdl_tr
功能: 当前温度设置
形式参数:无
返回值:无
********************************************/
void mnu_hdl_tr(void)
{
switch(keyval)
{
case key_up:
mod_value=mod_value+key_mov;
if(mod_value>50)mod_value=50;
get_pos();//小数点位置
dis_flag=0; //高低4位标置 1-高4位 0-低4位
display_num(mod_value);//数字显示
break;
case key_down:
mod_value=mod_value-key_mov;
if(mod_value<0)mod_value=0;
get_pos();//小数点位置
dis_flag=0;//高低4位标置
display_num(mod_value);//数字显示
break;
case key_set:
ref_table[ref_tr]=mod_value;
store_ref(ref_tr);//保存参数值
////////??? //当前温度AD值
//store_ref(14);//保存参数值
mnu_return();//返回主菜单
break;
//case key_ent:
}
}
/********************************************
函数名: mnu_hdl_d0
功能: 修订输出零点
形式参数:无
返回值:无
********************************************/
void mnu_hdl_d0(void)
{
switch(keyval)
{
case key_up:
mod_value=mod_value+key_mov;
if(mod_value>9999)mod_value=9999;
get_pos();//小数点位置
dis_flag=0; //高低4位标置 1-高4位 0-低4位
display_num(mod_value);//数字显示
break;
case key_down:
mod_value=mod_value-key_mov;
if(mod_value<-1999)mod_value=-1999;
get_pos();//小数点位置
dis_flag=0;//高低4位标置
display_num(mod_value);//数字显示
break;
case key_set:
ref_table[ref_d0]=mod_value;
store_ref(ref_d0);//保存参数值
page_point=9;
renew_page_high(mnu_df);
mod_value=ref_table[ref_df];
//set_flag=0;
dis_flag=0;
display_num(ref_table[ref_df]);
break;
//case key_ent:
}
}
/********************************************
函数名: mnu_hdl_df
功能: 修订输出满点
形式参数:无
返回值:无
********************************************/
void mnu_hdl_df(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -