标题:
傻孩子的单片机C语言LCD菜单引擎源码与详细教程
[打印本页]
作者:
51hei天地
时间:
2018-3-22 00:36
标题:
傻孩子的单片机C语言LCD菜单引擎源码与详细教程
自己用到的点阵液晶资料的一些分享:
菜单界面的实现方法
建议在看下面内容之前复习一下C语言的如下内容
1、结构体
2、指向函数的指针
3、结构体链表
4、傻孩子的菜单引擎
当前层节点数,即每层菜单最多能显示的条目数.
目的:
1、在菜单读取前先读取这个菜单总共拥有的项目数,防止越界。
在菜单读取过程中将会有一个计数变量存储菜单移动。所以需要这个变量来确定移动的上界;
2、可以方便的实现菜单的滚动。例如:“文件”菜单依次下有:
“打开”、“保存”、“打印”、“退出”这4个子项,如果计数存储达到上界“退出” 即(MenuCount == 4)时再继续向下一级翻页则会回到“打开”。
指向菜单标题字符串的指针
目的:
指向菜单标题的字符串,指向当选中该级菜单后所要显
示的字符串。
指向当前状态应该执行功能函数的指针
目的:
说明如果选中该级菜单应当执行什么程序,这个指针指向该项所要实现功能的函数。例如:菜单项为“播放”,则该函数指向Play();
指向当前菜单的下级菜单
目的:
指向结构体指针,用于存储下一级菜单,在后面的链表中详细
说明。
所有资料51hei提供下载(pdf+源码):
http://www.51hei.com/bbs/dpj-109977-1.html
单片机源程序如下:
#include <stdio.h>
#include "drv_lcd.h"
#include "menu.h"
MENU MainMenu[3] =
{
{0,"AUTO",MENU_AUTO,&MainMenu[0],&AUTOMenu[0],&MainMenu[2],&MainMenu[1]}, //主菜单AUTOMenu[0]
{1,"SETUP",MENU_SETUP,&MainMenu[0],&SETUPKey[0],&MainMenu[0],&MainMenu[2]}, //主菜单
{2,"HAND",MENU_HAND,&MainMenu[0],&Manualcontrol[0],&MainMenu[1],&MainMenu[0]}, //主菜单
};
MENU AUTOMenu[6] = //??????
{
{0,"NULL",MENU_AUTOMenu1,&MainMenu[0],NULL,&AUTOMenu[5],&AUTOMenu[1]},
{1,"NULL",MENU_AUTOMenu2,&MainMenu[0],NULL,&AUTOMenu[0],&AUTOMenu[2]},
{2,"NULL",MENU_AUTOMenu3,&MainMenu[0],NULL,&AUTOMenu[1],&AUTOMenu[3]},
{3,"NULL",MENU_AUTOMenu4,&MainMenu[0],NULL,&AUTOMenu[2],&AUTOMenu[4]},
{4,"NULL",MENU_AUTOMenu5,&MainMenu[0],NULL,&AUTOMenu[3],&AUTOMenu[5]},
{5,"NULL",MENU_AUTOMenu6,&MainMenu[0],NULL,&AUTOMenu[4],&AUTOMenu[0]}
};
MENU SELFCONTROL =
{
0,"MIMA",Autonetworking,NULL,NULL,NULL,NULL, //密码界面
};
MENU ZuWang_Succ = {0,"succ",MENU_Succ,&ZuWang_Succ,&ZuWang_Succ,&ZuWang_Succ,&ZuWang_Succ};//jjk 4.29
MENU Sure_Noyes[2] =
{
{0,"no",MENU_NO,&SETUPKey[2],&SETUPKey[2],&Sure_Noyes[1],&Sure_Noyes[1]},
{111,"yes",MENU_YES,&SETUPKey[2],&SELFCONTROL,&Sure_Noyes[0],&Sure_Noyes[0]},
};
MENU SETUPKey[5] =
{
{0,"MIMA",SETUP_Key1,&MainMenu[1],&AD,NULL,&SETUPKey[1]}, //密码界面
{1,"LD",SETUP_Key2,&MainMenu[1],NULL,NULL,&SETUPMenu[0]}, //参数同步界面
{2,"LD",Localnet,&SETUPMenu[2],&Cap_configura[0],&SETUPKey[3],&SETUPKey[3]}, //参数同步界面
{3,"LD",Autonet,&SETUPMenu[2],&Sure_Noyes[0],&SETUPKey[2],&SETUPKey[2]}, //参数同步界面
{4,"TJDQ",T_JDQ,&SETUPKey[0],NULL,NULL,NULL}, //继电器动作时间界面
};
MENU SETUPMenu[3] = //设置参数菜单
{
{0,"D",RUN_key,&MainMenu[1],&Oppt[0],&SETUPMenu[2],&SETUPMenu[1]}, //运行参数
{1,"D",Protect_SETUP,&MainMenu[1],&Protect_p[0],&SETUPMenu[0],&SETUPMenu[2]}, //保护参数
{2,"D",DR_SETUP,&MainMenu[1],&SETUPKey[2],&SETUPMenu[1],&SETUPMenu[0]}, //电容配置
// {2,"D",DR_SETUP,&MainMenu[1],&Cap_configura[0],&SETUPMenu[1],&SETUPMenu[0]} //电容配置
};
MENU AD=
{
0,"AD",G_ADUa,NULL,NULL,NULL,NULL,
};
MENU Oppt[15]= //运行参数 菜单 Operating parameters
{
{0,"A",Addressset,&Oppt[13],&Oppt[3],NULL,&Oppt[1]},
{1,"A",G_ID1,NULL,NULL,NULL,&Oppt[2]},
{2,"A",G_ID2,NULL,NULL,NULL,&Oppt[3]},
{3,"A",Competenceset,&Oppt[0],&Oppt[6],NULL,&Oppt[4]},
{4,"A",G_pw1,NULL,NULL,NULL,&Oppt[5]},
{5,"A",G_pw2,NULL,NULL,NULL,&Oppt[6]},
{6,"A",CTset,&Oppt[3],&Oppt[9],NULL,&Oppt[7]},
{7,"A",G_ct1,NULL,NULL,NULL,&Oppt[8]},
{8,"A",G_ct2,NULL,NULL,NULL,&Oppt[9]},
{9,"A",COSset,&Oppt[6],&Oppt[11],NULL,&Oppt[10]},
{10,"A",G_cos,NULL,NULL,NULL,&Oppt[11]},
{11,"A",QCset,&Oppt[9],&Oppt[13],NULL,&Oppt[12]},
{12,"A",G_qc,NULL,NULL,NULL,&Oppt[13]},
{13,"A",D1set,&Oppt[11],&Oppt[0],NULL,&Oppt[14]},
{14,"A",G_d1,NULL,NULL,NULL,&Oppt[0]},
};
MENU Protect_p[12]= //保护参数 菜单 parameters
{
{0,"B",G_Uh,&Protect_p[10],&Protect_p[2],NULL,&Protect_p[1]},
{1,"B",G_ProUH,NULL,NULL,NULL,&Protect_p[2]},
{2,"B",G_Ul,&Protect_p[0],&Protect_p[4],NULL,&Protect_p[3]},
{3,"B",G_ProUl,NULL,NULL,NULL,&Protect_p[4]},
{4,"B",G_THDu,&Protect_p[2],&Protect_p[6],NULL,&Protect_p[5]},
{5,"B",G_ProTHDu,NULL,NULL,NULL,&Protect_p[6]},
{6,"B",G_THDi,&Protect_p[4],&Protect_p[8],NULL,&Protect_p[7]},
{7,"B",G_ProTHDi,NULL,NULL,NULL,&Protect_p[8]},
{8,"B",G_D2,&Protect_p[6],&Protect_p[10],NULL,&Protect_p[9]},
{9,"B",G_ProD2,NULL,NULL,NULL,&Protect_p[10]},
{10,"B",G_TP,&Protect_p[8],&Protect_p[0],NULL,&Protect_p[11]},
{11,"B",G_ProTP,NULL,NULL,NULL,&Protect_p[0]},
};
MENU Cap_configura[12]= //电容配置 菜单
{
{0,"C",G_SN,&Cap_configura[9],&Cap_configura[3],NULL,&Cap_configura[1]},
{1,"C",G_CapSN1,NULL,NULL,NULL,&Cap_configura[2]},
{2,"C",G_CapSN2,NULL,NULL,NULL,&Cap_configura[3]},
{3,"C",G_VE,&Cap_configura[0],&Cap_configura[6],NULL,&Cap_configura[4]},
{4,"C",G_CapVE1,NULL,NULL,NULL,&Cap_configura[5]},
{5,"C",G_CapVE2,NULL,NULL,NULL,&Cap_configura[6]},
{6,"C",G_Ih,&Cap_configura[3],&Cap_configura[9],NULL,&Cap_configura[7]},
{7,"C",G_CapIH1,NULL,NULL,NULL,&Cap_configura[8]},
{8,"C",G_CapIH2,NULL,NULL,NULL,&Cap_configura[9]},
{9,"C",G_Il,&Cap_configura[6],&Cap_configura[0],NULL,&Cap_configura[10]},
{10,"C",G_CapIL1,NULL,NULL,NULL,&Cap_configura[11]},
{11,"C",G_CapIL2,NULL,NULL,NULL,&Cap_configura[0]},
};
MENU Manualcontrol[2] =
{
{0,"E",Cx_control0,&MainMenu[2],NULL,&Manualcontrol[1],&Manualcontrol[1]},
{1,"E",Cx_control1,&MainMenu[2],NULL,&Manualcontrol[0],&Manualcontrol[0]},
};
MENU *pMenu = &MainMenu[0]; //指向当前菜单的指针
//2015.3.14
void MENU_AUTO(void) //自动运行
{
g_MBHoldReg1[5] = 1;
MENU_MainSub(1,0,0);
MENU_MainKey();
}
void MENU_SETUP() //参数配置
{
g_MBHoldReg1[5] = 2;
MENU_MainSub(0,1,0);
MENU_MainKey();
}
void MENU_HAND() //手动控制
{
g_MBHoldReg1[5] = 3;
MENU_MainSub(0,0,1);
MENU_MainKey();
}
void lian_fen()
{
unsigned char *p;
if(g_communicate)
{
p = (pstr) "联";
Dis_String(3,0,p,0);
}else
{
p = (pstr) "分";
Dis_String(3,0,p,0);
}
}
void MENU_MainSub(u8 first,u8 second,u8 third) //主菜单
{
u8 *p;
lian_fen();
p = (pstr) "自动运行";
Dis_String(42,1,p,first);
p = (pstr) "参数配置";
Dis_String(42,3,p,second);
p = (pstr)"手动控制";
Dis_String(42,5,p,third);
}
void MENU_MainKey() //主菜单按键扫描
{
u8 tmp = 0;
tmp = g_keyValue; //键值
g_keyValue = 0;
switch(tmp)
{
case KCR:
{
kongflag =0;
LcmClear(0);
//zhangjian
if(strcmp(pMenu -> string,"AUTO")==0)
Auto_manual = 0;
//zhangjian
pMenu = pMenu -> childrenMenuItem;
}break;
case KESC:{
//LcmClear(0);
pMenu = &MainMenu[0];
}break;
case KUP:
{
pMenu = pMenu -> lastMenuItem;
}break;
case KDOWN:
{
pMenu = pMenu -> nextMenuItem;
}break;
default:
break;
}
}
// //
void Display_C() //显示电容标号及是否投退 反显表示投入 此函数有共补、分补之分
{
unsigned char i=0;
for(i=0;i<6;i++)
{
Display_charLocate(2+i,6,HZTT[i+6],0);
}
if(g_CScratch!= g_InitiativeFlag)
{
g_CScratch = g_InitiativeFlag;
LcmClear_xy(6,7,0,128);
}
if(g_InitiativeFlag==1) //主控模式
{
for(i=0;i<8;i++)
{
LcmPutNum_2(8+15*i,6,g_cx,capdevice[g_cx-1].cstatus);
LcmPutNum_2(8+15*i,7,g_cx+8,capdevice[g_cx+7].cstatus);
g_cx++;
if(g_cx==64) break;
}
}else
{
Uchar p;
p = 'C';
LcmPutChar_8(15,6,p,capdevice[g_CapSN1-1].cstatus);
LcmPutChar_8(45,6,p,capdevice[g_CapSN2-1].cstatus);
LcmPutNum_2(21,6,g_CapSN1,capdevice[g_CapSN1-1].cstatus);
LcmPutNum_2(51,6,g_CapSN2,capdevice[g_CapSN2-1].cstatus);
LcmClear_xy(7,8,0,128);
}
}
void MENU_AUTOMenu1() //第一屏 功率因数、电压电流、电容器状态
{
u8 *p;
unsigned char i;
g_cx = 1;
g_MBHoldReg1[5] = 11;
if(!kongflag)
{
kongflag = 1;
p = (pstr)"COS";
LcmPutStr_8(15,0,p,0);
for(i=0;i<6;i++)
{
Display_charLocate(33+i,0,HZTT[i],0);
}
p = (pstr)"VOLT(V)";
LcmPutStr_8(15,2,p,0);
p = (pstr)"CURR(A)";
LcmPutStr_8(15,4,p,0);
//zhangjian
if(Qflag == 1)
p = (pstr)"-";
else
p = (pstr)" ";
LcmPutStr_8(69,0,p,0);
LcmPutNum_4(75,0,g_Pf,0); //??g_RunCOS
LcmPutNum_40(75,2,g_Uca,g_warnFlagc);
LcmPutNum_40(75,4,g_Ib/10.0,g_warnFlagIb);
Display_C();
}
MENU_AUTOKey();
}
//zhangjian20160921
void MENU_AUTOMenu2() //第二屏 有功功率、无功功率、频率
{
unsigned char *p;
// unsigned char i;
g_cx = 17;
g_MBHoldReg1[5] = 12;
if(!kongflag)
{
kongflag = 1;
p = (pstr)"P(KW)";
LcmPutStr_8(15,0,p,0);
p = (pstr)"Q(Kvar)";
LcmPutStr_8(15,2,p,0);
p = (pstr)"f(HZ)";
LcmPutStr_8(15,4,p,0);
LcmPutNum_40(75,0,g_P/1000.0,0);
LcmPutNum_40(75,2,g_Q/1000.0,0);
LcmPutNum_40(75,4,g_f,0);
Display_C();
} //数据
MENU_AUTOKey();
}
//zhangjian20160921
void MENU_AUTOMenu3() //第三屏 电容器电流、温度
{
unsigned char *p;
unsigned char i;
unsigned int Display_T;
Display_T = fabs(g_Temperature1);
g_cx = 33;
g_MBHoldReg1[5] = 13;
if(!kongflag)
{
kongflag = 1;
p = (pstr)"C(A)";
LcmPutStr_8(30,0,p,0);
for(i=0;i<28;i++)
{
Display_charLocate(75+i,0,T_1[i],0); //
}
p = (pstr)"C1";
LcmPutStr_8(15,2,p,0);
p = (pstr)"C2";
LcmPutStr_8(15,4,p,0);
p = (pstr)"___";
LcmPutStr_8(35,2,p,0); // C1值
LcmPutNum_40(75,2,Display_T,g_warnFlag); //温度
LcmPutStr_8(35,4,p,0); // C2值
Display_C(); //显示电容标示
if(g_Temperature1 < 0)
{
p = (pstr)"-";
LcmPutStr_8(67,2,p,0);
}
}//数据
MENU_AUTOKey();
}
//zhangjian20160921
void MENU_AUTOMenu4() //第四屏 电压畸变率、电流畸变率
{
unsigned char *p;
g_cx = 49;
g_MBHoldReg1[5] = 14;
if(!kongflag)
{
kongflag = 1;
p = (pstr)"THDu(%)";
LcmPutStr_8(15,1,p,0);
p = (pstr)"THDi(%)";
LcmPutStr_8(15,3,p,0);
LcmPutNum_30(75,1,g_cTHDu,g_warnFlagTHUc);//g_THDu g_warnFlagTHUc == 0)&&(g_warnFlagTHIb
LcmPutNum_30(75,3,g_bTHDi,g_warnFlagTHIb);//g_THDi
Display_C();
}
MENU_AUTOKey();
}
void MENU_AUTOMenu5() //第五屏 电压、电流3、5、7、9、11次谐波
{
unsigned char *p;
unsigned char i=0;
g_MBHoldReg1[5] = 15;
if(!kongflag)
{
kongflag = 1;
p = (pstr)"HRUn(%)";
LcmPutStr_8(25,1,p,0);
p = (pstr)"HRIn(%)";
LcmPutStr_8(75,1,p,0);
for(i=0;i<5;i++)//??
{
LcmPutNum_12(5,2+i,3+2*i,0); // 3/5/7/9/11
LcmPutNum_30(30,2+i,g_cHRUn[i],0); //HRUn
LcmPutNum_30(80,2+i,g_bHRIn[i],0); //HRUi
}
}
MENU_AUTOKey();
}
void MENU_AUTOMenu6() //第六屏 电压、电流13、15、17、19、21次谐波
{
unsigned char *p;
unsigned char i=0;
g_MBHoldReg1[5] = 16;
if(!kongflag)
{
kongflag = 1;
p = (pstr)"HRUn(%)";
LcmPutStr_8(25,1,p,0);
p = (pstr)"HRIn(%)";
LcmPutStr_8(75,1,p,0);
for(i=0;i<5;i++) //??
{
LcmPutNum_12(5,2+i,13+2*i,0); // 13/15/17/19/21
LcmPutNum_30(30,2+i,g_cHRUn[5+i],0); //HRUn
LcmPutNum_30(80,2+i,g_bHRIn[5+i],0); //HRUi
}
}
MENU_AUTOKey();
}
void MENU_AUTOMenu7() //第七屏 3/5/7/9/11电流谐波率
{
unsigned char *p;
unsigned char i=0;
g_MBHoldReg1[5] = 17;
if(!kongflag)
{
kongflag = 1;
p = (pstr)"HRIn(%)";
LcmPutStr_8(5,0,p,0);
p = (pstr)"A";
LcmPutStr_8(40,1,p,0);
p = (pstr)"B";
LcmPutStr_8(70,1,p,0);
p = (pstr)"C";
LcmPutStr_8(100,1,p,0);
}
for(i=0;i<5;i++) //数据
{
LcmPutNum_12(5,2+i,3+2*i,0); //3/5/7/9/11电流谐波率
LcmPutNum_30(30,2+i,g_aHRIn[i],0); //HRUn
LcmPutNum_30(64,2+i,g_bHRIn[i],0); //HRUi
LcmPutNum_30(96,2+i,g_cHRIn[i],0); //HRUi
}
MENU_AUTOKey();
}
void MENU_AUTOMenu8() //第八屏 13/15/17/19/21电流谐波率
{
unsigned char *p;
unsigned char i=0;
g_MBHoldReg1[5] = 18;
if(!kongflag)
{
kongflag = 1;
p = (pstr)"HRIn(%)";
LcmPutStr_8(5,0,p,0);
p = (pstr)"A";
LcmPutStr_8(40,1,p,0);
p = (pstr)"B";
LcmPutStr_8(70,1,p,0);
p = (pstr)"C";
LcmPutStr_8(100,1,p,0);
}
for(i=0;i<5;i++) //数据
{
LcmPutNum_12(5,2+i,13+2*i,0); // 13/15/17/19/21电流谐波率
LcmPutNum_30(30,2+i,g_aHRIn[5+i],0); //HRUn-A
LcmPutNum_30(64,2+i,g_bHRIn[5+i],0); //HRUi-B
LcmPutNum_30(96,2+i,g_cHRIn[5+i],0); //HRUi-C
}
MENU_AUTOKey();
}
void MENU_SETKey() //按键扫描
{
unsigned char tmp;
tmp = g_keyValue; //键值
g_keyValue = 0;
switch(tmp)
{
case KESC:
{
kongflag = 0;
LcmClear(0);
pMenu = pMenu -> parentMenuItem;
}break;
case KUP:
{
kongflag = 0;
LcmClear(0);
pMenu = pMenu -> lastMenuItem;
}break;
case KDOWN:
{
kongflag = 0;
LcmClear(0);
pMenu = pMenu -> nextMenuItem;
}break;
case KCR:
{
{
kongflag = 0;
LcmClear(0);
if(strcmp(pMenu -> string,"yes")== 0) // sjf003 在此发信号,自动组网,试验
{
if(KZ_Flag == 0)//lmm
{
AutoNet_Key();
pMenu = pMenu -> childrenMenuItem;
}
else
pMenu = pMenu -> nextMenuItem;
}
else
pMenu = pMenu -> childrenMenuItem;
}
}break;
default:
break;
}
}
void init_run()
{
unsigned char i=0;
for(i=0;i<15;i++)
Runset[i]=0;
}
void init_AD()
{
unsigned char i=0;
for(i=0;i<8;i++)
ADset[i]=0;
}
void MENU_AUTOKey() //主菜单按键扫描
{
u8 tmp;
Auto_manual=0;
tmp = g_keyValue; //键值
g_keyValue = 0;
switch(tmp)
{
case KESC:
{
kongflag = 0;
LcmClear(0);
pMenu = pMenu -> parentMenuItem;
}break;
case KUP:
{
kongflag = 0;
LcmClear(0);
pMenu = pMenu -> lastMenuItem;
}break;
case KDOWN:
{
kongflag = 0;
LcmClear(0);
pMenu = pMenu -> nextMenuItem;
}break;
case KCR:
{
kongflag = 0;
if(strcmp(pMenu -> string,"D")== 0)
{
LcmClear(0);
pMenu = pMenu -> childrenMenuItem;
}
}break;
default:
break;
}
}
void MENU_tiaokey() //主菜单按键扫描
{
unsigned char tmp;
tmp = g_keyValue; //键值
g_keyValue = 0;
switch(tmp)
{
case KUP:
{
if(strcmp(pMenu -> string,"MIMA")== 0)//密码设置
{
if(Pass_flag0)
g_SetPassword2++;
else
g_SetPassword1++;
if(g_SetPassword2==100)
g_SetPassword2=0;
if(g_SetPassword1==100)
g_SetPassword1=0;
}
if(strcmp(pMenu -> string,"LD")== 0)
{
if(g_communicate==1) g_communicate=0;
else g_communicate=1;
}
}break;
case KDOWN:
{
if(strcmp(pMenu -> string,"MIMA")== 0)
{
if(Pass_flag0)
{
if(g_SetPassword2==0)
g_SetPassword2=99;
else
g_SetPassword2--;
}
else
{
if(g_SetPassword1==0)
g_SetPassword1=99;
else
g_SetPassword1--;
}
}
if(strcmp(pMenu -> string,"LD")== 0)
{
if(g_communicate==1) g_communicate=0;
else g_communicate=1;
}
}break;
case KCR:
{
kongflag=0;
if(strcmp(pMenu -> string,"LD")== 0)
{
LcmClear(0);
pMenu = pMenu -> nextMenuItem;
}
if(((g_SetPassword1==1)&&(g_SetPassword2==1))&&((strcmp(pMenu -> string,"MIMA")== 0)))
{
LcmClear(0);
g_SetPassword1 = 0;
g_SetPassword2 = 0;
ADset_Subscript=0;
init_AD();
ADset[ADset_Subscript]=1;
pMenu = pMenu -> childrenMenuItem;
}
if(((g_SetPassword1==2)&&(g_SetPassword2==2))&&((strcmp(pMenu -> string,"MIMA")== 0)))
{
LcmClear(0);
g_SetPassword1 = 0;
g_SetPassword2 = 0;
pMenu = &SETUPKey[4];
}
if((((g_SetPassword1==g_RunPW1)&&(g_SetPassword2==g_RunPW2))||((g_SetPassword1==1)&&(g_SetPassword2==10)))&&((strcmp(pMenu -> string,"MIMA")== 0)))
{
LcmClear(0);
g_SetPassword1 = 0;
g_SetPassword2 = 0;
pMenu = pMenu -> nextMenuItem;
}else
{
if(strcmp(pMenu -> string,"MIMA")== 0)
{
if(Pass_flag0)
{Pass_flag0=0;Pass_flag1 = 1;Pass_flag2 = 0;}
else
{Pass_flag0=1;Pass_flag1 = 0;Pass_flag2 = 1;}
break;
}
}
}break;
case KESC:
{
LcmClear(0);
pMenu = pMenu -> parentMenuItem;
}
default:
break;
}
}
void T_JDQ()
{
LcmPutNum_4(10,2,RelayA1on_j*16,0);
LcmPutNum_4(10,3,RelayC1on_j*16,0);
LcmPutNum_4(10,4,RelayA2on_j*16,0);
LcmPutNum_4(10,5,RelayC2on_j*16,0);
LcmPutNum_4(60,2,RelayA1off_j*16,0);
LcmPutNum_4(60,3,RelayC1off_j*16,0);
LcmPutNum_4(60,4,RelayA2off_j*16,0);
LcmPutNum_4(60,5,RelayC2off_j*16,0);
MENU_tiaokey();
}
void SETUP_Key1() //参数设置 密码
{
unsigned char *p;
// if(!kongflag)
{
g_MBHoldReg1[5] = 25;
// kongflag = 1;
lian_fen();
p = (pstr) "密空空码";
Dis_String(40,1,p,0);
}
p = (pstr)"Num";
LcmPutStr_8(10,7,p,0);
p = (pstr)":";
LcmPutStr_8(28,7,p,0);
LcmPutNum_2(34,7,20,0);
LcmPutNum_2(46,7,g_Year,0);
LcmPutNum_2(58,7,g_Month,0);
LcmPutNum_2(70,7,g_Code1,0);
LcmPutNum_2(82,7,g_Code2,0);
LcmPutNum_2(48,4,g_SetPassword1,Pass_flag1);
LcmPutNum_2(60,4,g_SetPassword2,Pass_flag2);
p = (pstr)"VN";
LcmPutStr_8(96,7,p,0);
LcmPutNum_2(109,7,40,0); //2016.8.22
MENU_tiaokey();
}
void SETUP_AD()
{
unsigned char *p;
lian_fen();
p = (pstr) "测量参数";
Dis_String(42,2,p,0);
MENU_SETKey();
}
void Net(u8 first,u8 second) //组网主菜单
{
unsigned char *p;
lian_fen();
p = (pstr) "手动配置";
Dis_String(42,2,p,first);
p = (pstr) "自动组网";
Dis_String(42,4,p,second);
}
void Autonet() //自动组网界面
{
Net(0,1);
g_MBHoldReg1[5] = 23;
MENU_SETKey();
}
void Localnet() //本地组网界面
{
Net(1,0);
g_MBHoldReg1[5] = 23;
MENU_SETKey();
}
///////////////////////////////////////////
void MENU_NO()
{
unsigned char *p;
if(!kongflag)
{
p = (pstr)"NO";
LcmPutStr_8(44,3,p,1);
p = (pstr)"YES";
LcmPutStr_8(72,3,p,0);
}
MENU_SETKey();
}
void MENU_YES()
{
unsigned char *p;
if(!kongflag)
{
p = (pstr)"NO";
LcmPutStr_8(44,3,p,0);
p = (pstr)"YES";
LcmPutStr_8(72,3,p,1);
}
MENU_SETKey();
}
///////////////////////////////////////////
void Autonetworking() //自动组网中
{
unsigned char *p;
p=(pstr)"自动组网中";//
Dis_String(42,3,p,0);
}
void SETUP_Key2() //参数同步界面
{
unsigned char *p;
// if(!kongflag)
{
g_MBHoldReg1[5] = 24;
// kongflag = 1;
lian_fen();
p =(pstr)"参数同步冒";
Dis_String(16,3,p,0);
}
if(g_communicate==1)
p = (pstr)"启动";
else
p = (pstr)"关闭";
Dis_String(76,3,p,1);
MENU_tiaokey();
}
void SETUP_Parameters(u8 first,u8 second,u8 third) //主菜单
{
unsigned char *p;
lian_fen();
p = (pstr)"运行参数";
Dis_String(42,1,p,first);
p = (pstr)"保护参数";
Dis_String(42,3,p,second);
p = (pstr)"电容配置";
Dis_String(42,5,p,third);
}
void RUN_key()//运行参数
{
SETUP_Parameters(1,0,0);
g_MBHoldReg1[5] = 21;
init_Pro();
init_run();
init_Cset();
init_AD();
MENU_SETKey();
//MENU_AUTOKey();
}
void Protect_SETUP()//保护参数
{
g_MBHoldReg1[5] = 22;
SETUP_Parameters(0,1,0);
init_Pro();
init_run();
init_Cset();
init_AD();
MENU_SETKey();
//MENU_AUTOKey();
}
void DR_SETUP()//电容配置
{
g_MBHoldReg1[5] = 23;
SETUP_Parameters(0,0,1);
init_Pro();
init_run();
init_Cset();
init_AD();
MENU_SETKey();
//MENU_AUTOKey();
}
void Display_AD()//电压参数界面显示
{
unsigned char *p;
unsigned char i=0;
p = (pstr)"Uac";
LcmPutStr_8(23,1,p,0);//35
p = (pstr)"Ib";
LcmPutStr_8(23,2,p,0);
p = (pstr)":";
LcmPutStr_8(41,1,p,0);//47
LcmPutStr_8(41,2,p,0);//47
p = (pstr)"Year";
LcmPutStr_8(23,3,p,0);
p = (pstr)"Month";
LcmPutStr_8(23,4,p,0);
p = (pstr)"Code";
LcmPutStr_8(23,5,p,0);
p = (pstr)":";
for(i=2;i<5;i++)
LcmPutStr_8(55,1+i,p,0);//47
LcmPutNum_300(50,1,g_ADUa,ADset[0]);//64
LcmPutNum_300(50,2,g_ADIb,ADset[1]);
LcmPutNum_40(90,1,g_Uca,0);
LcmPutNum_40(90,2,g_Ib/10.0,0);
LcmPutNum_2(67,3,20,0);
LcmPutNum_2(79,3,g_Year,ADset[2]);
LcmPutNum_2(67,4,g_Month,ADset[3]);
LcmPutNum_2(67,5,g_Code1,ADset[4]);
LcmPutNum_2(79,5,g_Code2,ADset[5]);
p = (pstr)"Pa";
LcmPutStr_8(23,6,p,0);//35
LcmPutNum_300(40,6,g_ADPa,ADset[6]);//64
p = (pstr)"Qa";
LcmPutStr_8(23,7,p,0);//35
LcmPutNum_300(40,7,g_ADQa,ADset[7]);//64
}
void Display_Run()//运行参数界面显示
{
unsigned char i=0;
unsigned char *p;
lian_fen();
p = (pstr)"ID";
LcmPutStr_8(35,1,p,Runset[0]);
p = (pstr)"PW";
LcmPutStr_8(35,2,p,Runset[3]);
p = (pstr)"CT";
LcmPutStr_8(35,3,p,Runset[6]);
p = (pstr)"COS";
LcmPutStr_8(29,4,p,Runset[9]);
p = (pstr)"QC";
LcmPutStr_8(35,5,p,Runset[11]);
p = (pstr)"D1";
LcmPutStr_8(35,6,p,Runset[13]);
p = (pstr)":";
for(i=0;i<6;i++)
LcmPutStr_8(47,1+i,p,0);
p = (pstr)"S";
LcmPutStr_8(100,6,p,0);
LcmPutNum_2(64,1,g_RunID1,Runset[1]);
LcmPutNum_2(76,1,g_RunID2,Runset[2]);
LcmPutNum_2(64,2,g_RunPW1,Runset[4]);
LcmPutNum_2(76,2,g_RunPW2,Runset[5]);
LcmPutNum_2(64,3,g_RunCT1,Runset[7]);
LcmPutNum_2(76,3,g_RunCT2,Runset[8]);
LcmPutNum_300(64,4,g_RunCOS,Runset[10]);
LcmPutNum_20(64,5,g_RunQC,Runset[12]);
LcmPutNum_3(64,6,g_RunD1,Runset[14]);
}
void Display_Protect()//保护参数界面显示
{
unsigned char i=0;
unsigned char *p;
lian_fen();
p = (pstr)"Uh";
LcmPutStr_8(35,1,p,G_ProC[0]);
p = (pstr)"Ul";
LcmPutStr_8(35,2,p,G_ProC[2]);
p = (pstr)"THDu";
LcmPutStr_8(23,3,p,G_ProC[4]);
p = (pstr)"THDi";
LcmPutStr_8(23,4,p,G_ProC[6]);
p = (pstr)"D2";
LcmPutStr_8(35,5,p,G_ProC[8]);
p = (pstr)"TP";
LcmPutStr_8(35,6,p,G_ProC[10]);
p = (pstr)":";
for(i=0;i<6;i++)
LcmPutStr_8(47,1+i,p,0);
p = (pstr)"V";
LcmPutStr_8(100,1,p,0);
LcmPutStr_8(100,2,p,0);
p = (pstr)"%";
LcmPutStr_8(100,3,p,0);
LcmPutStr_8(100,4,p,0);
p = (pstr)"S";
LcmPutStr_8(100,5,p,0);
for(i=0;i<6;i++) //.c
{
Display_charLocate(100+i,6,HZTT[i+12],0);
}
LcmPutNum_3(64,1,g_ProUH,G_ProC[1]); //数据 Uh
LcmPutNum_3(64,2,g_ProUL,G_ProC[3]);
LcmPutNum_30(64,3,g_ProTHDu,G_ProC[5]);
LcmPutNum_30(64,4,g_ProTHDi,G_ProC[7]);
LcmPutNum_3(64,5,g_ProD2,G_ProC[9]);
LcmPutNum_3(64,6,g_ProTp,G_ProC[11]);
}
void Display_Configura()//电容配置 界面显示
{
unsigned char i=0;
unsigned char *p;
p = (pstr)"C1(~) C2(~)";
LcmPutStr_8(25,1,p,0);
p = (pstr)"SN";
LcmPutStr_8(5,3,p,G_cset[0]);
p = (pstr)"VE";
LcmPutStr_8(5,4,p,G_cset[3]);
p = (pstr)"Ih";
LcmPutStr_8(5,6,p,G_cset[6]);
p = (pstr)"Il";
LcmPutStr_8(5,7,p,G_cset[9]);
p = (pstr)":";
for(i=0;i<2;i++)
LcmPutStr_8(17,3+i,p,0);
LcmPutStr_8(17,6,p,0);
LcmPutStr_8(17,7,p,0);
LcmPutNum_2(30,3,g_CapSN1,G_cset[1]); //SN
LcmPutNum_2(69,3,g_CapSN2,G_cset[2]); //
LcmPutNum_30(30,4,g_CapVE1,G_cset[4]); //VE
LcmPutNum_30(69,4,g_CapVE2,G_cset[5]); //
p = (pstr)"Kvar";
LcmPutStr_8(104,4,p,0);
p = (pstr)"___";
LcmPutStr_8(30,6,p,G_cset[7]); //Ih
LcmPutStr_8(69,6,p,G_cset[8]);
LcmPutStr_8(30,7,p,G_cset[10]); //Il
LcmPutStr_8(69,7,p,G_cset[11]);
p = (pstr)"A";
LcmPutStr_8(110,6,p,0);
LcmPutStr_8(110,7,p,0);
}
void init_Cmode() //电容类型初始化
{
unsigned char numbers;
for(numbers = 0;numbers<64;numbers++)
{
DR_LX[numbers] = 0xff;
DR_RZ1[numbers] = 0;
DR_RZ2[numbers] = 0;
DR_Num[numbers] = 0;
capdevice[numbers].cid = numbers;
// capdevice[numbers].ctype = "?";
capdevice[numbers].cctype = 0;
capdevice[numbers].cvalue = 0;
capdevice[numbers].cstatus = 0;
capdevicetmp[numbers].cstatus = 0;
capdevice[numbers].count = 0;
}
capdevice[g_CapSN1-1].cctype=4;
capdevice[g_CapSN2-1].cctype=4;
//capdevice[g_CapSN3-1].cctype=3;
capdevice[g_CapSN1-1].cvalue=g_CapVE1;
capdevice[g_CapSN2-1].cvalue=g_CapVE2;
//capdevice[g_CapSN3-1].cvalue=g_CapVE3;
}
void Display_CNMode(u8 col,u8 page,u8 cnumber,u8 cnumber_x,u8 mode,u16 cvalue,u8 cvalue_x)//c+N+类型
{ //col列 page页 mode电容类型 cnumber电容标号 cvalue电容值 cnumber_x反显表示电容选中 cvalue_x反显表示电容投
//函数显示 Cx △ 010
unsigned char *p;
if(mode == 0)
{
p = (pstr)"?"; //主机未确定
}else if(mode == 4)
{
p = (pstr)"~"; //△
}else if(mode == 1)
{
p = (pstr)"A"; //Y
}
else if(mode == 2)
{
p = (pstr)"B"; //Y
}
else if(mode == 3)
{
p = (pstr)"C"; //Y
}
LcmPutStr_8(col+22,page,p,0);
p = (pstr)"C";
LcmPutStr_8(col,page,p,cnumber_x);
LcmPutNum_2(col+6,page,cnumber,cnumber_x);//电容标号
LcmPutNum_30(col+32,page,cvalue,cvalue_x);//电容值
}
void Display_Mcontrol(Uchar C) // 手动控制 界面显示 Npage 值0-5
{ //△ 电容类型 显示
Display_CNMode(5,0,g_CapSN1,0,capdevice[g_CapSN1-1].cctype,capdevice[g_CapSN1-1].cvalue,0);
Display_CNMode(70,0,g_CapSN2,0,capdevice[g_CapSN2-1].cctype,capdevice[g_CapSN2-1].cvalue,0);
G_mcontrol[C]=1;
if( Npage > 4)
{
Display_CNMode(5,2,1+Npage*12,G_mcontrol[1+Npage*12],capdevice[0+Npage*12].cctype,capdevice[0+Npage*12].cvalue,capdevice[0+Npage*12].cstatus);
Display_CNMode(5,3,2+Npage*12,G_mcontrol[2+Npage*12],capdevice[1+Npage*12].cctype,capdevice[1+Npage*12].cvalue,capdevice[1+Npage*12].cstatus);
Display_CNMode(68,2,3+Npage*12,G_mcontrol[3+Npage*12],capdevice[2+Npage*12].cctype,capdevice[2+Npage*12].cvalue,capdevice[2+Npage*12].cstatus);
Display_CNMode(68,3,4+Npage*12,G_mcontrol[4+Npage*12],capdevice[3+Npage*12].cctype,capdevice[3+Npage*12].cvalue,capdevice[3+Npage*12].cstatus);
}
else
{
Display_CNMode(5,2,1+Npage*12,G_mcontrol[1+Npage*12],capdevice[0+Npage*12].cctype,capdevice[0+Npage*12].cvalue,capdevice[0+Npage*12].cstatus);
Display_CNMode(5,3,2+Npage*12,G_mcontrol[2+Npage*12],capdevice[1+Npage*12].cctype,capdevice[1+Npage*12].cvalue,capdevice[1+Npage*12].cstatus);
Display_CNMode(5,4,3+Npage*12,G_mcontrol[3+Npage*12],capdevice[2+Npage*12].cctype,capdevice[2+Npage*12].cvalue,capdevice[2+Npage*12].cstatus);
Display_CNMode(5,5,4+Npage*12,G_mcontrol[4+Npage*12],capdevice[3+Npage*12].cctype,capdevice[3+Npage*12].cvalue,capdevice[3+Npage*12].cstatus);
Display_CNMode(5,6,5+Npage*12,G_mcontrol[5+Npage*12],capdevice[4+Npage*12].cctype,capdevice[4+Npage*12].cvalue,capdevice[4+Npage*12].cstatus);
Display_CNMode(5,7,6+Npage*12,G_mcontrol[6+Npage*12],capdevice[5+Npage*12].cctype,capdevice[5+Npage*12].cvalue,capdevice[5+Npage*12].cstatus);
Display_CNMode(68,2,7+Npage*12,G_mcontrol[7+Npage*12],capdevice[6+Npage*12].cctype,capdevice[6+Npage*12].cvalue,capdevice[6+Npage*12].cstatus);
Display_CNMode(68,3,8+Npage*12,G_mcontrol[8+Npage*12],capdevice[7+Npage*12].cctype,capdevice[7+Npage*12].cvalue,capdevice[7+Npage*12].cstatus);
Display_CNMode(68,4,9+Npage*12,G_mcontrol[9+Npage*12],capdevice[8+Npage*12].cctype,capdevice[8+Npage*12].cvalue,capdevice[8+Npage*12].cstatus);
Display_CNMode(68,5,10+Npage*12,G_mcontrol[10+Npage*12],capdevice[9+Npage*12].cctype,capdevice[9+Npage*12].cvalue,capdevice[9+Npage*12].cstatus);
Display_CNMode(68,6,11+Npage*12,G_mcontrol[11+Npage*12],capdevice[10+Npage*12].cctype,capdevice[10+Npage*12].cvalue,capdevice[10+Npage*12].cstatus);
Display_CNMode(68,7,12+Npage*12,G_mcontrol[12+Npage*12],capdevice[11+Npage*12].cctype,capdevice[11+Npage*12].cvalue,capdevice[11+Npage*12].cstatus);
}
}
void calibration_key()
{
unsigned char tmp;
tmp = g_keyValue; //键值
g_keyValue = 0;
Auto_manual = 0;
switch(tmp)
{
case KESC:
{
kongflag = 0;
LcmClear(0);
pMenu = &MainMenu[1];
}break;
case KUP:
{
kongflag = 0;
if(ADset[0])
{ g_ADUa++;
if(g_ADUa>300) //???????
g_ADUa=100;
}else if(ADset[1])
{ g_ADIb++;
if(g_ADIb>300) //???????
g_ADIb=100;
}
if(ADset[2])
{ g_Year++;
if(g_Year>20) //???????
g_Year=15;
}
if(ADset[3])
{ g_Month++;
if(g_Month>12) //???????
g_Month=1;
}
if(ADset[4])
{ g_Code1++;
if(g_Code1>9) //???????
g_Code1=0;
}
if(ADset[5])
{ g_Code2++;
if(g_Code2>99) //???????
g_Code2=0;
}else if(ADset[6])
{ g_ADPa++;
if(g_ADPa>300) //???????
g_ADPa=100;
}
if(ADset[7])
{ g_ADQa++;
if(g_ADQa>300) //???????
g_ADQa=100;
}
}break;
case KDOWN:
{
kongflag = 0;
if(ADset[0])
{
if(g_ADUa==50) //???????
g_ADUa=300;
else
g_ADUa--;
}else if(ADset[1])
{
if(g_ADIb==50) //???????
g_ADIb=300;
else
g_ADIb--;
}
else if(ADset[2])
{
if(g_Year==14) //???????
g_Year=15;
else
g_Year--;
}
else if(ADset[3])
{
if(g_Month==1) //???????
g_Month=12;
else
g_Month--;
}
else if(ADset[4])
{
if(g_Code1==0) //???????
g_Code1=9;
else
g_Code1--;
}
else if(ADset[5])
{
if(g_Code2==0) //???????
g_Code2=99;
else
g_Code2--;
}else if(ADset[6])
{
if(g_ADPa==50) //???????
g_ADPa=300;
else
g_ADPa--;
}else if(ADset[7])
{
if(g_ADQa==50) //???????
g_ADQa=300;
else
g_ADQa--;
}
}break;
case KCR:
{
kongflag = 0;
if(ADset[0])
{
AT24Cxx_WriteTwoByte(0x0038,g_ADUa);
}
if(ADset[1])
{ AT24Cxx_WriteTwoByte(0x00F0,g_ADIb);
}
if(ADset[2])
{ AT24Cxx_WriteTwoByte(0x003e,g_Year);
}
if(ADset[3])
{ AT24Cxx_WriteTwoByte(0x0040,g_Month);
}
if(ADset[4])
{ AT24Cxx_WriteTwoByte(0x0042,g_Code1);
// DR_SendTime = ((u32) g_Code1*100+(u32)g_Code2)*50+2000;//sjf003
}
if(ADset[5])
{ AT24Cxx_WriteTwoByte(0x0044,g_Code2);
// DR_SendTime = ((u32) g_Code1*100+(u32)g_Code2)*50+2000;//sjf003
}
if(ADset[6])
{ AT24Cxx_WriteTwoByte(0x00F6,g_ADPa);
}
if(ADset[7])
{ AT24Cxx_WriteTwoByte(0x00F8,g_ADQa);
}
if(ADset_Subscript<7)ADset_Subscript++;
else ADset_Subscript=0;
init_AD();
ADset[ADset_Subscript]=1;
}break;
default:
break;
}
}
void Run_setkey() //主菜单按键扫描
{
unsigned char tmp;
tmp = g_keyValue; //键值
g_keyValue = 0;
switch(tmp)
{
case KESC:
{
kongflag = 0;
LcmClear(0);
if(strcmp(pMenu -> string,"A")== 0)
pMenu = &SETUPMenu[0];
if(strcmp(pMenu -> string,"B")== 0)
pMenu = &SETUPMenu[1];
if(strcmp(pMenu -> string,"C")== 0)
pMenu = &SETUPMenu[2];
}break;
case KUP:
{
if(Runset[1])
{ g_RunID1++;
if(g_RunID1>99) //运行参数最大值
g_RunID1=0;
}
if(Runset[2])
{ g_RunID2++;
if(g_RunID2>99) //运行参数最大值
g_RunID2=0;
}
if(Runset[4])
{ g_RunPW1++;
if(g_RunPW1>99) //运行参数最大值
g_RunPW1=0;
}
if(Runset[5])
{ g_RunPW2++;
if(g_RunPW2>99) //运行参数最大值
g_RunPW2=0;
}
if(Runset[7])
{ g_RunCT1++;
if(g_RunCT1>99) //运行参数最大值
g_RunCT1=0;
}
if(Runset[8])
{ g_RunCT2++;
if(g_RunCT2>99) //运行参数最大值
g_RunCT2=0;
}
if(Runset[10])
{ g_RunCOS++;
if(g_RunCOS>100) //运行参数最大值
g_RunCOS=85;
}
if(Runset[12])
{ g_RunQC++;
if(g_RunQC>12) //运行参数最大值
g_RunQC=5;
}
if(Runset[14])
{ g_RunD1++;
if(g_RunD1>600) //运行参数最大值
g_RunD1=0;
}
if(G_ProC[1])
{ g_ProUH++;
if(g_ProUH>480) //保护参数最大值
g_ProUH=380;
}
if(G_ProC[3])
{ g_ProUL++;
if(g_ProUL>360) //保护参数最大值
g_ProUL=330;
}
if(G_ProC[5])
{ g_ProTHDu++;
if(g_ProTHDu>250) //保护参数最大值
g_ProTHDu=0;
}
if(G_ProC[7])
{ g_ProTHDi++;
if(g_ProTHDi>999) //保护参数最大值
g_ProTHDi=0;
}
if(G_ProC[9])
{ g_ProD2++;
if(g_ProD2>180) //保护参数最大值
g_ProD2=60;
}
if(G_ProC[11])
{ g_ProTp++;
if(g_ProTp>100) //保护参数最大值
g_ProTp=0;
}
if(G_cset[1]) //电容设置 SN 1 序号
{ g_CapSN1++;
if(g_CapSN1>64)
g_CapSN1=1;
g_CapSN2 = g_CapSN1+1;
if(g_CapSN2>64)
g_CapSN2=1;
}
if(G_cset[2]) //电容设置 SN 2
{ g_CapSN2++;
if(g_CapSN2>64)
g_CapSN2=1;
g_CapSN1 = g_CapSN2-1;
if(g_CapSN1 == 0)
g_CapSN1=64;
}
if(G_cset[4]) //电容设置 VE 1 值
{ g_CapVE1++;
if(g_CapVE1>400)//电容器容量最大值
g_CapVE1=0;
}
if(G_cset[5]) //电容设置 VE 2
{ g_CapVE2++;
if(g_CapVE2>400)//电容器容量最大值
g_CapVE2=0;
}
if(G_cset[0]|G_cset[3]|G_cset[6]|G_cset[9])
{pMenu = pMenu -> parentMenuItem;kongflag = 0;}
if(G_ProC[0]|G_ProC[2]|G_ProC[4]|G_ProC[6]|G_ProC[8]|G_ProC[10])
{pMenu = pMenu -> parentMenuItem;kongflag = 0;}
if(Runset[0]|Runset[3]|Runset[6]|Runset[9]|Runset[11]|Runset[13])
{pMenu = pMenu -> parentMenuItem;kongflag = 0;}
}break;
case KDOWN:
{
if(Runset[1])
{
if(g_RunID1==0) //运行参数最小值
g_RunID1=99;
else
g_RunID1--;
}
if(Runset[2])
{
if(g_RunID2==0) //运行参数最小值
g_RunID2=99;
else
g_RunID2--;
}
if(Runset[4])
{
if(g_RunPW1==0) //运行参数最小值
g_RunPW1=99;
else
g_RunPW1--;
}
if(Runset[5])
{
if(g_RunPW2==0) //运行参数最小值
g_RunPW2=99;
else
g_RunPW2--;
}
if(Runset[7])
{
if(g_RunCT1==0) //运行参数最小值
g_RunCT1=99;
else
g_RunCT1--;
}
if(Runset[8])
{
if(g_RunCT2==0) //运行参数最小值
g_RunCT2=99;
else
g_RunCT2--;
}
if(Runset[10])
{
if(g_RunCOS==80) //运行参数最小值
g_RunCOS=100;
else
g_RunCOS--;
}
if(Runset[12])
{
if(g_RunQC==5) //运行参数最小值
g_RunQC=12;
else
g_RunQC--;
}
if(Runset[14])
{
if(g_RunD1==0) //运行参数最小值
g_RunD1=600;
else
g_RunD1--;
}
if(G_ProC[1])
{ g_ProUH--;
if(g_ProUH==380) //保护参数最小值
g_ProUH=480;
}
if(G_ProC[3])
{
if(g_ProUL==300) //保护参数最小值
g_ProUL=360;
else
g_ProUL--;
}
if(G_ProC[5])
{
if(g_ProTHDu==0) //保护参数最小值
g_ProTHDu=250;
else
g_ProTHDu--;
}
if(G_ProC[7])
{
if(g_ProTHDi==0) //保护参数最小值
g_ProTHDi=999;
else
g_ProTHDi--;
}
if(G_ProC[9])
{
if(g_ProD2==60) //保护参数最小值
g_ProD2=180;
else
g_ProD2--;
}
if(G_ProC[11])
{
if(g_ProTp==0) //保护参数最小值
g_ProTp=100;
else
g_ProTp--;
}
if(G_cset[1]) //电容设置 SN 1
{
if(g_CapSN1==1)
g_CapSN1=64;
else
g_CapSN1--;
g_CapSN2 = g_CapSN1+1;
if(g_CapSN2>64)
g_CapSN2=1;
}
if(G_cset[2]) //电容设置 SN 2
{
if(g_CapSN2==1)
g_CapSN2=64;
else
g_CapSN2--;
g_CapSN1 = g_CapSN2-1;
if(g_CapSN1==0)
g_CapSN1=64;
}
if(G_cset[4]) //电容设置 VE 1
{
if(g_CapVE1==0)
g_CapVE1=400;
else
g_CapVE1--;
}
if(G_cset[5]) //电容设置 VE 2
{
if(g_CapVE2==0)
g_CapVE2=400;
else
g_CapVE2--;
}
//LcmClear(0);
if(G_cset[0]|G_cset[3]|G_cset[6]|G_cset[9])
{pMenu = pMenu -> childrenMenuItem;kongflag = 0;}
if(G_ProC[0]|G_ProC[2]|G_ProC[4]|G_ProC[6]|G_ProC[8]|G_ProC[10])
{pMenu = pMenu -> childrenMenuItem;kongflag = 0;}
if(Runset[0]|Runset[3]|Runset[6]|Runset[9]|Runset[11]|Runset[13])
{pMenu = pMenu -> childrenMenuItem;kongflag = 0;}
}break;
case KCR: //按下确认键后进行存储
{
kongflag = 0;
pMenu = pMenu -> nextMenuItem;
if(Runset[1]) //运行参数存储
{ AT24Cxx_WriteTwoByte(0x0004,g_RunID1);
}
if(Runset[2])
{ AT24Cxx_WriteTwoByte(0x0006,g_RunID2);
}
if(Runset[4])
{ AT24Cxx_WriteTwoByte(0x0008,g_RunPW1);
}
if(Runset[5])
{ AT24Cxx_WriteTwoByte(0x000a,g_RunPW2);
}
if(Runset[7])
{ AT24Cxx_WriteTwoByte(0x000c,g_RunCT1);
}
if(Runset[8])
{ AT24Cxx_WriteTwoByte(0x000e,g_RunCT2);
}
if(Runset[10])
{ AT24Cxx_WriteTwoByte(0x0010,g_RunCOS);
}
if(Runset[12])
{ AT24Cxx_WriteTwoByte(0x0012,g_RunQC);
}
if(Runset[14])
{ AT24Cxx_WriteTwoByte(0x0014,g_RunD1);
}
if(G_ProC[1]) //保护参数存储
{ AT24Cxx_WriteTwoByte(0x0016,g_ProUH);
}
if(G_ProC[3])
{ AT24Cxx_WriteTwoByte(0x0018,g_ProUL);
}
if(G_ProC[5])
{ AT24Cxx_WriteTwoByte(0x001a,g_ProTHDu);
}
if(G_ProC[7])
{ AT24Cxx_WriteTwoByte(0x001c,g_ProTHDi);
}
if(G_ProC[9])
{ AT24Cxx_WriteTwoByte(0x001e,g_ProD2);
}
if(G_ProC[11])
{ AT24Cxx_WriteTwoByte(0x0020,g_ProTp);
}
if(G_cset[1]||G_cset[2]||G_cset[8]||G_cset[4]||G_cset[5]||G_cset[11]) //电容配置参数存储
{ AT24Cxx_WriteTwoByte(0x0022,g_CapSN1);
AT24Cxx_WriteTwoByte(0x0024,g_CapSN2);
capdevice[g_CapSN1-1].cctype=4;
capdevice[g_CapSN2-1].cctype=4;
AT24Cxx_WriteOneByte(0x0060 + g_CapSN1-1,4);
AT24Cxx_WriteOneByte(0x0060 + g_CapSN2-1,4);
AT24Cxx_WriteTwoByte(0x0026,g_CapVE1);
AT24Cxx_WriteTwoByte(0x0028,g_CapVE2);
capdevice[g_CapSN1-1].cvalue=g_CapVE1;
capdevice[g_CapSN2-1].cvalue=g_CapVE2;
AT24Cxx_WriteTwoByte(0x00A0+(g_CapSN1-1)<<1,g_CapVE1);
AT24Cxx_WriteTwoByte(0x00A0+(g_CapSN2-1)<<1,g_CapVE2);
}
//对应序号的 电容类型 电容大小 !!! 存储未添加
}break;
default:
break;
}
}
void G_ADUa()//UA
{
if(!kongflag)
{
kongflag = 1;
// init_AD();
// ADset[0]=1;
Display_AD();
}
calibration_key();
}
void Addressset()
{
// if(!kongflag)
{
g_MBHoldReg1[5] = 210;
// kongflag = 1;
init_run();
Runset[0]=1;
Display_Run();
}
Run_setkey();
}
void G_ID1()//g_RunID1
{
// if(!kongflag)
{
// kongflag = 1;
init_run();
Runset[1]=1;
g_MBHoldReg1[5] = 200;
}
Display_Run();
Run_setkey();
}
void G_ID2()////g_RunID1
{
// if(!kongflag)
{
// kongflag = 1;
init_run();
Runset[2]=1;
g_MBHoldReg1[5] = 201;
}
Display_Run();
Run_setkey();
}
void Competenceset() //密码
{
// if(!kongflag)
{
g_MBHoldReg1[5] = 211;
// kongflag = 1;
init_run();
Runset[3]=1;
Display_Run();
}
Run_setkey();
}
void G_pw1()
{
if(!kongflag)
{
kongflag = 1;
init_run();
Runset[4]=1;
g_MBHoldReg1[5] = 202;
}
Display_Run();
Run_setkey();
}
void G_pw2()
{
// if(!kongflag)
{
// kongflag = 1;
init_run();
Runset[5]=1;
g_MBHoldReg1[5] = 203;
}
Display_Run();
Run_setkey();
}
void CTset()
{
// if(!kongflag)
{
g_MBHoldReg1[5] = 212;
// kongflag = 1;
init_run();
Runset[6]=1;
Display_Run();
}
Run_setkey();
}
void G_ct1()
{
// if(!kongflag)
{
g_MBHoldReg1[5] = 150;
//g_MBHoldReg1[4] = 5;
// kongflag = 1;
init_run();
Runset[7]=1;
}
Display_Run();
Run_setkey();
}
void G_ct2()
{
// if(!kongflag)
{
g_MBHoldReg1[5] = 151;
//g_MBHoldReg1[4] = 5;
// kongflag = 1;
init_run();
Runset[8]=1;
}
Display_Run();
Run_setkey();
}
void COSset()
{
// if(!kongflag)
{
g_MBHoldReg1[5] = 213;
// kongflag = 1;
init_run();
Runset[9]=1;
Display_Run();
}
Run_setkey();
}
void G_cos()
{
// if(!kongflag)
{
g_MBHoldReg1[5] = 152;
//g_MBHoldReg1[4] = 5;
// kongflag = 1;
init_run();
Runset[10]=1;
}
Display_Run();
Run_setkey();
}
void QCset()
{
// if(!kongflag)
{
g_MBHoldReg1[5] = 214;
// kongflag = 1;
init_run();
Runset[11]=1;
Display_Run();
}
Run_setkey();
}
void G_qc()
{
// if(!kongflag)
{
// kongflag = 1;
init_run();
Runset[12]=1;
g_MBHoldReg1[5] = 153;
//g_MBHoldReg1[4] = 5;
}
Display_Run();
Run_setkey();
}
void D1set()
{
// if(!kongflag)
{
g_MBHoldReg1[5] = 215;
// kongflag = 1;
init_run();
Runset[13]=1;
Display_Run();
}
Run_setkey();
}
void G_d1()
{
// if(!kongflag)
{
// kongflag = 1;
init_run();
Runset[14]=1;
g_MBHoldReg1[5] = 154;
//g_MBHoldReg1[4] = 5;
}
Display_Run();
Run_setkey();
}
void init_Pro()
{
char i = 0;
for(i=0;i<12;i++)
G_ProC[i]=0;
}
void G_Uh()
{
// if(!kongflag)
{
g_MBHoldReg1[5] = 221;
// kongflag = 1;
init_Pro();
G_ProC[0]=1;
Display_Protect();
}
Run_setkey();
}
void G_ProUH()//数据
{
// if(!kongflag)
{
// kongflag = 1;
init_Pro();
G_ProC[1]=1;
g_MBHoldReg1[5] = 204;
}
Display_Protect();
Run_setkey();
}
void G_Ul()
{
// if(!kongflag)
{
g_MBHoldReg1[5] = 222;
// kongflag = 1;
init_Pro();
G_ProC[2]=1;
Display_Protect();
}
Run_setkey();
}
void G_ProUl()//数据
{
// if(!kongflag)
{
// kongflag = 1;
init_Pro();
G_ProC[3]=1;
g_MBHoldReg1[5] = 205;
}
Display_Protect();
Run_setkey();
}
void G_THDu()
{
if(!kongflag)
{
g_MBHoldReg1[5] = 223;
kongflag = 1;
init_Pro();
G_ProC[4]=1;
Display_Protect();
}
Run_setkey();
}
void G_ProTHDu()//数据
{
if(!kongflag)
{
kongflag = 1;
init_Pro();
G_ProC[5]=1;
g_MBHoldReg1[5] = 206;
}
Display_Protect();
Run_setkey();
}
void G_THDi()
{
if(!kongflag)
{
g_MBHoldReg1[5] = 224;
kongflag = 1;
init_Pro();
G_ProC[6]=1;
Display_Protect();
}
Run_setkey();
}
void G_ProTHDi()//数据
{
if(!kongflag)
{
kongflag = 1;
init_Pro();
G_ProC[7]=1;
g_MBHoldReg1[5] = 207;
}
Display_Protect();
Run_setkey();
}
void G_D2()
{
if(!kongflag)
{
g_MBHoldReg1[5] = 225;
kongflag = 1;
init_Pro();
G_ProC[8]=1;
Display_Protect();
}
Run_setkey();
}
void G_ProD2()//数据
{
if(!kongflag)
{
kongflag = 1;
init_Pro();
G_ProC[9]=1;
g_MBHoldReg1[5] = 208;
}
Display_Protect();
Run_setkey();
}
void G_TP()
{
if(!kongflag)
{
g_MBHoldReg1[5] = 226;
kongflag = 1;
init_Pro();
G_ProC[10]=1;
Display_Protect();
}
Run_setkey();
}
void G_ProTP()//数据
{
if(!kongflag)
{
kongflag = 1;
init_Pro();
G_ProC[11]=1;
g_MBHoldReg1[5] = 209;
}
Display_Protect();
Run_setkey();
}
void init_Cset()
{
Uchar i;
for(i=0;i<12;i++)
G_cset[i]=0;
}
void init_Cmcontrol()
{
Uchar i;
for(i=0;i<65;i++)
G_mcontrol[i]=0;
}
void G_SN() //电容配置,界面设置内容
{
if(!kongflag)
{
g_MBHoldReg1[5] = 230;
kongflag = 1;
j_syn = 1 ; //8.1添加 为了确定电容配置 界面
init_Cset();
G_cset[0]=1;
Display_Configura();
}
Run_setkey();
}
void G_CapSN1() //数据 //电容配置,界面设置内容
{
if(!kongflag)
{
kongflag = 1;
j_syn = 0 ; //8.1添加 为了确定电容配置 界面
init_Cset();
G_cset[1]=1;
g_MBHoldReg1[5] = 180;
}
Display_Configura();
Run_setkey();
}
void G_CapSN2() //数据 //电容配置,界面设置内容
{
if(!kongflag)
{
kongflag = 1;
init_Cset();
j_syn = 0 ; //8.1添加 为了确定电容配置 界面
G_cset[2]=1;
g_MBHoldReg1[5] = 181;
}
Display_Configura();
Run_setkey();
}
void G_CapSN3() //数据 //电容配置,界面设置内容
{
if(!kongflag)
{
kongflag = 1;
j_syn = 2 ; //8.1添加 为了确定电容配置 界面
init_Cset();
G_cset[8]=1;
g_MBHoldReg1[5] = 188;
}
Display_Configura();
Run_setkey();
}
void G_VE() // //电容配置,界面设置内容
{
if(!kongflag)
{
g_MBHoldReg1[5] = 231;
kongflag = 1;
j_syn = 3 ; //8.1添加 为了确定电容配置 界面
init_Cset();
G_cset[3]=1;
Display_Configura();
}
Run_setkey();
}
void G_CapVE1() //数据 //电容配置,界面设置内容
{
if(!kongflag)
{
kongflag = 1;
init_Cset();
G_cset[4]=1;
j_syn = 0 ; //8.1添加 为了确定电容配置 界面
g_MBHoldReg1[5] = 182;
}
Display_Configura();
Run_setkey();
}
void G_CapVE2() //数据 //电容配置,界面设置内容
{
if(!kongflag)
{
kongflag = 1;
init_Cset();
G_cset[5]=1;
j_syn = 0 ; //8.1添加 为了确定电容配置 界面
g_MBHoldReg1[5] = 183;
}
Display_Configura();
Run_setkey();
}
void G_CapVE3() //数据 //电容配置,界面设置内容
{
if(!kongflag)
{
kongflag = 1;
j_syn = 4 ; //8.1添加 为了确定电容配置 界面
init_Cset();
G_cset[11]=1;
g_MBHoldReg1[5] = 189;
}
Display_Configura();
Run_setkey();
}
void G_Ih() // //电容配置,界面设置内容
{
if(!kongflag)
{
g_MBHoldReg1[5] = 232;
kongflag = 1;
j_syn = 5 ; //8.1添加 为了确定电容配置 界面
init_Cset();
G_cset[6]=1;
Display_Configura();
}
Run_setkey();
}
void G_CapIH1() //数据 //电容配置,界面设置内容
{
if(!kongflag)
{
kongflag = 1;
j_syn = 6 ; //8.1添加 为了确定电容配置 界面
init_Cset();
G_cset[7]=1;
g_MBHoldReg1[5] = 184;
}
Display_Configura();
Run_setkey();
}
void G_CapIH2() //数据 //电容配置,界面设置内容
{
if(!kongflag)
{
kongflag = 1;
init_Cset();
G_cset[8]=1;
g_MBHoldReg1[5] = 185;
}
Display_Configura();
Run_setkey();
}
void G_Il() // //电容配置,界面设置内容
{
if(!kongflag)
{
g_MBHoldReg1[5] = 233;
kongflag = 1;
j_syn = 7 ; //8.1添加 为了确定电容配置 界面
init_Cset();
G_cset[9]=1;
Display_Configura();
}
Run_setkey();
}
void G_CapIL1() //数据 //电容配置,界面设置内容
{
if(!kongflag)
{
kongflag = 1;
j_syn = 8 ; //8.1添加 为了确定电容配置 界面
init_Cset();
G_cset[10]=1;
g_MBHoldReg1[5] = 186;
}
Display_Configura();
Run_setkey();
}
void G_CapIL2() //数据 //电容配置,界面设置内容
{
if(!kongflag)
{
kongflag = 1;
init_Cset();
G_cset[11]=1;
g_MBHoldReg1[5] = 187;
}
Display_Configura();
Run_setkey();
}
void Bitwise(Uchar a) //取反
{
if(a == 0)
{
a = 1;
}
else
a = 0;
}
/////32组电容器标号,接线方式和容量
void Cx_control0() // i值 0-31 手动控制
{
g_InitiativeFlag = 0 ; //进入手动控制界面后 都是被控 退出后重新竞争主机(新乡)
// g_CFlagTimeCnt = 0 ;
if(!kongflag)
{
g_MBHoldReg1[5] = 110;
kongflag = 1;
//Npage = 0; //确保进入手动控制界面的时间是从c01开始
init_Cmcontrol();
// initcc(); //初始化电容器容量,解决修改后不能更新的问题
Display_Mcontrol(g_Ccontrol);
}
CxcontrolKey();
}
void Cx_control1() // i值 1-64
{
if(!kongflag)
{
g_MBHoldReg1[5] = 111;
kongflag = 1;
init_Cmcontrol();
//G_mcontrol[1]=1;
Display_Mcontrol(2);
}
CxcontrolKey();
}
//////////////////
void CxcontrolKey() //手动控制按键扫描 手动投切
{
unsigned char tmp;
u8 i = 0;
tmp = g_keyValue; //键值
g_keyValue = 0;
//g_InitiativeFlag = 0 ;
//g_CFlagTimeCnt = 0 ;
Auto_manual = 1;
switch(tmp)
{
case KCR://实现电容投切
{
kongflag =0;
for(i=0;i<64;i++)
{
if((G_mcontrol[i+1] == 1)&&(capdevice[i].cctype!=0))//&&(g_warnFlag == 0)) //选中,可进行投退
{
if(capdevice[i].cstatus==0) {capdevice[i].cstatus=1;}
else{capdevice[i].cstatus=0;}
if((i+1) == g_CapSN1)
{
if(capdevice[i].cstatus==0){Drq1=1;Drt1=0;} //Drq1=1;Drt1=0;}//J_Cq1 =1;A1_C = 1;} //电容1切除
else
{
Drq1=0;Drt1=1;
j_flag=1;
if(g_RunID1==1){T_CASTD1 = 0;DISchargeD1 = 0;}
}
}else if((i+1) == g_CapSN2)
{
if(capdevice[i].cstatus==0)
{
Drq2=1;Drt2=0;//J_Cq3 =1;A2_C =1; //电容2切除
}
else
{
Drq2=0;Drt2=1;
j_flag2=1;//J_Cc3 = 1;A2_C =1;
if(g_RunID1==1){T_CASTD1 = 0;DISchargeD2 = 0;} //电容2投入
}
}
}
}
if(Host_Flag == 1)//主机
{
Struct_SendData();
UartSends(17);
}
}break;
case KESC://返回上级菜单
{
Npage = 0;
g_Ccontrol = 1;
LcmClear(0);
pMenu = pMenu -> parentMenuItem;
}break;
case KUP://实现菜单切换
{
kongflag = 0;
if(g_Ccontrol > 1) g_Ccontrol -- ;
else {g_Ccontrol = 64 ; LcmClear(0);}
if((g_Ccontrol)%12 == 0)//换页时清屏 0.6.12.18.24.30
LcmClear(0);
// pMenu = pMenu -> lastMenuItem;
Npage = (g_Ccontrol -1)/12;
}break;
case KDOWN://实现菜单切换
{
kongflag = 0;
if(g_Ccontrol < 64) g_Ccontrol ++ ;
else g_Ccontrol = 1 ;
if((g_Ccontrol -1 )%12 == 0)//换页时清屏 5.11.17.23.29
LcmClear(0);
// pMenu = pMenu -> nextMenuItem;
Npage = (g_Ccontrol -1)/12;
}break;
default:
break;
}
}
//zhangjian
u8 Warn_Tui_Gong = 1; //要退的共补的数量
//报警时的共补退函数
void Warn_CapJ_Tui()
{
u32 temp = 0x0fffffff;
u32 i = 0;
unsigned char need = 0;
unsigned char all[64] = {0};
unsigned char j = 0;
unsigned char k =0;
unsigned char last = 0;
Tou_Gong = 0;
Tou_Fen = 0;
for(i = 0;i<SystemPara[7];i++)
{
if((capdevice[SystemPara[6]+i].cstatus) != 0)
{
if((capdevice[SystemPara[6]+i].cvalue) <= temp)
{
temp = capdevice[SystemPara[6]+i].cvalue;
need = SystemPara[6]+i;
need++;
}
}
}
if(need != 0)
{
for(i = 0;i<SystemPara[7];i++)
{
if(capdevice[SystemPara[6]+i].cstatus != 0)
{
if(capdevice[SystemPara[6]+i].cvalue == capdevice[need-1].cvalue)
{
all[j] = SystemPara[6]+i; //如果有多个与所需电容量的电容器都取出来
j++;
}
}
}
}
Warn_Tui_Gong = j;
Tui_Gong = j;
if(j >= 1)
{
last = all[0];
for(k = 0;k<j;k++)
{
if(capdevice[all[k]].count < capdevice[last].count)
last = all[k]; //多个电容器容量相同的 比较投入次数 投入次数最少的一个
}
capdevice[last].cstatus = 0;
capdevice[last].count += 1;
}
}
//报警时的分补退函数
/*void Warn_CapX_Tui(u8 x)
{
u8 i = 0;
u32 temp = 0x0fffffff;
u8 need = 0;
u8 all[64] = {0};
u8 j = 0;
u8 k =0;
u8 last = 0;
u8 Nn = 0;
Tou_Gong = 0;
Tou_Fen = 0;
if(x == 1)
{
Nn = 0;
}
else if(x == 2)
{
Nn = 1;
}
else if(x == 3)
{
Nn = 2;
}
for(i = 0;i<(SystemPara[6]/3);i++)
{
if((capdevice[3*i+Nn].cstatus) != 0)
{
if((capdevice[3*i+Nn].cvalue) <= temp)
{
temp = capdevice[3*i+Nn].cvalue;
need = 3*i+Nn; //取得与小于无功功率且最小的电容器容量
need++;
}
}
}
if(need != 0)
{
for(i = 0;i<(SystemPara[6]/3);i++)
{
if(capdevice[3*i+Nn].cstatus != 0)
{
if(capdevice[3*i+Nn].cvalue == capdevice[need-1].cvalue)
{
all[j] = 3*i+Nn; //如果有多个与所需电容量的电容器都取出来
j++;
}
}
}
}
Tui_Fen = j;
if(j >= 1)
{
last = all[0];
for(k = 0;k<j;k++)
{
if(capdevice[all[k]].count < capdevice[last].count)
last = all[k]; //多个电容器容量相同的 比较投入次数 投入次数最少的一个
}
capdevice[last].cstatus = 0;
capdevice[last].count += 1;
}
}*/
//共补投退逻辑 用于混补
/*void CapJ_Controls() //共补逻辑
{
//共补逻辑(投)
if((g_Pfa < g_RunCOS*10)&&(g_Pfb < g_RunCOS*10)&&(g_Pfc < g_RunCOS*10)&&((Qaflag == 0)&&(Qbflag == 0)&&(Qcflag == 0)))
{
CapJT_Sub();
}
//共补逻辑(退)
if((Qaflag == 1)&&(Qbflag == 1)&&(Qcflag == 1))
{
CapJQ_Sub();
}
}*/
//纯共补的 共补投退逻辑
void CapJ_Controls_Chun() //共补逻辑
{
//共补逻辑(投)
if((g_Pf < g_RunCOS*10)&&(Qflag == 0))
{
CapJT_Chun();
}
//共补逻辑(退)
if(Qflag == 1)
{
CapJQ_Chun();
}
}
//分补投退逻辑
/*void CapX_Controls() //分补逻辑
{
//分补逻辑(投)
if((g_warnFlag == 0)&&(g_warnFlaga ==0)&&(g_warnFlagIa == 0))
{
if((g_Pfa < g_RunCOS*10)&&(Qaflag == 0))
{
CapXT_Sub(1);
}
}
if((g_warnFlag == 0)&&(g_warnFlagb ==0)&&(g_warnFlagIb == 0))
{
if((g_Pfb < g_RunCOS*10)&&(Qbflag == 0))
{
CapXT_Sub(2);
}
}
if((g_warnFlag == 0)&&(g_warnFlagc ==0)&&(g_warnFlagIc == 0))
{
if((g_Pfc < g_RunCOS*10)&&(Qcflag == 0))
{
CapXT_Sub(3);
}
}
//分补逻辑(退)
if((g_warnFlag == 0)&&(g_warnFlaga ==0)&&(g_warnFlagIa == 0))
{
if(Qaflag == 1)
CapXQ_Sub(1);
}
if((g_warnFlag == 0)&&(g_warnFlagb ==0)&&(g_warnFlagIb == 0))
{
if(Qbflag == 1)
CapXQ_Sub(2);
}
if((g_warnFlag == 0)&&(g_warnFlagc ==0)&&(g_warnFlagIc == 0))
{
if(Qcflag == 1)
CapXQ_Sub(3);
}
} */
//混补投退逻辑
/*void CapXJ_Controls() //共补分补混合
{
// unsigned char a = 0;
// unsigned char b = 0;
// unsigned char c = 0;
//共补逻辑
if((g_warnFlag == 0)&&(g_warnFlaga ==0)&&(g_warnFlagb == 0)&&(g_warnFlagc == 0)&&(g_warnFlagIa ==0)&&(g_warnFlagIb == 0)&&(g_warnFlagIc == 0))
CapJ_Controls();
//分补逻辑(投)
if(Tou_Gong == 0)
{
if((g_warnFlag == 0)&&(g_warnFlaga ==0)&&(g_warnFlagIa == 0))
{
if((g_Pfa < g_RunCOS*10)&&(Qaflag == 0))
{
CapXT_Sub(1);
}
}
if((g_warnFlag == 0)&&(g_warnFlagb ==0)&&(g_warnFlagIb == 0))
{
if((g_Pfb < g_RunCOS*10)&&(Qbflag == 0))
{
CapXT_Sub(2);
}
}
if((g_warnFlag == 0)&&(g_warnFlagc ==0)&&(g_warnFlagIc == 0))
{
if((g_Pfc < g_RunCOS*10)&&(Qcflag == 0))
{
CapXT_Sub(3);
}
}
}
//分补逻辑(退)
if(Tui_Gong == 0)
{
if((g_warnFlag == 0)&&(g_warnFlaga ==0)&&(g_warnFlagIa == 0))
{
if(Qaflag == 1)
CapXQ_Sub(1);
}
if((g_warnFlag == 0)&&(g_warnFlagb ==0)&&(g_warnFlagIb == 0))
{
if(Qbflag == 1)
CapXQ_Sub(2);
}
if((g_warnFlag == 0)&&(g_warnFlagc ==0)&&(g_warnFlagIc == 0))
{
if(Qcflag == 1)
CapXQ_Sub(3);
}
}
}*/
u32 Find_min(u32 Qa,u32 Qb,u32 Qc)
{
u32 min = 0;
min = Qa;
if(Qb<min)
min = Qb;
if(Qc<min)
min = Qc;
return (min);
}
u32 Find_max(u32 Qa,u32 Qb,u32 Qc)
{
u32 max = 0;
max = Qa;
if(Qb > max)
max = Qb;
if(Qc > max)
max = Qc;
return (max);
}
//共补投函数 用于混补
/*void CapJT_Sub() //共补电容器投 子函数
{
unsigned char i = 0;
u32 temp = 0x0fffffff;
u32 g_Qsn = 0;
u8 need = 0;
u8 all[64] = {0};
u8 j = 0;
u8 k =0;
u8 last = 0;
Tui_Gong = 0;
Tui_Fen = 0;
g_Qsn = Find_min(g_Qa,g_Qb,g_Qc)/100;
for(i = 0;i<SystemPara[7];i++)
{
if((capdevice[SystemPara[6]+i].cvalue != 0)&&(capdevice[SystemPara[6]+i].cstatus == 0))
{
if((g_Qsn >= g_RunQC*capdevice[SystemPara[6]+i].cvalue/3)&&((g_Qsn - g_RunQC*(capdevice[SystemPara[6]+i].cvalue/3))<0x0fffffff))
{
if((g_Qsn - g_RunQC*(capdevice[SystemPara[6]+i].cvalue/3)) <= temp)
{
temp = g_Qsn - g_RunQC*(capdevice[SystemPara[6]+i].cvalue/3);
need = SystemPara[6]+i;
//取得与小于无功功率且最接近的电容器容量
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
全部资料下载地址:
http://www.51hei.com/bbs/dpj-109977-1.html
作者:
zeze10000
时间:
2018-12-7 10:25
最近正在为这个菜单烦恼
作者:
lvshili
时间:
2019-6-6 10:40
楼主 你也是做无功补偿的嘛
作者:
jxchen
时间:
2019-6-6 23:32
感謝~~~~~~~~~~~~~~~~
作者:
曹小宁
时间:
2019-6-24 10:57
大佬能给一下menu.h这个头文件吗?pdf中描述的结构体和程序里的不一样
作者:
小分子
时间:
2021-2-21 20:39
这个太牛了。
作者:
rayin
时间:
2021-2-22 08:38
好帖收藏下来,仔细拜读一下.
作者:
renfuquan
时间:
2021-2-25 23:01
谢谢分享,好好学习一下。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1