⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu.c

📁 一个流量控制仪器的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
/************************************************************************************/
/* G7000 V3 设置菜单											*/
/* MCU 型号: Philips P89C668														*/
/* 时钟频率: 11.0592 MHz	6 CLOCK														    */
/* 开发环境: Keil C51 V7.06a															*/
/* 开发日期: 2003.08.23													        	*/
/* 程序编写: BaoFang  鲍方															*/
/* 系统版本: V3.00																	*/
/************************************************************************************/

#include <REG668.H>
#include <Stdio.H>
#include <7279A_P2.H>
//#include <G7000.H>
#include <Display.H>
#include <CAT24WC16P.H>
//#include <BitOp.H>
#include <Timer.H>
#include <Flux_PCA.H>
#include <TurnControl.H>
#include <QuickSet.H>	//已经引用了<G7000.H> <BitOp.H>
#include <CLOCK_DS1307.H>
#include <General.H>


#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

//预定义函数

bit fnCheck_Menu_1();
bit fnCheck_Menu_0();

//PP4、P5设定菜单的初始化检查函数
bit fnCheck_Menu_QuickSet();

void fnRun_Menu();


//菜单数据结构
typedef struct MenuOneStruct
{
	uchar ucMenuNum;		//当前菜单等级序号:1--
	
	bit (*pfnCheck_Menu)();		//检查本菜单项允许否
	
	struct MenuListStruct *pChildMenu;	//子菜单结构指针,当NULL时,为执行菜单项
	
	void (*pfnRun_Menu)();		//执行菜单项的执行函数

        uchar ucMenuIDSize;             //本菜单项的存储大小    0 表示无

        uint ucMenuIDAddress;          //本菜单项的存储地址     0 表示无
        
        uchar ucMenuIDDataMin;          //本菜单项的存储数据最小值

        uchar ucMenuIDDataMax;          //本菜单项的存储数据最大值

        uchar ucMenuIDData0;          //本菜单项的存储数据默认值

} ;


//菜单组项
typedef struct MenuListStruct
{
	uchar ucMenuName[2];           //显示的本菜单符号
	
	uchar ucMenuRank;		//菜单等级:0-主菜单;1-一级;2-二级;

        uchar ucMenuOneMax;             //本菜单菜单项的数目
	
	struct MenuListStruct *pParrentMenu;	//父菜单结构指针,当NULL时,为最高级。

        struct MenuOneStruct *pMenuOneList;	//本菜单结构指针,不允许NULL        
	
} ;

//菜单预定义项
struct MenuListStruct code Menu_NormDisplay;    //一级菜单--正常显示  E
struct MenuListStruct code Menu_AdvanceSet1;    //一级菜单--高级设定  PP
struct MenuListStruct code Menu_NormSet1;       //一级菜单--普通设定  P
struct MenuListStruct code Menu_Record;       	//一级菜单--记录查看  L

struct MenuListStruct code Menu_AdvanceSet1_1;  //二级菜单--PP1
struct MenuListStruct code Menu_AdvanceSet1_2;  //二级菜单--PP2
struct MenuListStruct code Menu_AdvanceSet1_3;  //二级菜单--PP3

struct MenuListStruct code Menu_NormSet1_6;			//二级菜单--P6

struct MenuListStruct code Menu_Record_1;  			//二级菜单--L1
struct MenuListStruct code Menu_Record_2;  			//二级菜单--L2
struct MenuListStruct code Menu_Record_3;  			//二级菜单--L3
struct MenuListStruct code Menu_Record_4;  			//二级菜单--L4

//菜单执行预定义项
void fnDisplay_MenuNormDisplay();       //正常显示函数
void fnDisplay_MenuRecord1Display();		//察看记录L1显示函数
void fnDisplay_MenuRecord2Display();		//察看记录L2显示函数  L2	最近8次再生情况
void fnDisplay_MenuRecord3Display();		//察看记录L3显示函数  流速统计
void fnDisplay_MenuRecord4Display();		//察看记录L4显示函数  L4	最近7天的最大流速/时间

void fnSet_SystemMenuNormByte();	//通用单字节数据输入函数
void fnSet_SystemMenuNormTime();	//通用时间数据输入函数
void fnSet_SystemMenuDateTime();	//系统日期时间数据输入函数
void fnSet_SystemMenuNormUint();	//通用双字节数据输入函数
void fnSet_SystemMenu_PP4();		//PP4	设定函数
void fnSet_SystemMenu_P5();		//P5	设定函数

void fnSet_SystemMenu_PP6();		//PP6控制函数 - 系统记录数据清零

void fnSet_SystemMenuQuickSet();	//快速设定方式函数


void fnSet_SystemMenuTurnCON();		//PP4	一般输出设定函数
void fnSet_SystemMenuTurnTime();	//P5	一般时间设定函数



//主菜单
struct MenuOneStruct code Menu_Main0List[5] = {
        {1,&fnCheck_Menu_1,     &Menu_NormDisplay,	NULL,		0,			0,			0,	0,	0},             												//1-正常显示
        {2,&fnCheck_Menu_1,     &Menu_AdvanceSet1,      NULL,		AdvanceSetLength,	AdvanceSetAddress,	0,	0,	0},             //2-高级设定  按下SYS.键
        {3,&fnCheck_Menu_1,     &Menu_NormSet1,         NULL,		NormSetLength,		NormSetAddress,		0,	0,	0},             //3-普通设定  按下SET.键
        {4,&fnCheck_Menu_1,     &Menu_Record,           NULL,	0,			0,			0,	0,	0},             											//4-察看记录  按下REC.键
        {5,&fnCheck_Menu_0,     NULL,                   &fnRun_Menu,	0,			0,			0,	0,	0}              						//5-察看报警  按下ALARM.键   
};
   
struct MenuListStruct code Menu_Main0 = {

        {0x0f,0x0f},0,5,NULL,Menu_Main0List };


//一级菜单--正常显示  E
struct MenuOneStruct code Menu_NormDisplayList[11] = {
        {1,&fnCheck_Menu_1,	NULL,	&fnDisplay_MenuNormDisplay,	0,	0,	0,	0,	0},                 //E1  罐的剩余水量
        {2,&fnCheck_Menu_1,	NULL,	&fnDisplay_MenuNormDisplay,	0,	0,	0,	0,	0},                 //E2  罐体的设定水量
        {3,&fnCheck_Menu_1,	NULL,	&fnDisplay_MenuNormDisplay,	0,	0,	0,	0,	0},                 //E3  罐体的流速
        {4,&fnCheck_Menu_1,	NULL,	&fnDisplay_MenuNormDisplay,	0,	0,	0,	0,	0},                 //E4  运行状态
        {5,&fnCheck_Menu_1,	NULL,	&fnDisplay_MenuNormDisplay,	0,	0,	0,	0,	0},                 //E5  总还原次数
        {6,&fnCheck_Menu_1,	NULL,	&fnDisplay_MenuNormDisplay,	0,	0,	0,	0,	0},                 //E6  报警状态CL(ALARM x)
        {7,&fnCheck_Menu_1,	NULL,	&fnDisplay_MenuNormDisplay,	0,	0,	0,	0,	0},                 //E7  暂停状态CL(PAUSEx)
        {8,&fnCheck_Menu_1,	NULL,	&fnDisplay_MenuNormDisplay,	0,	0,	0,	0,	0},                 //E8  触发变量CL(COUSEx)、CL(DISCOUSEx)
        {9,&fnCheck_Menu_1,	NULL,	&fnDisplay_MenuNormDisplay,	0,	0,	0,	0,	0},                 //E9  日期
        {10,&fnCheck_Menu_1,	NULL,	&fnDisplay_MenuNormDisplay,	0,	0,	0,	0,	0},                 //E10  时间
        {11,&fnCheck_Menu_1,	NULL,	&fnDisplay_MenuNormDisplay,	0,	0,	0,	0,	0}                  //E11  流量计脉冲计数器数  ulFluxPulse
};

struct MenuListStruct code Menu_NormDisplay = {

        {0x0F,0x0B},1,11,&Menu_Main0,Menu_NormDisplayList};      //E 正常显示



//一级菜单--高级设定 PP
struct MenuOneStruct code Menu_AdvanceSet1List[9] = {
        {1,&fnCheck_Menu_1,	&Menu_AdvanceSet1_1,	NULL,				0,	0,	0,	0,	0},                 //PP1  工作方式\系统设定
        {2,&fnCheck_Menu_1,	&Menu_AdvanceSet1_2,	NULL,				0,	0,	0,	0,	0},                 //PP2
        {3,&fnCheck_Menu_1,	&Menu_AdvanceSet1_3,	NULL,				0,	0,	0,	0,	0},                 //PP3
        {4,&fnCheck_Menu_QuickSet,	NULL,		&fnSet_SystemMenu_PP4,		0,	0,	0,	0,	0},                 //PP4  输出设定函数
        {5,&fnCheck_Menu_0,	NULL,			&fnRun_Menu,			0,	0,	0,	0,	0},                 //PP5
        {6,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenu_PP6,			0,	0,	0,	0,	0},                 //PP6	系统记录数据清零
        {7,&fnCheck_Menu_0,	NULL,			&fnRun_Menu,			0,	0,	0,	0,	0},                 //PP7
        {8,&fnCheck_Menu_0,	NULL,			&fnRun_Menu,			0,	0,	0,	0,	0},                 //PP8
        {9,&fnCheck_Menu_0,	NULL,			&fnRun_Menu,			0,	0,	0,	0,	0}                  //PPE
};

struct MenuListStruct code Menu_AdvanceSet1 = {

        {0x0e,0x0e},1,9,&Menu_Main0,Menu_AdvanceSet1List};      //PP


//二级菜单--PP1  工作方式\系统设定

struct MenuOneStruct code Menu_AdvanceSet1_1_List[12] = {
        { 1,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	50,	0,	5,	0},                 //PP1-1  系统设置
        { 2,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	51,	0,	1,	1},                 //PP1-2  工作段时间是否引发再生
        { 3,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	52,	0,	1,	0},                 //PP1-3  流量是否引发再生
        { 4,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	53,	0,	1,	0},                 //PP1-4  是否采用掉电记忆功能
        { 5,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	54,	0,	253,	0},                 //PP1-5  控制器网络地址
        { 6,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	55,	1,	4,	1},                 //PP1-6  系统工作情况
        { 7,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	56,	1,	9,	1},                 //PP1-7  允许进入还原和备用数目
        { 8,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	57,	0,	1,	0},                 //PP1-8  是否开启多次还原后增强
        { 9,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	58,	2,	9,	2},                 //PP1-9  开启多次还原后增强后的数字
        {10,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	59,	0,	1,	0},                 //PP1-10 是否开启备用后时间
        {11,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	60,	0,	1,	0},                 //PP1-11 是否安装感应卡
        {12,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	61,	0,	1,	0}                  //PP1-12 是否采用报警与暂停功能
};

struct MenuListStruct code Menu_AdvanceSet1_1 = {

        {0x0e,0x0e},2,12,&Menu_AdvanceSet1,Menu_AdvanceSet1_1_List};


//二级菜单--PP2  流量型产品数据设定

struct MenuOneStruct code Menu_AdvanceSet1_2_List[4] = {
        {1,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormUint,	2,	62,	1,	60,	100},               //PP2-1  流量计倍率
        {2,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormUint,	2,	64,	1,	60,	5},                 //PP2-2  统计流量计瞬时流量的平均值所用时间
        {3,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	66,	1,	50,	5},                 //PP2-3  负流量的比例
        {4,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	67,	0,	1,	0}                  //PP2-4  是否显示流速
};

struct MenuListStruct code Menu_AdvanceSet1_2 = {

        {0x0e,0x0e},2,4,&Menu_AdvanceSet1,Menu_AdvanceSet1_2_List};


//二级菜单--PP3  对于外部开关输入的检测设定

struct MenuOneStruct code Menu_AdvanceSet1_3_List[7] = {
        {1,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	68,	0,	1,	1},                 //PP3-1  是否检测T1远程启动开关
        {2,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	69,	0,	1,	0},                 //PP3-2  是否检测T2反馈开关
        {3,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	70,	0,	1,	0},                 //PP3-3  是否安装T3盐液开关
        {4,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	71,	0,	1,	0},                 //PP3-4  是否在还原检测T4压力开关
        {5,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	72,	0,	1,	0},                 //PP3-5  盐液开关种类1  0低位,1高位
        {6,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	73,	0,	1,	0},                 //PP3-6  盐液开关种类2  0常开,1常闭
        {7,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	74,	3,	40,	15}                 //PP3-7  对于多路阀型软化水状态,[01]开始后多长时间检测反馈开关,回到[19]或[39]后的状态。
};

struct MenuListStruct code Menu_AdvanceSet1_3 = {

        {0x0e,0x0e},2,7,&Menu_AdvanceSet1,Menu_AdvanceSet1_3_List};


//一级菜单--普通设定 P
struct MenuOneStruct code Menu_NormSet1List[7] = {
        {1,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuDateTime,	0,	1,	4,	1,	1},                 //P1  设置系统日期
        {2,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuDateTime,	0,	2,	0,	0,	0},                 //P2  设置系统时间
        {3,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormTime,	4,	150,	2,	0,	0},                 //P3  单罐延时还原型的再生时间
        {4,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormUint,	2,	154,	0,	60,	100},               //P4  周期产水量
        {5,&fnCheck_Menu_QuickSet,	NULL,		&fnSet_SystemMenu_P5,		0,	0,	0,	0,	0},                 //P5  时间设定函数
        {6,&fnCheck_Menu_1,	&Menu_NormSet1_6,	NULL,				0,	0,	0,	0,	0},                 //P6  报警与暂停设置
        {7,&fnCheck_Menu_0,	NULL,			&fnRun_Menu,			0,	0,	0,	0,	0},                 //P7
};

struct MenuListStruct code Menu_NormSet1 = {

        {0x0f,0x0e},1,7,&Menu_Main0,Menu_NormSet1List};      //P


//二级菜单--P6  报警与暂停设置

struct MenuOneStruct code Menu_NormSet1_6_List[16] = {
        { 1,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	156,	0,	1,	1},                 //P6- 1  外置开关的报警
        { 2,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	157,	0,	1,	0},                 //P6- 2  反馈开关的报警
        { 3,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	158,	0,	1,	0},                 //P6- 3  盐量报警
        { 4,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	159,	0,	1,	0},                 //P6- 4  外部压力开关的报警
        { 5,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	160,	0,	1,	0},                 //P6- 5  是否由盐量终止再生某一步骤
        { 6,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	161,	1,	19,	1},                 //P6- 6  上述成立,终止哪个步骤
        { 7,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	162,	0,	2,	0},                 //P6- 7  是否由盐量引起暂停[73]
        { 8,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormTime,	4,	676,	0,	0,	0},                 //P6- 8  [73]盐量暂停时间
        { 9,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	167,	0,	2,	0},                 //P6- 9  是否由压力引起暂停过程[74]
        {10,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormTime,	4,	680,	0,	0,	0},                 //P6-10  [74]压力暂停时间
        {11,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	172,	0,	1,	0},                 //P6-11  负流量到达设定后是否报警
        {12,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	173,	0,	1,	0},                 //P6-12  负流量到达设定后是否转入强制再生
        {13,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	174,	0,	3,	0},                 //P6-13  是否由负流量引起暂停[75]
        {14,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormTime,	4,	684,	0,	0,	0},                 //P6-14  [75]负流量暂停时间
        {15,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	179,	0,	1,	0},                 //P6-15  工作时是否可以暂停[76]
        {16,&fnCheck_Menu_1,	NULL,			&fnSet_SystemMenuNormByte,	1,	180,	0,	1,	0}                  //P6-16  还原时是否可以暂停[77]
};

struct MenuListStruct code Menu_NormSet1_6 = {

        {0x0f,0x0e},2,16,&Menu_NormSet1,Menu_NormSet1_6_List};
        
//一级菜单--4-察看记录  按下REC.键
struct MenuOneStruct code Menu_RecordList[4] = {
        {1,&fnCheck_Menu_1,	&Menu_Record_1,	NULL,	0,	0,	0,	0,	0},     	            		//L1  自上次再生清0后再生次数统计
        {2,&fnCheck_Menu_1,	&Menu_Record_2,	NULL,	0,	0,	0,	0,	0},                 			//L2 	最近8次再生情况        {3,&fnCheck_Menu_1,	&Menu_Record_3,	NULL,	0,	0,	0,	0,	0},                 			//L3 	流速统计        {4,&fnCheck_Menu_0,	&Menu_Record_4,	NULL,	0,	0,	0,	0,	0}                 				//L4	最近7天的最大流速/时间};

struct MenuListStruct code Menu_Record = {

        {0x0f,0x0d},1,4,&Menu_Main0,Menu_RecordList};      //L

//二级菜单--L1  自上次再生清0后再生次数统计

struct MenuOneStruct code Menu_Record_1_List[5] = {
        { 1,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord1Display,	0,	0,	0,	0,	0},                 //L1-1  总的再生次数
        { 2,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord1Display,	0,	0,	0,	0,	0},                 //L1-2  由定时引起的还原次数
        { 3,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord1Display,	0,	0,	0,	0,	0},                 //L1-3  由定量引起的还原次数(负流量计次归入流量)
        { 4,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord1Display,	0,	0,	0,	0,	0},                 //L1-4  由手动引发的次数
        { 5,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord1Display,	0,	0,	0,	0,	0}                 	//L1-5  由外部开关引发的次数
};

struct MenuListStruct code Menu_Record_1 = {

        {0x0F,0x0d},2,5,&Menu_Record,Menu_Record_1_List};
        

//二级菜单--L2  最近8次再生情况

struct MenuOneStruct code Menu_Record_2_List[8] = {
        { 1,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord2Display,	0,	0,	0,	0,	0},                 //L2-1  
        { 2,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord2Display,	0,	0,	0,	0,	0},                 //L2-2  
        { 3,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord2Display,	0,	0,	0,	0,	0},                 //L2-3  
        { 4,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord2Display,	0,	0,	0,	0,	0},                 //L2-4  
        { 5,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord2Display,	0,	0,	0,	0,	0},                	//L2-5  
        { 6,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord2Display,	0,	0,	0,	0,	0},                 //L2-6  
        { 7,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord2Display,	0,	0,	0,	0,	0},                 //L2-7  
        { 8,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord2Display,	0,	0,	0,	0,	0}                 	//L2-8  
};

struct MenuListStruct code Menu_Record_2 = {

        {0x0F,0x0d},2,8,&Menu_Record,Menu_Record_2_List};
                
//二级菜单--L3  流速统计

struct MenuOneStruct code Menu_Record_3_List[2] = {
        { 1,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord3Display,	0,	0,	0,	0,	0},                 //L3-1  历史最大流速
        { 2,&fnCheck_Menu_0,	NULL,			&fnDisplay_MenuRecord3Display,	0,	0,	0,	0,	0}                  //L3-2  当天最大流速
};

struct MenuListStruct code Menu_Record_3 = {

        {0x0F,0x0d},2,2,&Menu_Record,Menu_Record_3_List};


//二级菜单--L4	最近7天的最大流速/时间

struct MenuOneStruct code Menu_Record_4_List[7] = {
        { 1,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord4Display,	0,	0,	0,	0,	0},                 //L4-1  
        { 2,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord4Display,	0,	0,	0,	0,	0},                 //L4-2  
        { 3,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord4Display,	0,	0,	0,	0,	0},                 //L4-3  
        { 4,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord4Display,	0,	0,	0,	0,	0},                 //L4-4  
        { 5,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord4Display,	0,	0,	0,	0,	0},                	//L4-5  
        { 6,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord4Display,	0,	0,	0,	0,	0},                 //L4-6  
        { 7,&fnCheck_Menu_1,	NULL,			&fnDisplay_MenuRecord4Display,	0,	0,	0,	0,	0}                 //L4-7  
};

struct MenuListStruct code Menu_Record_4 = {

        {0x0F,0x0d},2,7,&Menu_Record,Menu_Record_4_List};
        

//系统当前菜单指针
struct MenuListStruct code *pSystemMenu;

//系统当前菜单项
xdata uchar ucSystemMenuID;

//系统上一级菜单项
xdata uchar ucSystemMenuID_up;

//系统当前菜单状态
xdata uchar ucSystemMenuState;

//设定时间段变量  时段列表TurnList的索引值 0-49
xdata uchar ucSystemMenuTurnNum;


//设定暂存(输出、时间 公用)
xdata uchar uc8_SystemMenuTurnTemp[8];

xdata uchar ucSystemMenuTurnTemp0;	//设定子菜单层次变量0	一般在Check中设置

xdata uchar ucSystemMenuTurnTemp1;    //设定子菜单层次变量1  在进入子菜单前设置,设为0
xdata uchar ucSystemMenuTurnTemp2;    //设定子菜单层次变量2  
xdata uchar ucSystemMenuTurnTemp3;    //设定子菜单层次变量3 
xdata ulong ucSystemMunuTurnTempUL;		//设定子菜单层次变量UL

//uchar uc3_TimeTemp1[5]; 	//时间设置变量
xdata uchar uc3_TimeTemp1[2]; 	//时间设置变量

xdata uint	ui_UINTTemp1;		//双字节设置变量


/********************************************************************************************


                                          快速设置

/********************************************************************************************/


//函数预定义
void fnSet_QuickSetNormByte();		//快速设置单字节数据输入函数
void fnSet_QuickSetNormTime();		//快速设置时间数据输入函数
		
void fnSave_QuickSetData();		//快速设置存储函数

//数据结构
typedef struct QuickSetDataSetStruct
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -