找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8896|回复: 7
打印 上一主题 下一主题
收起左侧

傻孩子的单片机C语言LCD菜单引擎源码与详细教程

  [复制链接]
跳转到指定楼层
楼主
ID:285461 发表于 2018-3-22 00:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  自己用到的点阵液晶资料的一些分享:

菜单界面的实现方法
建议在看下面内容之前复习一下C语言的如下内容
1、结构体
2、指向函数的指针
3、结构体链表
4、傻孩子的菜单引擎

当前层节点数,即每层菜单最多能显示的条目数.
目的:
1、在菜单读取前先读取这个菜单总共拥有的项目数,防止越界。
在菜单读取过程中将会有一个计数变量存储菜单移动。所以需要这个变量来确定移动的上界;
2、可以方便的实现菜单的滚动。例如:“文件”菜单依次下有:
“打开”、“保存”、“打印”、“退出”这4个子项,如果计数存储达到上界“退出” 即(MenuCount == 4)时再继续向下一级翻页则会回到“打开”。

指向菜单标题字符串的指针
目的:
指向菜单标题的字符串,指向当选中该级菜单后所要显
示的字符串。

指向当前状态应该执行功能函数的指针
目的:
说明如果选中该级菜单应当执行什么程序,这个指针指向该项所要实现功能的函数。例如:菜单项为“播放”,则该函数指向Play();

指向当前菜单的下级菜单
目的:
指向结构体指针,用于存储下一级菜单,在后面的链表中详细
说明。





所有资料51hei提供下载(pdf+源码):
http://www.51hei.com/bbs/dpj-109977-1.html


单片机源程序如下:
  1. #include <stdio.h>
  2. #include "drv_lcd.h"
  3. #include "menu.h"


  4. MENU MainMenu[3] =
  5. {
  6.         {0,"AUTO",MENU_AUTO,&MainMenu[0],&AUTOMenu[0],&MainMenu[2],&MainMenu[1]},              //主菜单AUTOMenu[0]
  7.         {1,"SETUP",MENU_SETUP,&MainMenu[0],&SETUPKey[0],&MainMenu[0],&MainMenu[2]},            //主菜单
  8.         {2,"HAND",MENU_HAND,&MainMenu[0],&Manualcontrol[0],&MainMenu[1],&MainMenu[0]},  //主菜单
  9. };

  10. MENU AUTOMenu[6] =                                                                               //??????
  11. {
  12.         {0,"NULL",MENU_AUTOMenu1,&MainMenu[0],NULL,&AUTOMenu[5],&AUTOMenu[1]},
  13.         {1,"NULL",MENU_AUTOMenu2,&MainMenu[0],NULL,&AUTOMenu[0],&AUTOMenu[2]},
  14.         {2,"NULL",MENU_AUTOMenu3,&MainMenu[0],NULL,&AUTOMenu[1],&AUTOMenu[3]},
  15.         {3,"NULL",MENU_AUTOMenu4,&MainMenu[0],NULL,&AUTOMenu[2],&AUTOMenu[4]},
  16.         {4,"NULL",MENU_AUTOMenu5,&MainMenu[0],NULL,&AUTOMenu[3],&AUTOMenu[5]},
  17.         {5,"NULL",MENU_AUTOMenu6,&MainMenu[0],NULL,&AUTOMenu[4],&AUTOMenu[0]}        
  18. };
  19. MENU SELFCONTROL =
  20. {
  21.         0,"MIMA",Autonetworking,NULL,NULL,NULL,NULL,        //密码界面
  22. };
  23. MENU ZuWang_Succ = {0,"succ",MENU_Succ,&ZuWang_Succ,&ZuWang_Succ,&ZuWang_Succ,&ZuWang_Succ};//jjk 4.29
  24. MENU Sure_Noyes[2] =
  25. {
  26.         {0,"no",MENU_NO,&SETUPKey[2],&SETUPKey[2],&Sure_Noyes[1],&Sure_Noyes[1]},
  27.         {111,"yes",MENU_YES,&SETUPKey[2],&SELFCONTROL,&Sure_Noyes[0],&Sure_Noyes[0]},
  28. };

  29. MENU SETUPKey[5] =
  30. {
  31.         {0,"MIMA",SETUP_Key1,&MainMenu[1],&AD,NULL,&SETUPKey[1]},                                                //密码界面
  32.         {1,"LD",SETUP_Key2,&MainMenu[1],NULL,NULL,&SETUPMenu[0]},                                                //参数同步界面
  33.         {2,"LD",Localnet,&SETUPMenu[2],&Cap_configura[0],&SETUPKey[3],&SETUPKey[3]},        //参数同步界面
  34.         {3,"LD",Autonet,&SETUPMenu[2],&Sure_Noyes[0],&SETUPKey[2],&SETUPKey[2]},                //参数同步界面
  35.         {4,"TJDQ",T_JDQ,&SETUPKey[0],NULL,NULL,NULL},                                                                        //继电器动作时间界面
  36. };

  37. MENU SETUPMenu[3] =                                                                              //设置参数菜单
  38. {
  39.         {0,"D",RUN_key,&MainMenu[1],&Oppt[0],&SETUPMenu[2],&SETUPMenu[1]},                                //运行参数
  40.         {1,"D",Protect_SETUP,&MainMenu[1],&Protect_p[0],&SETUPMenu[0],&SETUPMenu[2]},        //保护参数
  41.         {2,"D",DR_SETUP,&MainMenu[1],&SETUPKey[2],&SETUPMenu[1],&SETUPMenu[0]},                //电容配置
  42. //        {2,"D",DR_SETUP,&MainMenu[1],&Cap_configura[0],&SETUPMenu[1],&SETUPMenu[0]}                //电容配置
  43. };

  44. MENU AD=
  45. {
  46.         0,"AD",G_ADUa,NULL,NULL,NULL,NULL,
  47. };

  48. MENU Oppt[15]=  //运行参数 菜单 Operating parameters
  49. {
  50.         {0,"A",Addressset,&Oppt[13],&Oppt[3],NULL,&Oppt[1]},
  51.                 {1,"A",G_ID1,NULL,NULL,NULL,&Oppt[2]},
  52.                 {2,"A",G_ID2,NULL,NULL,NULL,&Oppt[3]},
  53.         {3,"A",Competenceset,&Oppt[0],&Oppt[6],NULL,&Oppt[4]},
  54.                 {4,"A",G_pw1,NULL,NULL,NULL,&Oppt[5]},
  55.                 {5,"A",G_pw2,NULL,NULL,NULL,&Oppt[6]},        
  56.         {6,"A",CTset,&Oppt[3],&Oppt[9],NULL,&Oppt[7]},
  57.                 {7,"A",G_ct1,NULL,NULL,NULL,&Oppt[8]},
  58.                 {8,"A",G_ct2,NULL,NULL,NULL,&Oppt[9]},        
  59.         {9,"A",COSset,&Oppt[6],&Oppt[11],NULL,&Oppt[10]},
  60.                 {10,"A",G_cos,NULL,NULL,NULL,&Oppt[11]},
  61.         {11,"A",QCset,&Oppt[9],&Oppt[13],NULL,&Oppt[12]},
  62.                 {12,"A",G_qc,NULL,NULL,NULL,&Oppt[13]},
  63.         {13,"A",D1set,&Oppt[11],&Oppt[0],NULL,&Oppt[14]},
  64.                 {14,"A",G_d1,NULL,NULL,NULL,&Oppt[0]},               
  65. };
  66. MENU Protect_p[12]=  //保护参数 菜单  parameters
  67. {
  68.         {0,"B",G_Uh,&Protect_p[10],&Protect_p[2],NULL,&Protect_p[1]},
  69.                 {1,"B",G_ProUH,NULL,NULL,NULL,&Protect_p[2]},
  70.         {2,"B",G_Ul,&Protect_p[0],&Protect_p[4],NULL,&Protect_p[3]},
  71.                 {3,"B",G_ProUl,NULL,NULL,NULL,&Protect_p[4]},
  72.         {4,"B",G_THDu,&Protect_p[2],&Protect_p[6],NULL,&Protect_p[5]},
  73.                 {5,"B",G_ProTHDu,NULL,NULL,NULL,&Protect_p[6]},        
  74.         {6,"B",G_THDi,&Protect_p[4],&Protect_p[8],NULL,&Protect_p[7]},
  75.                 {7,"B",G_ProTHDi,NULL,NULL,NULL,&Protect_p[8]},
  76.         {8,"B",G_D2,&Protect_p[6],&Protect_p[10],NULL,&Protect_p[9]},        
  77.                 {9,"B",G_ProD2,NULL,NULL,NULL,&Protect_p[10]},
  78.         {10,"B",G_TP,&Protect_p[8],&Protect_p[0],NULL,&Protect_p[11]},
  79.                 {11,"B",G_ProTP,NULL,NULL,NULL,&Protect_p[0]},               
  80. };
  81. MENU Cap_configura[12]=          //电容配置 菜单  
  82. {
  83.         {0,"C",G_SN,&Cap_configura[9],&Cap_configura[3],NULL,&Cap_configura[1]},
  84.                 {1,"C",G_CapSN1,NULL,NULL,NULL,&Cap_configura[2]},
  85.                 {2,"C",G_CapSN2,NULL,NULL,NULL,&Cap_configura[3]},
  86.         {3,"C",G_VE,&Cap_configura[0],&Cap_configura[6],NULL,&Cap_configura[4]},
  87.                 {4,"C",G_CapVE1,NULL,NULL,NULL,&Cap_configura[5]},
  88.                 {5,"C",G_CapVE2,NULL,NULL,NULL,&Cap_configura[6]},        
  89.         {6,"C",G_Ih,&Cap_configura[3],&Cap_configura[9],NULL,&Cap_configura[7]},
  90.                 {7,"C",G_CapIH1,NULL,NULL,NULL,&Cap_configura[8]},
  91.                 {8,"C",G_CapIH2,NULL,NULL,NULL,&Cap_configura[9]},        
  92.         {9,"C",G_Il,&Cap_configura[6],&Cap_configura[0],NULL,&Cap_configura[10]},
  93.                 {10,"C",G_CapIL1,NULL,NULL,NULL,&Cap_configura[11]},
  94.                 {11,"C",G_CapIL2,NULL,NULL,NULL,&Cap_configura[0]},
  95. };
  96. MENU Manualcontrol[2] =
  97. {
  98.         {0,"E",Cx_control0,&MainMenu[2],NULL,&Manualcontrol[1],&Manualcontrol[1]},
  99.         {1,"E",Cx_control1,&MainMenu[2],NULL,&Manualcontrol[0],&Manualcontrol[0]},        
  100. };

  101. MENU *pMenu = &MainMenu[0];                     //指向当前菜单的指针
  102. //2015.3.14
  103. void MENU_AUTO(void)                        //自动运行
  104. {
  105.         g_MBHoldReg1[5] = 1;
  106.         MENU_MainSub(1,0,0);
  107.         MENU_MainKey();        
  108. }
  109. void MENU_SETUP()                        //参数配置
  110. {        
  111.         g_MBHoldReg1[5] = 2;
  112.         MENU_MainSub(0,1,0);        
  113.         MENU_MainKey();        
  114. }
  115. void MENU_HAND()                        //手动控制
  116. {
  117.         g_MBHoldReg1[5] = 3;
  118.         MENU_MainSub(0,0,1);
  119.         MENU_MainKey();        
  120. }
  121. void lian_fen()
  122. {
  123.         unsigned char *p;
  124.     if(g_communicate)
  125.     {
  126.             p = (pstr) "联";
  127.             Dis_String(3,0,p,0);   
  128.     }else
  129.     {
  130.             p = (pstr) "分";
  131.             Dis_String(3,0,p,0);  
  132.     }
  133. }
  134. void MENU_MainSub(u8 first,u8 second,u8 third)   //主菜单
  135. {            
  136.     u8 *p;
  137.     lian_fen();
  138.     p = (pstr) "自动运行";
  139.     Dis_String(42,1,p,first);
  140.     p = (pstr) "参数配置";
  141.     Dis_String(42,3,p,second);
  142.     p = (pstr)"手动控制";
  143.     Dis_String(42,5,p,third);   
  144. }
  145. void MENU_MainKey()                         //主菜单按键扫描
  146. {
  147.         u8 tmp = 0;
  148.         tmp = g_keyValue;                                           //键值        
  149.         g_keyValue = 0;
  150.         switch(tmp)
  151.         {
  152.                 case KCR:
  153.                 {
  154.                                         kongflag =0;
  155.                                         LcmClear(0);
  156.                                                 //zhangjian
  157.                                         if(strcmp(pMenu -> string,"AUTO")==0)
  158.                                                 Auto_manual = 0;
  159.                                         //zhangjian
  160.                                         pMenu = pMenu -> childrenMenuItem;        
  161.                 }break;
  162.                 case KESC:{
  163.                
  164.                                         //LcmClear(0);
  165.                                         pMenu = &MainMenu[0];
  166.                 }break;
  167.                 case KUP:
  168.                 {
  169.                                         pMenu = pMenu -> lastMenuItem;
  170.                 }break;
  171.                 case KDOWN:
  172.                 {
  173.                                         pMenu = pMenu -> nextMenuItem;
  174.                 }break;
  175.                 default:
  176.                 break;
  177.         }        
  178. }
  179. //  //
  180. void Display_C()                                        //显示电容标号及是否投退  反显表示投入  此函数有共补、分补之分
  181. {        
  182.         unsigned char i=0;
  183.         for(i=0;i<6;i++)
  184.         {
  185.                 Display_charLocate(2+i,6,HZTT[i+6],0);
  186.         }
  187.         if(g_CScratch!=        g_InitiativeFlag)
  188.         {
  189.                 g_CScratch = g_InitiativeFlag;
  190.                 LcmClear_xy(6,7,0,128);
  191.         }
  192.         if(g_InitiativeFlag==1)                        //主控模式
  193.         {               
  194.                         for(i=0;i<8;i++)
  195.                         {
  196.                                 LcmPutNum_2(8+15*i,6,g_cx,capdevice[g_cx-1].cstatus);
  197.                                 LcmPutNum_2(8+15*i,7,g_cx+8,capdevice[g_cx+7].cstatus);
  198.                                 g_cx++;
  199.                                 if(g_cx==64) break;        
  200.                         }
  201.         }else
  202.         {
  203.                 Uchar p;
  204.                 p = 'C';
  205.                 LcmPutChar_8(15,6,p,capdevice[g_CapSN1-1].cstatus);
  206.                 LcmPutChar_8(45,6,p,capdevice[g_CapSN2-1].cstatus);
  207.                 LcmPutNum_2(21,6,g_CapSN1,capdevice[g_CapSN1-1].cstatus);
  208.                 LcmPutNum_2(51,6,g_CapSN2,capdevice[g_CapSN2-1].cstatus);        
  209.                
  210.                 LcmClear_xy(7,8,0,128);
  211.         }
  212. }   
  213. void MENU_AUTOMenu1()    //第一屏 功率因数、电压电流、电容器状态
  214. {
  215.         u8 *p;
  216.         unsigned char i;
  217.         g_cx = 1;
  218.         g_MBHoldReg1[5] = 11;
  219.         if(!kongflag)
  220.         {
  221.                 kongflag = 1;
  222.                 p = (pstr)"COS";
  223.                 LcmPutStr_8(15,0,p,0);
  224.                 for(i=0;i<6;i++)
  225.                 {
  226.                         Display_charLocate(33+i,0,HZTT[i],0);
  227.                 }
  228.                 p = (pstr)"VOLT(V)";
  229.                 LcmPutStr_8(15,2,p,0);
  230.                 p = (pstr)"CURR(A)";
  231.                 LcmPutStr_8(15,4,p,0);
  232.         //zhangjian
  233.                 if(Qflag == 1)
  234.                         p = (pstr)"-";
  235.                 else
  236.                         p = (pstr)" ";
  237.                 LcmPutStr_8(69,0,p,0);
  238.                 LcmPutNum_4(75,0,g_Pf,0);        //??g_RunCOS

  239.           LcmPutNum_40(75,2,g_Uca,g_warnFlagc);
  240.                 LcmPutNum_40(75,4,g_Ib/10.0,g_warnFlagIb);
  241.                 Display_C();
  242.         }               
  243.         MENU_AUTOKey();
  244. }
  245. //zhangjian20160921
  246. void MENU_AUTOMenu2()       //第二屏 有功功率、无功功率、频率
  247. {
  248.         unsigned char *p;
  249. //        unsigned char i;        
  250.         g_cx = 17;
  251.         g_MBHoldReg1[5] = 12;
  252.         if(!kongflag)
  253.         {
  254.                 kongflag = 1;
  255.                 p = (pstr)"P(KW)";
  256.                 LcmPutStr_8(15,0,p,0);
  257.                 p = (pstr)"Q(Kvar)";
  258.                 LcmPutStr_8(15,2,p,0);
  259.                 p = (pstr)"f(HZ)";
  260.                 LcmPutStr_8(15,4,p,0);
  261.                 LcmPutNum_40(75,0,g_P/1000.0,0);
  262.                 LcmPutNum_40(75,2,g_Q/1000.0,0);
  263.                 LcmPutNum_40(75,4,g_f,0);
  264.                 Display_C();        
  265.         }        //数据        
  266.         MENU_AUTOKey();
  267. }
  268. //zhangjian20160921
  269. void MENU_AUTOMenu3()                //第三屏 电容器电流、温度
  270. {
  271.         unsigned char *p;
  272.         unsigned char i;
  273.         unsigned int Display_T;
  274.         Display_T = fabs(g_Temperature1);
  275.         g_cx = 33;
  276.         g_MBHoldReg1[5] = 13;
  277.         if(!kongflag)
  278.         {        
  279.                 kongflag = 1;               
  280.                 p = (pstr)"C(A)";
  281.                 LcmPutStr_8(30,0,p,0);
  282.                 for(i=0;i<28;i++)
  283.                 {
  284.                         Display_charLocate(75+i,0,T_1[i],0);        //
  285.                 }
  286.                 p = (pstr)"C1";
  287.                 LcmPutStr_8(15,2,p,0);
  288.                 p = (pstr)"C2";
  289.                 LcmPutStr_8(15,4,p,0);
  290.                 p = (pstr)"___";
  291.                 LcmPutStr_8(35,2,p,0);                                // C1值        
  292.                 LcmPutNum_40(75,2,Display_T,g_warnFlag);                 //温度
  293.                 LcmPutStr_8(35,4,p,0);                                // C2值
  294.                 Display_C();                                                //显示电容标示
  295.                 if(g_Temperature1 < 0)
  296.                 {
  297.                         p = (pstr)"-";
  298.                         LcmPutStr_8(67,2,p,0);
  299.                 }
  300.         }//数据

  301.         MENU_AUTOKey();
  302. }
  303. //zhangjian20160921
  304. void MENU_AUTOMenu4()                //第四屏 电压畸变率、电流畸变率
  305. {
  306.         unsigned char *p;
  307.         g_cx = 49;
  308.         g_MBHoldReg1[5] = 14;
  309.         if(!kongflag)
  310.         {        
  311.                 kongflag = 1;               
  312.                 p = (pstr)"THDu(%)";
  313.                 LcmPutStr_8(15,1,p,0);
  314.                 p = (pstr)"THDi(%)";
  315.                 LcmPutStr_8(15,3,p,0);
  316.                
  317.                 LcmPutNum_30(75,1,g_cTHDu,g_warnFlagTHUc);//g_THDu  g_warnFlagTHUc == 0)&&(g_warnFlagTHIb
  318.                 LcmPutNum_30(75,3,g_bTHDi,g_warnFlagTHIb);//g_THDi
  319.                 Display_C();
  320.         }        
  321.         MENU_AUTOKey();
  322. }
  323. void MENU_AUTOMenu5()                //第五屏 电压、电流3、5、7、9、11次谐波
  324. {
  325.         unsigned char *p;
  326.         unsigned char i=0;
  327.         g_MBHoldReg1[5] = 15;
  328.         if(!kongflag)
  329.         {        
  330.                 kongflag = 1;
  331.                 p = (pstr)"HRUn(%)";
  332.                 LcmPutStr_8(25,1,p,0);
  333.                 p = (pstr)"HRIn(%)";
  334.                 LcmPutStr_8(75,1,p,0);
  335.                 for(i=0;i<5;i++)//??
  336.                 {               
  337.                         LcmPutNum_12(5,2+i,3+2*i,0);                           //        3/5/7/9/11
  338.                         LcmPutNum_30(30,2+i,g_cHRUn[i],0);           //HRUn
  339.                         LcmPutNum_30(80,2+i,g_bHRIn[i],0);           //HRUi
  340.                 }        
  341.         }
  342.         MENU_AUTOKey();
  343. }
  344. void MENU_AUTOMenu6()                //第六屏 电压、电流13、15、17、19、21次谐波
  345. {
  346.         unsigned char *p;
  347.         unsigned char i=0;
  348.         g_MBHoldReg1[5] = 16;
  349.         if(!kongflag)
  350.         {        
  351.                 kongflag = 1;
  352.                 p = (pstr)"HRUn(%)";
  353.                 LcmPutStr_8(25,1,p,0);
  354.                 p = (pstr)"HRIn(%)";
  355.                 LcmPutStr_8(75,1,p,0);
  356.                 for(i=0;i<5;i++)        //??
  357.                 {
  358.                         LcmPutNum_12(5,2+i,13+2*i,0);           //        13/15/17/19/21
  359.                         LcmPutNum_30(30,2+i,g_cHRUn[5+i],0);           //HRUn
  360.                         LcmPutNum_30(80,2+i,g_bHRIn[5+i],0);           //HRUi
  361.                 }        
  362.         }
  363.         MENU_AUTOKey();
  364. }
  365. void MENU_AUTOMenu7()                //第七屏 3/5/7/9/11电流谐波率
  366. {
  367.         unsigned char *p;
  368.         unsigned char i=0;
  369.         g_MBHoldReg1[5] = 17;
  370.         if(!kongflag)
  371.         {        
  372.                 kongflag = 1;
  373.                 p = (pstr)"HRIn(%)";
  374.                 LcmPutStr_8(5,0,p,0);
  375.                 p = (pstr)"A";
  376.                 LcmPutStr_8(40,1,p,0);
  377.                 p = (pstr)"B";
  378.                 LcmPutStr_8(70,1,p,0);
  379.                 p = (pstr)"C";
  380.                 LcmPutStr_8(100,1,p,0);
  381.                
  382.         }
  383.         for(i=0;i<5;i++)        //数据
  384.                 {
  385.                         LcmPutNum_12(5,2+i,3+2*i,0);           //3/5/7/9/11电流谐波率
  386.                         LcmPutNum_30(30,2+i,g_aHRIn[i],0);           //HRUn
  387.                         LcmPutNum_30(64,2+i,g_bHRIn[i],0);           //HRUi
  388.                         LcmPutNum_30(96,2+i,g_cHRIn[i],0);           //HRUi
  389.                 }        
  390.         MENU_AUTOKey();
  391. }
  392. void MENU_AUTOMenu8()                 //第八屏        13/15/17/19/21电流谐波率
  393. {
  394.         unsigned char *p;
  395.         unsigned char i=0;
  396.         g_MBHoldReg1[5] = 18;
  397.         if(!kongflag)
  398.         {        
  399.                 kongflag = 1;
  400.                 p = (pstr)"HRIn(%)";
  401.                 LcmPutStr_8(5,0,p,0);
  402.                 p = (pstr)"A";
  403.                 LcmPutStr_8(40,1,p,0);
  404.                 p = (pstr)"B";
  405.                 LcmPutStr_8(70,1,p,0);
  406.                 p = (pstr)"C";
  407.                 LcmPutStr_8(100,1,p,0);
  408.                
  409.         }
  410.         for(i=0;i<5;i++)        //数据
  411.                 {
  412.                         LcmPutNum_12(5,2+i,13+2*i,0);           //        13/15/17/19/21电流谐波率
  413.                         LcmPutNum_30(30,2+i,g_aHRIn[5+i],0);           //HRUn-A
  414.                         LcmPutNum_30(64,2+i,g_bHRIn[5+i],0);           //HRUi-B
  415.                         LcmPutNum_30(96,2+i,g_cHRIn[5+i],0);           //HRUi-C
  416.                 }        
  417.         MENU_AUTOKey();
  418. }
  419. void MENU_SETKey()                         //按键扫描
  420. {
  421.         unsigned char tmp;
  422.         tmp = g_keyValue;                                           //键值
  423.         g_keyValue = 0;
  424.         switch(tmp)
  425.         {               
  426.                 case KESC:
  427.                 {
  428.                                 kongflag = 0;
  429.                                 LcmClear(0);
  430.                                 pMenu = pMenu -> parentMenuItem;
  431.                 }break;
  432.                 case KUP:
  433.                 {
  434.                                 kongflag = 0;
  435.                                 LcmClear(0);
  436.                                 pMenu = pMenu -> lastMenuItem;
  437.                 }break;
  438.                 case KDOWN:
  439.                 {
  440.                                 kongflag = 0;
  441.                                 LcmClear(0);
  442.                                 pMenu = pMenu -> nextMenuItem;
  443.                 }break;
  444.                 case KCR:
  445.                 {                        
  446.                         {
  447.                                 kongflag = 0;
  448.                                 LcmClear(0);
  449.                                 if(strcmp(pMenu -> string,"yes")== 0)  // sjf003  在此发信号,自动组网,试验
  450.                                 {
  451.                                         if(KZ_Flag == 0)//lmm
  452.                                         {        
  453.                                                 AutoNet_Key();
  454.                                                 pMenu = pMenu -> childrenMenuItem;
  455.                                         }
  456.                                         else
  457.                                                 pMenu = pMenu -> nextMenuItem;                                                                        
  458.                                 }
  459.                                 else
  460.                                 pMenu = pMenu -> childrenMenuItem;                                
  461.                         }                                
  462.                 }break;
  463.                 default:
  464.                 break;
  465.         }
  466. }

  467. void init_run()
  468. {
  469.         unsigned char i=0;
  470.         for(i=0;i<15;i++)
  471.                 Runset[i]=0;
  472. }

  473. void init_AD()
  474. {
  475.         unsigned char i=0;
  476.         for(i=0;i<8;i++)
  477.                 ADset[i]=0;
  478. }

  479. void MENU_AUTOKey()                         //主菜单按键扫描
  480. {
  481.         u8 tmp;
  482.         Auto_manual=0;
  483.         tmp = g_keyValue;                                           //键值
  484.         g_keyValue = 0;
  485.         switch(tmp)
  486.         {               
  487.                 case KESC:
  488.                 {
  489.                                 kongflag = 0;
  490.                                 LcmClear(0);
  491.                                 pMenu = pMenu -> parentMenuItem;
  492.                 }break;
  493.                 case KUP:
  494.                 {
  495.                                 kongflag = 0;
  496.                                 LcmClear(0);
  497.                                 pMenu = pMenu -> lastMenuItem;
  498.                 }break;
  499.                 case KDOWN:
  500.                 {
  501.                                 kongflag = 0;
  502.                                 LcmClear(0);
  503.                                 pMenu = pMenu -> nextMenuItem;
  504.                 }break;
  505.                 case KCR:
  506.                 {
  507.                                 kongflag = 0;
  508.                                 if(strcmp(pMenu -> string,"D")== 0)
  509.                                 {
  510.                                         LcmClear(0);
  511.                                         pMenu = pMenu -> childrenMenuItem;
  512.                                 }                                
  513.                 }break;
  514.                 default:
  515.                 break;
  516.         }
  517. }
  518. void MENU_tiaokey()        //主菜单按键扫描
  519. {
  520.         unsigned char tmp;
  521.         tmp = g_keyValue;                //键值
  522.         g_keyValue = 0;
  523.         switch(tmp)
  524.         {                        
  525.                 case KUP:
  526.                 {
  527.                                 if(strcmp(pMenu -> string,"MIMA")== 0)//密码设置
  528.                                 {
  529.                                         if(Pass_flag0)
  530.                                                 g_SetPassword2++;
  531.                                         else
  532.                                                 g_SetPassword1++;
  533.                                         if(g_SetPassword2==100)
  534.                                                 g_SetPassword2=0;
  535.                                         if(g_SetPassword1==100)
  536.                                                 g_SetPassword1=0;
  537.                                 }
  538.                                 if(strcmp(pMenu -> string,"LD")== 0)
  539.                                 {
  540.                                         if(g_communicate==1) g_communicate=0;
  541.                                         else g_communicate=1;
  542.                                 }                                                                        
  543.                 }break;
  544.                 case KDOWN:
  545.                 {
  546.                                 if(strcmp(pMenu -> string,"MIMA")== 0)
  547.                                 {
  548.                                        
  549.                                         if(Pass_flag0)
  550.                                         {
  551.                                                 if(g_SetPassword2==0)
  552.                                                         g_SetPassword2=99;
  553.                                                 else
  554.                                                         g_SetPassword2--;        
  555.                                         }                                         
  556.                                         else
  557.                                         {
  558.                                                 if(g_SetPassword1==0)
  559.                                                         g_SetPassword1=99;
  560.                                                 else
  561.                                                         g_SetPassword1--;        
  562.                                         }
  563.                                 }
  564.                                 if(strcmp(pMenu -> string,"LD")== 0)
  565.                                 {
  566.                                         if(g_communicate==1) g_communicate=0;
  567.                                         else g_communicate=1;
  568.                                 }
  569.                 }break;
  570.                 case KCR:
  571.                 {
  572.                                 kongflag=0;
  573.                                 if(strcmp(pMenu -> string,"LD")== 0)
  574.                                 {
  575.                                         LcmClear(0);
  576.                                         pMenu = pMenu -> nextMenuItem;
  577.                                 }
  578.                                 if(((g_SetPassword1==1)&&(g_SetPassword2==1))&&((strcmp(pMenu -> string,"MIMA")== 0)))
  579.                                 {
  580.                                         LcmClear(0);
  581.                                         g_SetPassword1 = 0;
  582.                                         g_SetPassword2 = 0;
  583.                                         ADset_Subscript=0;
  584.                                         init_AD();
  585.                                         ADset[ADset_Subscript]=1;
  586.                                         pMenu = pMenu -> childrenMenuItem;                                       
  587.                                 }
  588.                                 if(((g_SetPassword1==2)&&(g_SetPassword2==2))&&((strcmp(pMenu -> string,"MIMA")== 0)))
  589.                                 {
  590.                                         LcmClear(0);
  591.                                         g_SetPassword1 = 0;
  592.                                         g_SetPassword2 = 0;
  593.                                         pMenu = &SETUPKey[4];                                       
  594.                                 }



  595.                                 if((((g_SetPassword1==g_RunPW1)&&(g_SetPassword2==g_RunPW2))||((g_SetPassword1==1)&&(g_SetPassword2==10)))&&((strcmp(pMenu -> string,"MIMA")== 0)))
  596.                                 {
  597.                                         LcmClear(0);
  598.                                         g_SetPassword1 = 0;
  599.                                         g_SetPassword2 = 0;
  600.                                         pMenu = pMenu -> nextMenuItem;                                       
  601.                                 }else
  602.                                 {
  603.                                         if(strcmp(pMenu -> string,"MIMA")== 0)
  604.                                         {
  605.                                                 if(Pass_flag0)
  606.                                                         {Pass_flag0=0;Pass_flag1 = 1;Pass_flag2 = 0;}
  607.                                                 else
  608.                                                         {Pass_flag0=1;Pass_flag1 = 0;Pass_flag2 = 1;}
  609.                                                 break;
  610.                                         }
  611.                                 }               
  612.                 }break;
  613.                 case KESC:
  614.                 {
  615.                                 LcmClear(0);
  616.                                 pMenu = pMenu -> parentMenuItem;
  617.                 }        
  618.                 default:
  619.                 break;
  620.         }
  621. }
  622. void T_JDQ()
  623. {
  624.         LcmPutNum_4(10,2,RelayA1on_j*16,0);
  625.         LcmPutNum_4(10,3,RelayC1on_j*16,0);
  626.         LcmPutNum_4(10,4,RelayA2on_j*16,0);
  627.         LcmPutNum_4(10,5,RelayC2on_j*16,0);
  628.         LcmPutNum_4(60,2,RelayA1off_j*16,0);
  629.         LcmPutNum_4(60,3,RelayC1off_j*16,0);
  630.         LcmPutNum_4(60,4,RelayA2off_j*16,0);
  631.         LcmPutNum_4(60,5,RelayC2off_j*16,0);
  632.          MENU_tiaokey();
  633. }
  634. void SETUP_Key1()                //参数设置 密码
  635. {
  636.         unsigned char *p;
  637. //        if(!kongflag)
  638.         {        
  639.                 g_MBHoldReg1[5] = 25;
  640. //                kongflag = 1;
  641.                 lian_fen();
  642.             p = (pstr) "密空空码";
  643.             Dis_String(40,1,p,0);
  644.          }

  645.         p = (pstr)"Num";
  646.         LcmPutStr_8(10,7,p,0);
  647.         p = (pstr)":";
  648.         LcmPutStr_8(28,7,p,0);
  649.         LcmPutNum_2(34,7,20,0);
  650.     LcmPutNum_2(46,7,g_Year,0);
  651.         LcmPutNum_2(58,7,g_Month,0);
  652.         LcmPutNum_2(70,7,g_Code1,0);
  653.            LcmPutNum_2(82,7,g_Code2,0);

  654.         LcmPutNum_2(48,4,g_SetPassword1,Pass_flag1);
  655.     LcmPutNum_2(60,4,g_SetPassword2,Pass_flag2);
  656.     p = (pstr)"VN";
  657.         LcmPutStr_8(96,7,p,0);
  658.         LcmPutNum_2(109,7,40,0);        //2016.8.22        
  659.          MENU_tiaokey();
  660. }

  661. void SETUP_AD()
  662. {
  663.                 unsigned char *p;  
  664.     lian_fen();
  665.     p = (pstr) "测量参数";
  666.     Dis_String(42,2,p,0);
  667.         MENU_SETKey();
  668. }

  669. void Net(u8 first,u8 second)   //组网主菜单
  670. {   
  671.                 unsigned char *p;  
  672.     lian_fen();   
  673.     p = (pstr) "手动配置";
  674.     Dis_String(42,2,p,first);
  675.     p = (pstr) "自动组网";
  676.     Dis_String(42,4,p,second);
  677. }

  678. void Autonet()                //自动组网界面
  679. {
  680.         Net(0,1);
  681.         g_MBHoldReg1[5] = 23;
  682.         MENU_SETKey();
  683. }

  684. void Localnet()                //本地组网界面
  685. {
  686.         Net(1,0);
  687.         g_MBHoldReg1[5] = 23;
  688.         MENU_SETKey();
  689. }
  690. ///////////////////////////////////////////
  691. void MENU_NO()
  692. {
  693.         unsigned char *p;
  694.         if(!kongflag)
  695.          {
  696.                 p = (pstr)"NO";
  697.                 LcmPutStr_8(44,3,p,1);
  698.                 p = (pstr)"YES";
  699.                 LcmPutStr_8(72,3,p,0);
  700.         }
  701.         MENU_SETKey();
  702. }
  703. void MENU_YES()
  704. {        
  705.         unsigned char *p;
  706.         if(!kongflag)
  707.          {
  708.                 p = (pstr)"NO";
  709.                 LcmPutStr_8(44,3,p,0);
  710.                 p = (pstr)"YES";
  711.                 LcmPutStr_8(72,3,p,1);
  712.         }
  713.         MENU_SETKey();
  714. }
  715. ///////////////////////////////////////////
  716. void Autonetworking()                //自动组网中
  717. {
  718.           unsigned char *p;  
  719.       
  720.     p=(pstr)"自动组网中";//
  721.         
  722.     Dis_String(42,3,p,0);
  723. }

  724. void SETUP_Key2()                //参数同步界面
  725. {
  726.         unsigned char *p;        
  727. //         if(!kongflag)
  728.          {
  729.                  g_MBHoldReg1[5] = 24;
  730. //                 kongflag = 1;
  731.                  lian_fen();
  732.                  p =(pstr)"参数同步冒";
  733.             Dis_String(16,3,p,0);
  734.     }  
  735.     if(g_communicate==1)
  736.     p = (pstr)"启动";
  737.     else
  738.     p = (pstr)"关闭";
  739.     Dis_String(76,3,p,1);
  740.     MENU_tiaokey();                    
  741. }
  742. void SETUP_Parameters(u8 first,u8 second,u8 third)   //主菜单
  743. {   
  744.     unsigned char *p;         
  745.     lian_fen();   
  746.     p = (pstr)"运行参数";
  747.     Dis_String(42,1,p,first);
  748.     p = (pstr)"保护参数";
  749.     Dis_String(42,3,p,second);
  750.     p = (pstr)"电容配置";
  751.     Dis_String(42,5,p,third);   
  752. }
  753. void RUN_key()//运行参数
  754. {
  755.         SETUP_Parameters(1,0,0);
  756.         g_MBHoldReg1[5] = 21;
  757.         init_Pro();
  758.         init_run();
  759.         init_Cset();
  760.         init_AD();
  761.         MENU_SETKey();        
  762.     //MENU_AUTOKey();
  763. }
  764. void Protect_SETUP()//保护参数
  765. {
  766.         g_MBHoldReg1[5] = 22;
  767.         SETUP_Parameters(0,1,0);
  768.         init_Pro();
  769.         init_run();        
  770.         init_Cset();
  771.         init_AD();
  772.         MENU_SETKey();
  773.         //MENU_AUTOKey();
  774. }
  775. void DR_SETUP()//电容配置
  776. {
  777.         g_MBHoldReg1[5] = 23;
  778.         SETUP_Parameters(0,0,1);
  779.         init_Pro();
  780.         init_run();
  781.         init_Cset();
  782.         init_AD();
  783.         MENU_SETKey();        
  784.         //MENU_AUTOKey();
  785. }

  786. void Display_AD()//电压参数界面显示
  787. {
  788.         unsigned char *p;
  789.         unsigned char i=0;
  790.         p = (pstr)"Uac";
  791.         LcmPutStr_8(23,1,p,0);//35
  792.         p = (pstr)"Ib";
  793.         LcmPutStr_8(23,2,p,0);
  794.         p = (pstr)":";
  795.         LcmPutStr_8(41,1,p,0);//47
  796.         LcmPutStr_8(41,2,p,0);//47

  797.         p = (pstr)"Year";
  798.         LcmPutStr_8(23,3,p,0);
  799.         p = (pstr)"Month";
  800.         LcmPutStr_8(23,4,p,0);
  801.         p = (pstr)"Code";
  802.         LcmPutStr_8(23,5,p,0);
  803.         
  804.         p = (pstr)":";
  805.         for(i=2;i<5;i++)
  806.         LcmPutStr_8(55,1+i,p,0);//47

  807.         LcmPutNum_300(50,1,g_ADUa,ADset[0]);//64
  808.   LcmPutNum_300(50,2,g_ADIb,ADset[1]);

  809.         LcmPutNum_40(90,1,g_Uca,0);
  810.         LcmPutNum_40(90,2,g_Ib/10.0,0);

  811.         LcmPutNum_2(67,3,20,0);
  812.   LcmPutNum_2(79,3,g_Year,ADset[2]);
  813.         LcmPutNum_2(67,4,g_Month,ADset[3]);
  814.         LcmPutNum_2(67,5,g_Code1,ADset[4]);
  815.   LcmPutNum_2(79,5,g_Code2,ADset[5]);
  816.   p = (pstr)"Pa";
  817.         LcmPutStr_8(23,6,p,0);//35
  818.         LcmPutNum_300(40,6,g_ADPa,ADset[6]);//64
  819.         p = (pstr)"Qa";
  820.         LcmPutStr_8(23,7,p,0);//35
  821.         LcmPutNum_300(40,7,g_ADQa,ADset[7]);//64
  822. }

  823. void Display_Run()//运行参数界面显示
  824. {
  825.         unsigned char i=0;
  826.     unsigned char *p;
  827.         lian_fen();
  828.         
  829.         p = (pstr)"ID";
  830.         LcmPutStr_8(35,1,p,Runset[0]);
  831.         p = (pstr)"PW";
  832.         LcmPutStr_8(35,2,p,Runset[3]);
  833.         p = (pstr)"CT";
  834.         LcmPutStr_8(35,3,p,Runset[6]);
  835.         p = (pstr)"COS";
  836.         LcmPutStr_8(29,4,p,Runset[9]);
  837.         p = (pstr)"QC";
  838.         LcmPutStr_8(35,5,p,Runset[11]);
  839.         p = (pstr)"D1";
  840.         LcmPutStr_8(35,6,p,Runset[13]);
  841.         p = (pstr)":";
  842.         for(i=0;i<6;i++)
  843.         LcmPutStr_8(47,1+i,p,0);
  844.         p = (pstr)"S";
  845.         LcmPutStr_8(100,6,p,0);
  846.         
  847.         LcmPutNum_2(64,1,g_RunID1,Runset[1]);
  848.            LcmPutNum_2(76,1,g_RunID2,Runset[2]);
  849.     LcmPutNum_2(64,2,g_RunPW1,Runset[4]);
  850.     LcmPutNum_2(76,2,g_RunPW2,Runset[5]);
  851.     LcmPutNum_2(64,3,g_RunCT1,Runset[7]);
  852.     LcmPutNum_2(76,3,g_RunCT2,Runset[8]);
  853.     LcmPutNum_300(64,4,g_RunCOS,Runset[10]);
  854.     LcmPutNum_20(64,5,g_RunQC,Runset[12]);
  855.     LcmPutNum_3(64,6,g_RunD1,Runset[14]);        
  856. }

  857. void Display_Protect()//保护参数界面显示
  858. {
  859.         
  860.         unsigned char i=0;
  861.     unsigned char *p;
  862.         lian_fen();
  863.         p = (pstr)"Uh";
  864.         LcmPutStr_8(35,1,p,G_ProC[0]);
  865.         p = (pstr)"Ul";
  866.         LcmPutStr_8(35,2,p,G_ProC[2]);
  867.         p = (pstr)"THDu";
  868.         LcmPutStr_8(23,3,p,G_ProC[4]);
  869.         p = (pstr)"THDi";
  870.         LcmPutStr_8(23,4,p,G_ProC[6]);
  871.         p = (pstr)"D2";
  872.         LcmPutStr_8(35,5,p,G_ProC[8]);
  873.         p = (pstr)"TP";
  874.         LcmPutStr_8(35,6,p,G_ProC[10]);
  875.         p = (pstr)":";
  876.         for(i=0;i<6;i++)
  877.         LcmPutStr_8(47,1+i,p,0);
  878.         p = (pstr)"V";
  879.         LcmPutStr_8(100,1,p,0);
  880.         LcmPutStr_8(100,2,p,0);
  881.         p = (pstr)"%";
  882.         LcmPutStr_8(100,3,p,0);
  883.         LcmPutStr_8(100,4,p,0);
  884.         p = (pstr)"S";
  885.         LcmPutStr_8(100,5,p,0);
  886.         for(i=0;i<6;i++)                //.c
  887.         {
  888.                 Display_charLocate(100+i,6,HZTT[i+12],0);
  889.         }
  890.         
  891.         LcmPutNum_3(64,1,g_ProUH,G_ProC[1]);           //数据 Uh
  892.     LcmPutNum_3(64,2,g_ProUL,G_ProC[3]);   
  893.     LcmPutNum_30(64,3,g_ProTHDu,G_ProC[5]);   
  894.     LcmPutNum_30(64,4,g_ProTHDi,G_ProC[7]);
  895.     LcmPutNum_3(64,5,g_ProD2,G_ProC[9]);
  896.     LcmPutNum_3(64,6,g_ProTp,G_ProC[11]);        
  897. }
  898. void Display_Configura()//电容配置 界面显示
  899. {        
  900.         unsigned char i=0;
  901.     unsigned char *p;
  902.         p = (pstr)"C1(~)  C2(~)";
  903.         LcmPutStr_8(25,1,p,0);
  904.         p = (pstr)"SN";
  905.         LcmPutStr_8(5,3,p,G_cset[0]);
  906.         p = (pstr)"VE";
  907.         LcmPutStr_8(5,4,p,G_cset[3]);
  908.         p = (pstr)"Ih";
  909.         LcmPutStr_8(5,6,p,G_cset[6]);
  910.         p = (pstr)"Il";
  911.         LcmPutStr_8(5,7,p,G_cset[9]);        
  912.         p = (pstr)":";
  913.         for(i=0;i<2;i++)
  914.         LcmPutStr_8(17,3+i,p,0);
  915.         LcmPutStr_8(17,6,p,0);
  916.         LcmPutStr_8(17,7,p,0);
  917.         
  918.         LcmPutNum_2(30,3,g_CapSN1,G_cset[1]);           //SN  
  919.     LcmPutNum_2(69,3,g_CapSN2,G_cset[2]);            //
  920.     LcmPutNum_30(30,4,g_CapVE1,G_cset[4]);          //VE
  921.     LcmPutNum_30(69,4,g_CapVE2,G_cset[5]);                //
  922.     p = (pstr)"Kvar";
  923.         LcmPutStr_8(104,4,p,0);
  924.     p = (pstr)"___";
  925.     LcmPutStr_8(30,6,p,G_cset[7]);                //Ih
  926.     LcmPutStr_8(69,6,p,G_cset[8]);
  927.     LcmPutStr_8(30,7,p,G_cset[10]);                //Il
  928.     LcmPutStr_8(69,7,p,G_cset[11]);
  929.     p = (pstr)"A";
  930.         LcmPutStr_8(110,6,p,0);
  931.         LcmPutStr_8(110,7,p,0);        
  932. }
  933. void init_Cmode()                //电容类型初始化
  934. {
  935.         unsigned char numbers;
  936.         for(numbers = 0;numbers<64;numbers++)
  937.         {
  938.                 DR_LX[numbers] = 0xff;                        
  939.                 DR_RZ1[numbers] = 0;                        
  940.                 DR_RZ2[numbers] = 0;                        
  941.                 DR_Num[numbers] = 0;
  942.                 capdevice[numbers].cid = numbers;
  943.         //        capdevice[numbers].ctype = "?";
  944.                 capdevice[numbers].cctype = 0;
  945.                 capdevice[numbers].cvalue = 0;
  946.                 capdevice[numbers].cstatus = 0;  
  947.                 capdevicetmp[numbers].cstatus = 0;
  948.                 capdevice[numbers].count = 0;
  949.         }
  950.         capdevice[g_CapSN1-1].cctype=4;
  951.         capdevice[g_CapSN2-1].cctype=4;
  952.         //capdevice[g_CapSN3-1].cctype=3;
  953.         capdevice[g_CapSN1-1].cvalue=g_CapVE1;
  954.         capdevice[g_CapSN2-1].cvalue=g_CapVE2;
  955.         //capdevice[g_CapSN3-1].cvalue=g_CapVE3;
  956. }
  957. void Display_CNMode(u8 col,u8  page,u8  cnumber,u8  cnumber_x,u8  mode,u16 cvalue,u8  cvalue_x)//c+N+类型
  958. {                                //col列 page页 mode电容类型 cnumber电容标号 cvalue电容值   cnumber_x反显表示电容选中  cvalue_x反显表示电容投
  959.                                 //函数显示 Cx △ 010
  960.         unsigned char *p;
  961.         if(mode == 0)
  962.         {
  963.                 p = (pstr)"?";                //主机未确定
  964.         }else if(mode == 4)
  965.         {
  966.                 p = (pstr)"~";                //△
  967.         }else if(mode == 1)
  968.         {
  969.                 p = (pstr)"A";                //Y
  970.         }
  971.         else if(mode == 2)
  972.         {
  973.                 p = (pstr)"B";                //Y
  974.         }
  975.         else if(mode == 3)
  976.         {
  977.                 p = (pstr)"C";                //Y
  978.         }        
  979.         LcmPutStr_8(col+22,page,p,0);
  980.         
  981.         p = (pstr)"C";        
  982.         LcmPutStr_8(col,page,p,cnumber_x);
  983.         
  984.         LcmPutNum_2(col+6,page,cnumber,cnumber_x);//电容标号
  985.         LcmPutNum_30(col+32,page,cvalue,cvalue_x);//电容值
  986. }

  987. void Display_Mcontrol(Uchar C)                                // 手动控制 界面显示 Npage 值0-5
  988. {                                                                                        //△ 电容类型 显示        
  989.                
  990.                 Display_CNMode(5,0,g_CapSN1,0,capdevice[g_CapSN1-1].cctype,capdevice[g_CapSN1-1].cvalue,0);
  991.           Display_CNMode(70,0,g_CapSN2,0,capdevice[g_CapSN2-1].cctype,capdevice[g_CapSN2-1].cvalue,0);
  992.                 G_mcontrol[C]=1;
  993.                 if( Npage > 4)
  994.                 {
  995.                         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);
  996.                         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);
  997.                         
  998.                         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);
  999.                         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);
  1000.                
  1001.                 }
  1002.                 else
  1003.                 {
  1004.                         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);
  1005.                         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);
  1006.                         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);
  1007.                         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);
  1008.                         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);
  1009.                         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);
  1010.                         
  1011.                         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);
  1012.                         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);
  1013.                         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);
  1014.                         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);
  1015.                         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);
  1016.                         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);
  1017.         
  1018.                 }
  1019. }

  1020. void calibration_key()
  1021. {
  1022.         unsigned char tmp;
  1023.         tmp = g_keyValue;                                  //键值
  1024.         g_keyValue = 0;
  1025.         Auto_manual = 0;
  1026.         switch(tmp)
  1027.         {               
  1028.                 case KESC:
  1029.                 {
  1030.                         kongflag = 0;
  1031.                         LcmClear(0);
  1032.                         pMenu = &MainMenu[1];
  1033.                 }break;
  1034.                 case KUP:
  1035.                 {
  1036.                                 kongflag = 0;
  1037.                                 if(ADset[0])
  1038.                                 {        g_ADUa++;
  1039.                                         if(g_ADUa>300)                //???????
  1040.                                                 g_ADUa=100;
  1041.                                 }else if(ADset[1])
  1042.                                 {        g_ADIb++;
  1043.                                         if(g_ADIb>300)                //???????
  1044.                                                 g_ADIb=100;
  1045.                                 }
  1046.                                 

  1047.                                 if(ADset[2])
  1048.                                 {        g_Year++;
  1049.                                         if(g_Year>20)                //???????
  1050.                                                 g_Year=15;
  1051.                                 }
  1052.                                 if(ADset[3])
  1053.                                 {        g_Month++;
  1054.                                         if(g_Month>12)                //???????
  1055.                                                 g_Month=1;
  1056.                                 }
  1057.                                 if(ADset[4])
  1058.                                 {        g_Code1++;
  1059.                                         if(g_Code1>9)                //???????
  1060.                                                 g_Code1=0;
  1061.                                 }
  1062.                                 if(ADset[5])
  1063.                                 {        g_Code2++;
  1064.                                         if(g_Code2>99)                //???????
  1065.                                                 g_Code2=0;
  1066.                                 }else if(ADset[6])
  1067.                                 {        g_ADPa++;
  1068.                                         if(g_ADPa>300)                //???????
  1069.                                                 g_ADPa=100;
  1070.                                 }
  1071.                                 if(ADset[7])
  1072.                                 {        g_ADQa++;
  1073.                                         if(g_ADQa>300)                //???????
  1074.                                                 g_ADQa=100;
  1075.                                 }
  1076.                 }break;        
  1077.                 case KDOWN:
  1078.                 {
  1079.                                 kongflag = 0;
  1080.                                 if(ADset[0])
  1081.                                 {
  1082.                                         if(g_ADUa==50)                //???????
  1083.                                                 g_ADUa=300;
  1084.                                         else
  1085.                                                 g_ADUa--;
  1086.                                 }else if(ADset[1])
  1087.                                 {
  1088.                                         if(g_ADIb==50)                //???????
  1089.                                                 g_ADIb=300;
  1090.                                         else
  1091.                                                 g_ADIb--;
  1092.                                 }

  1093.                                 else if(ADset[2])
  1094.                                 {        
  1095.                                         if(g_Year==14)                //???????
  1096.                                                 g_Year=15;
  1097.                                         else
  1098.                                         g_Year--;
  1099.                                 }
  1100.                                 else if(ADset[3])
  1101.                                 {        
  1102.                                         if(g_Month==1)                //???????
  1103.                                                 g_Month=12;
  1104.                                         else
  1105.                                         g_Month--;
  1106.                                 }
  1107.                                 else if(ADset[4])
  1108.                                 {        
  1109.                                         if(g_Code1==0)                //???????
  1110.                                                 g_Code1=9;
  1111.                                         else
  1112.                                         g_Code1--;
  1113.                                 }
  1114.                                 else if(ADset[5])
  1115.                                 {        
  1116.                                         if(g_Code2==0)                //???????
  1117.                                                 g_Code2=99;
  1118.                                         else
  1119.                                         g_Code2--;
  1120.                                 }else if(ADset[6])
  1121.                                 {        
  1122.                                         if(g_ADPa==50)                //???????
  1123.                                                 g_ADPa=300;
  1124.                                         else
  1125.                                                 g_ADPa--;
  1126.                                 }else if(ADset[7])
  1127.                                 {        
  1128.                                         if(g_ADQa==50)                //???????
  1129.                                                 g_ADQa=300;
  1130.                                         else
  1131.                                                 g_ADQa--;
  1132.                                 }
  1133.                 }break;        
  1134.                 case KCR:
  1135.                 {
  1136.                                 kongflag = 0;        
  1137.                                 if(ADset[0])        
  1138.                                 {        
  1139.                                         AT24Cxx_WriteTwoByte(0x0038,g_ADUa);
  1140.                                 }
  1141.                                 if(ADset[1])        
  1142.                                 {        AT24Cxx_WriteTwoByte(0x00F0,g_ADIb);
  1143.                                 }                                
  1144.                                 if(ADset[2])        
  1145.                                 {        AT24Cxx_WriteTwoByte(0x003e,g_Year);
  1146.                                 }
  1147.                                 if(ADset[3])        
  1148.                                 {        AT24Cxx_WriteTwoByte(0x0040,g_Month);
  1149.                                 }
  1150.                                 if(ADset[4])        
  1151.                                 {        AT24Cxx_WriteTwoByte(0x0042,g_Code1);
  1152.         //                                DR_SendTime = ((u32) g_Code1*100+(u32)g_Code2)*50+2000;//sjf003
  1153.                                 }
  1154.                                 if(ADset[5])        
  1155.                                 {        AT24Cxx_WriteTwoByte(0x0044,g_Code2);
  1156.         //                                DR_SendTime = ((u32) g_Code1*100+(u32)g_Code2)*50+2000;//sjf003
  1157.                                 }
  1158.                                 if(ADset[6])        
  1159.                                 {        AT24Cxx_WriteTwoByte(0x00F6,g_ADPa);
  1160.                                 }        
  1161.                                 if(ADset[7])        
  1162.                                 {        AT24Cxx_WriteTwoByte(0x00F8,g_ADQa);
  1163.                                 }                                                
  1164.                                 if(ADset_Subscript<7)ADset_Subscript++;
  1165.                                 else ADset_Subscript=0;
  1166.                                 init_AD();
  1167.                                 ADset[ADset_Subscript]=1;                        
  1168.                 }break;        
  1169.                 default:
  1170.                 break;
  1171.         }               
  1172. }
  1173. void Run_setkey()     //主菜单按键扫描
  1174. {
  1175.         unsigned char tmp;
  1176.         tmp = g_keyValue;                                  //键值
  1177.         g_keyValue = 0;
  1178.         switch(tmp)
  1179.         {               
  1180.                 case KESC:
  1181.                 {
  1182.                                 kongflag = 0;
  1183.                                 LcmClear(0);
  1184.                                 if(strcmp(pMenu -> string,"A")== 0)
  1185.                                 pMenu = &SETUPMenu[0];
  1186.                                 if(strcmp(pMenu -> string,"B")== 0)
  1187.                                 pMenu = &SETUPMenu[1];
  1188.                                 if(strcmp(pMenu -> string,"C")== 0)
  1189.                                         pMenu = &SETUPMenu[2];
  1190.                 }break;
  1191.                 case KUP:
  1192.                 {
  1193.                         
  1194.                                 if(Runset[1])
  1195.                                 {        g_RunID1++;
  1196.                                         if(g_RunID1>99)                //运行参数最大值
  1197.                                                 g_RunID1=0;
  1198.                                 }
  1199.                                 if(Runset[2])
  1200.                                 {        g_RunID2++;
  1201.                                         if(g_RunID2>99)                //运行参数最大值
  1202.                                                 g_RunID2=0;
  1203.                                 }
  1204.                                 if(Runset[4])
  1205.                                 {        g_RunPW1++;
  1206.                                         if(g_RunPW1>99)                //运行参数最大值
  1207.                                                 g_RunPW1=0;
  1208.                                 }
  1209.                                 if(Runset[5])
  1210.                                 {        g_RunPW2++;
  1211.                                         if(g_RunPW2>99)                //运行参数最大值
  1212.                                                 g_RunPW2=0;
  1213.                                 }
  1214.                                 if(Runset[7])
  1215.                                 {        g_RunCT1++;
  1216.                                         if(g_RunCT1>99)                //运行参数最大值
  1217.                                                 g_RunCT1=0;
  1218.                                 }
  1219.                                 if(Runset[8])
  1220.                                 {        g_RunCT2++;
  1221.                                         if(g_RunCT2>99)                //运行参数最大值
  1222.                                                 g_RunCT2=0;
  1223.                                 }
  1224.                                 if(Runset[10])
  1225.                                 {        g_RunCOS++;
  1226.                                         if(g_RunCOS>100)                //运行参数最大值
  1227.                                                 g_RunCOS=85;
  1228.                                 }
  1229.                                 if(Runset[12])
  1230.                                 {        g_RunQC++;
  1231.                                         if(g_RunQC>12)                //运行参数最大值
  1232.                                                 g_RunQC=5;
  1233.                                 }
  1234.                                 if(Runset[14])
  1235.                                 {        g_RunD1++;
  1236.                                         if(g_RunD1>600)                //运行参数最大值
  1237.                                                 g_RunD1=0;
  1238.                                 }
  1239.                                 if(G_ProC[1])
  1240.                                 {        g_ProUH++;
  1241.                                         if(g_ProUH>480)                //保护参数最大值
  1242.                                                 g_ProUH=380;
  1243.                                 }
  1244.                                 if(G_ProC[3])
  1245.                                 {        g_ProUL++;
  1246.                                         if(g_ProUL>360)                //保护参数最大值
  1247.                                                 g_ProUL=330;
  1248.                                 }
  1249.                                 if(G_ProC[5])
  1250.                                 {        g_ProTHDu++;
  1251.                                         if(g_ProTHDu>250)                //保护参数最大值
  1252.                                                 g_ProTHDu=0;
  1253.                                 }
  1254.                                 if(G_ProC[7])
  1255.                                 {        g_ProTHDi++;
  1256.                                         if(g_ProTHDi>999)                //保护参数最大值
  1257.                                                 g_ProTHDi=0;
  1258.                                 }
  1259.                                 if(G_ProC[9])
  1260.                                 {        g_ProD2++;
  1261.                                         if(g_ProD2>180)                //保护参数最大值
  1262.                                                 g_ProD2=60;
  1263.                                 }
  1264.                                 if(G_ProC[11])
  1265.                                 {        g_ProTp++;
  1266.                                         if(g_ProTp>100)                //保护参数最大值
  1267.                                                 g_ProTp=0;
  1268.                                 }

  1269.                                 if(G_cset[1])                 //电容设置 SN 1  序号
  1270.                                 {        g_CapSN1++;
  1271.                                         if(g_CapSN1>64)
  1272.                                                 g_CapSN1=1;
  1273.                                         g_CapSN2 = g_CapSN1+1;
  1274.                                         if(g_CapSN2>64)
  1275.                                                 g_CapSN2=1;        
  1276.                                 }
  1277.                                 if(G_cset[2])                 //电容设置 SN 2
  1278.                                 {        g_CapSN2++;
  1279.                                         if(g_CapSN2>64)
  1280.                                                 g_CapSN2=1;
  1281.                                         g_CapSN1 = g_CapSN2-1;
  1282.                                         if(g_CapSN1 == 0)
  1283.                                                 g_CapSN1=64;
  1284.                                 }                                
  1285.                                 if(G_cset[4])                 //电容设置 VE 1  值
  1286.                                 {        g_CapVE1++;
  1287.                                         if(g_CapVE1>400)//电容器容量最大值
  1288.                                                 g_CapVE1=0;
  1289.                                 }
  1290.                                 if(G_cset[5])                 //电容设置 VE 2
  1291.                                 {        g_CapVE2++;
  1292.                                         if(g_CapVE2>400)//电容器容量最大值
  1293.                                                 g_CapVE2=0;
  1294.                                 }
  1295.                                 if(G_cset[0]|G_cset[3]|G_cset[6]|G_cset[9])
  1296.                                 {pMenu = pMenu -> parentMenuItem;kongflag = 0;}
  1297.                                 if(G_ProC[0]|G_ProC[2]|G_ProC[4]|G_ProC[6]|G_ProC[8]|G_ProC[10])
  1298.                                 {pMenu = pMenu -> parentMenuItem;kongflag = 0;}
  1299.                                 if(Runset[0]|Runset[3]|Runset[6]|Runset[9]|Runset[11]|Runset[13])                                
  1300.                                 {pMenu = pMenu -> parentMenuItem;kongflag = 0;}
  1301.                                        
  1302.                 }break;
  1303.                 case KDOWN:
  1304.                 {
  1305.                                 if(Runset[1])
  1306.                                 {        
  1307.                                         if(g_RunID1==0)        //运行参数最小值
  1308.                                                 g_RunID1=99;
  1309.                                         else
  1310.                                                 g_RunID1--;                                                
  1311.                                 }
  1312.                                 if(Runset[2])
  1313.                                 {        
  1314.                                         if(g_RunID2==0)        //运行参数最小值
  1315.                                                 g_RunID2=99;
  1316.                                         else
  1317.                                                 g_RunID2--;                                                
  1318.                                 }
  1319.                                 if(Runset[4])
  1320.                                 {        
  1321.                                         if(g_RunPW1==0)        //运行参数最小值
  1322.                                                 g_RunPW1=99;
  1323.                                         else
  1324.                                                 g_RunPW1--;
  1325.                                 }
  1326.                                 if(Runset[5])
  1327.                                 {        
  1328.                                         if(g_RunPW2==0)        //运行参数最小值
  1329.                                                 g_RunPW2=99;
  1330.                                         else
  1331.                                                 g_RunPW2--;
  1332.                                 }
  1333.                                 if(Runset[7])
  1334.                                 {        
  1335.                                         if(g_RunCT1==0)        //运行参数最小值
  1336.                                                 g_RunCT1=99;
  1337.                                         else
  1338.                                                 g_RunCT1--;
  1339.                                 }
  1340.                                 if(Runset[8])
  1341.                                 {        
  1342.                                         if(g_RunCT2==0)        //运行参数最小值
  1343.                                                 g_RunCT2=99;
  1344.                                         else
  1345.                                                 g_RunCT2--;
  1346.                                 }
  1347.                                 if(Runset[10])
  1348.                                 {        
  1349.                                         if(g_RunCOS==80)        //运行参数最小值
  1350.                                                 g_RunCOS=100;
  1351.                                         else
  1352.                                                 g_RunCOS--;
  1353.                                 }
  1354.                                 if(Runset[12])
  1355.                                 {        
  1356.                                         if(g_RunQC==5)        //运行参数最小值
  1357.                                                 g_RunQC=12;
  1358.                                         else
  1359.                                                 g_RunQC--;
  1360.                                 }
  1361.                                 if(Runset[14])
  1362.                                 {        
  1363.                                         if(g_RunD1==0)        //运行参数最小值
  1364.                                                 g_RunD1=600;
  1365.                                         else
  1366.                                                 g_RunD1--;
  1367.                                 }
  1368.                                 if(G_ProC[1])
  1369.                                 {        g_ProUH--;
  1370.                                         if(g_ProUH==380)        //保护参数最小值
  1371.                                                 g_ProUH=480;
  1372.                                 }
  1373.                                 if(G_ProC[3])
  1374.                                 {        
  1375.                                         if(g_ProUL==300)        //保护参数最小值
  1376.                                                 g_ProUL=360;
  1377.                                         else
  1378.                                                 g_ProUL--;
  1379.                                 }
  1380.                                 if(G_ProC[5])
  1381.                                 {        
  1382.                                         if(g_ProTHDu==0)        //保护参数最小值
  1383.                                                 g_ProTHDu=250;
  1384.                                         else
  1385.                                                 g_ProTHDu--;
  1386.                                 }
  1387.                                 if(G_ProC[7])
  1388.                                 {        
  1389.                                         if(g_ProTHDi==0)        //保护参数最小值
  1390.                                                 g_ProTHDi=999;
  1391.                                         else
  1392.                                                 g_ProTHDi--;
  1393.                                 }
  1394.                                 if(G_ProC[9])
  1395.                                 {        
  1396.                                         if(g_ProD2==60)        //保护参数最小值
  1397.                                                 g_ProD2=180;
  1398.                                         else
  1399.                                                 g_ProD2--;        
  1400.                                 }
  1401.                                 if(G_ProC[11])
  1402.                                 {        
  1403.                                         if(g_ProTp==0)        //保护参数最小值
  1404.                                                 g_ProTp=100;
  1405.                                         else
  1406.                                                 g_ProTp--;
  1407.                                 }

  1408.                                 if(G_cset[1])                 //电容设置 SN 1
  1409.                                 {
  1410.                                         if(g_CapSN1==1)
  1411.                                                 g_CapSN1=64;
  1412.                                         else
  1413.                                                 g_CapSN1--;
  1414.                                         g_CapSN2 = g_CapSN1+1;
  1415.                                         if(g_CapSN2>64)
  1416.                                         g_CapSN2=1;                                
  1417.                                 }
  1418.                                 if(G_cset[2])                 //电容设置 SN 2
  1419.                                 {        
  1420.                                         if(g_CapSN2==1)
  1421.                                                 g_CapSN2=64;
  1422.                                         else
  1423.                                                 g_CapSN2--;
  1424.                                         g_CapSN1 = g_CapSN2-1;
  1425.                                         if(g_CapSN1==0)
  1426.                                                 g_CapSN1=64;
  1427.                                 }
  1428.                                 
  1429.                                 if(G_cset[4])                 //电容设置 VE 1
  1430.                                 {        
  1431.                                         if(g_CapVE1==0)
  1432.                                                 g_CapVE1=400;
  1433.                                         else
  1434.                                                 g_CapVE1--;
  1435.                                 }
  1436.                                 if(G_cset[5])                 //电容设置 VE 2
  1437.                                 {        
  1438.                                         if(g_CapVE2==0)
  1439.                                                 g_CapVE2=400;
  1440.                                         else
  1441.                                                 g_CapVE2--;
  1442.                                 }
  1443.                                 //LcmClear(0);
  1444.                                 if(G_cset[0]|G_cset[3]|G_cset[6]|G_cset[9])
  1445.                                 {pMenu = pMenu -> childrenMenuItem;kongflag = 0;}
  1446.                                 if(G_ProC[0]|G_ProC[2]|G_ProC[4]|G_ProC[6]|G_ProC[8]|G_ProC[10])
  1447.                                 {pMenu = pMenu -> childrenMenuItem;kongflag = 0;}
  1448.                                 if(Runset[0]|Runset[3]|Runset[6]|Runset[9]|Runset[11]|Runset[13])
  1449.                                 {pMenu = pMenu -> childrenMenuItem;kongflag = 0;}
  1450.                 }break;
  1451.                 case KCR:                //按下确认键后进行存储
  1452.                 {
  1453.                                 kongflag = 0;        
  1454.                                 pMenu = pMenu -> nextMenuItem;        
  1455.                         
  1456.                                 if(Runset[1])        //运行参数存储
  1457.                                 {        AT24Cxx_WriteTwoByte(0x0004,g_RunID1);                                       
  1458.                                 }
  1459.                                 if(Runset[2])        
  1460.                                 {        AT24Cxx_WriteTwoByte(0x0006,g_RunID2);                                       
  1461.                                 }
  1462.                                 if(Runset[4])        
  1463.                                 {        AT24Cxx_WriteTwoByte(0x0008,g_RunPW1);
  1464.                                 }
  1465.                                 if(Runset[5])        
  1466.                                 {        AT24Cxx_WriteTwoByte(0x000a,g_RunPW2);
  1467.                                 }
  1468.                                 if(Runset[7])        
  1469.                                 {        AT24Cxx_WriteTwoByte(0x000c,g_RunCT1);
  1470.                                 }
  1471.                                 if(Runset[8])        
  1472.                                 {        AT24Cxx_WriteTwoByte(0x000e,g_RunCT2);
  1473.                                 }
  1474.                                 if(Runset[10])        
  1475.                                 {        AT24Cxx_WriteTwoByte(0x0010,g_RunCOS);
  1476.                                 }
  1477.                                 if(Runset[12])        
  1478.                                 {        AT24Cxx_WriteTwoByte(0x0012,g_RunQC);
  1479.                                 }
  1480.                                 if(Runset[14])        
  1481.                                 {        AT24Cxx_WriteTwoByte(0x0014,g_RunD1);
  1482.                                 }
  1483.                                 if(G_ProC[1])        //保护参数存储
  1484.                                 {        AT24Cxx_WriteTwoByte(0x0016,g_ProUH);
  1485.                                 }
  1486.                                 if(G_ProC[3])
  1487.                                 {        AT24Cxx_WriteTwoByte(0x0018,g_ProUL);
  1488.                                 }
  1489.                                 if(G_ProC[5])
  1490.                                 {        AT24Cxx_WriteTwoByte(0x001a,g_ProTHDu);
  1491.                                 }
  1492.                                 if(G_ProC[7])
  1493.                                 {        AT24Cxx_WriteTwoByte(0x001c,g_ProTHDi);
  1494.                                 }
  1495.                                 if(G_ProC[9])
  1496.                                 {        AT24Cxx_WriteTwoByte(0x001e,g_ProD2);
  1497.                                 }
  1498.                                 if(G_ProC[11])
  1499.                                 {        AT24Cxx_WriteTwoByte(0x0020,g_ProTp);
  1500.                                 }
  1501.                                 if(G_cset[1]||G_cset[2]||G_cset[8]||G_cset[4]||G_cset[5]||G_cset[11])        //电容配置参数存储
  1502.                                 {        AT24Cxx_WriteTwoByte(0x0022,g_CapSN1);
  1503.                                         AT24Cxx_WriteTwoByte(0x0024,g_CapSN2);
  1504.                                         capdevice[g_CapSN1-1].cctype=4;
  1505.                                         capdevice[g_CapSN2-1].cctype=4;
  1506.                                         AT24Cxx_WriteOneByte(0x0060 + g_CapSN1-1,4);
  1507.                                         AT24Cxx_WriteOneByte(0x0060 + g_CapSN2-1,4);
  1508.                                 
  1509.                                         AT24Cxx_WriteTwoByte(0x0026,g_CapVE1);                                
  1510.                                         AT24Cxx_WriteTwoByte(0x0028,g_CapVE2);
  1511.                                         capdevice[g_CapSN1-1].cvalue=g_CapVE1;
  1512.                                         capdevice[g_CapSN2-1].cvalue=g_CapVE2;
  1513.                                         AT24Cxx_WriteTwoByte(0x00A0+(g_CapSN1-1)<<1,g_CapVE1);
  1514.                                         AT24Cxx_WriteTwoByte(0x00A0+(g_CapSN2-1)<<1,g_CapVE2);
  1515.                                 }
  1516.                         //对应序号的 电容类型 电容大小         !!! 存储未添加               
  1517.                 }break;
  1518.                 default:
  1519.                 break;
  1520.         }
  1521. }
  1522. void G_ADUa()//UA
  1523. {
  1524.         if(!kongflag)
  1525.         {                        
  1526.                 kongflag = 1;
  1527. //                init_AD();
  1528. //                ADset[0]=1;
  1529.                 Display_AD();
  1530.         }                                
  1531.         calibration_key();        
  1532. }


  1533. void Addressset()
  1534. {        
  1535. //        if(!kongflag)
  1536.         {        
  1537.                 g_MBHoldReg1[5] = 210;
  1538. //                kongflag = 1;
  1539.                 init_run();
  1540.                 Runset[0]=1;
  1541.                 Display_Run();
  1542.         }                        
  1543.         Run_setkey();
  1544. }
  1545. void G_ID1()//g_RunID1
  1546. {
  1547. //        if(!kongflag)
  1548.         {                        
  1549. //                kongflag = 1;
  1550.                 init_run();
  1551.                 Runset[1]=1;
  1552.                 g_MBHoldReg1[5] = 200;
  1553.         }
  1554.         Display_Run();                        
  1555.         Run_setkey();        
  1556. }
  1557. void G_ID2()////g_RunID1
  1558. {
  1559. //        if(!kongflag)
  1560.         {                        
  1561. //                kongflag = 1;
  1562.                 init_run();
  1563.                 Runset[2]=1;
  1564.                 g_MBHoldReg1[5] = 201;
  1565.         }
  1566.         Display_Run();                        
  1567.         Run_setkey();
  1568. }
  1569. void Competenceset()        //密码        
  1570. {
  1571. //        if(!kongflag)
  1572.         {        
  1573.                 g_MBHoldReg1[5] = 211;
  1574. //                kongflag = 1;
  1575.                 init_run();
  1576.                 Runset[3]=1;
  1577.                 Display_Run();
  1578.         }                        
  1579.         Run_setkey();        
  1580. }
  1581. void G_pw1()
  1582. {
  1583.         if(!kongflag)
  1584.         {        
  1585.                 kongflag = 1;
  1586.                 init_run();
  1587.                 Runset[4]=1;
  1588.                 g_MBHoldReg1[5] = 202;
  1589.         }
  1590.         Display_Run();                        
  1591.         Run_setkey();
  1592. }
  1593. void G_pw2()
  1594. {
  1595. //        if(!kongflag)
  1596.         {        
  1597. //                kongflag = 1;
  1598.                 init_run();
  1599.                 Runset[5]=1;
  1600.                 g_MBHoldReg1[5] = 203;                 
  1601.         }
  1602.         Display_Run();                        
  1603.         Run_setkey();
  1604. }
  1605. void CTset()
  1606. {
  1607. //        if(!kongflag)
  1608.         {        
  1609.                 g_MBHoldReg1[5] = 212;
  1610. //                kongflag = 1;
  1611.                 init_run();
  1612.                 Runset[6]=1;
  1613.                 Display_Run();
  1614.         }                        
  1615.         Run_setkey();
  1616. }
  1617. void G_ct1()
  1618. {
  1619. //        if(!kongflag)
  1620.         {        
  1621.                 g_MBHoldReg1[5] = 150;
  1622.                 //g_MBHoldReg1[4] = 5;
  1623. //                kongflag = 1;
  1624.                 init_run();
  1625.                 Runset[7]=1;
  1626.         }
  1627.         Display_Run();                        
  1628.         Run_setkey();
  1629. }
  1630. void G_ct2()
  1631. {
  1632. //        if(!kongflag)
  1633.         {        
  1634.                 g_MBHoldReg1[5] = 151;
  1635.                 //g_MBHoldReg1[4] = 5;
  1636. //                kongflag = 1;
  1637.                 init_run();
  1638.                 Runset[8]=1;
  1639.                  
  1640.         }
  1641.         Display_Run();                        
  1642.         Run_setkey();
  1643. }
  1644. void COSset()
  1645. {
  1646. //        if(!kongflag)
  1647.         {        
  1648.                 g_MBHoldReg1[5] = 213;
  1649. //                kongflag = 1;
  1650.                 init_run();
  1651.                 Runset[9]=1;
  1652.                 Display_Run();
  1653.         }                        
  1654.         Run_setkey();
  1655. }
  1656. void G_cos()
  1657. {
  1658. //        if(!kongflag)
  1659.         {        
  1660.                 g_MBHoldReg1[5] = 152;
  1661.                 //g_MBHoldReg1[4] = 5;
  1662. //                kongflag = 1;
  1663.                 init_run();
  1664.                 Runset[10]=1;
  1665.         }
  1666.         Display_Run();                        
  1667.         Run_setkey();
  1668. }
  1669. void QCset()
  1670. {
  1671. //        if(!kongflag)
  1672.         {                        
  1673.                 g_MBHoldReg1[5] = 214;
  1674. //                kongflag = 1;
  1675.                 init_run();
  1676.                 Runset[11]=1;
  1677.                 Display_Run();
  1678.         }                        
  1679.         Run_setkey();
  1680. }
  1681. void G_qc()
  1682. {
  1683. //        if(!kongflag)
  1684.         {        
  1685. //                kongflag = 1;
  1686.                 init_run();
  1687.                 Runset[12]=1;
  1688.                 g_MBHoldReg1[5] = 153;
  1689.                 //g_MBHoldReg1[4] = 5;
  1690.         }
  1691.         Display_Run();                        
  1692.         Run_setkey();
  1693. }
  1694. void D1set()
  1695. {
  1696. //        if(!kongflag)
  1697.         {        
  1698.                 g_MBHoldReg1[5] = 215;
  1699. //                kongflag = 1;
  1700.                 init_run();
  1701.                 Runset[13]=1;
  1702.                 Display_Run();
  1703.         }                        
  1704.         Run_setkey();
  1705. }

  1706. void G_d1()
  1707. {
  1708. //        if(!kongflag)
  1709.         {        
  1710. //                kongflag = 1;
  1711.                 init_run();
  1712.                 Runset[14]=1;
  1713.                 g_MBHoldReg1[5] = 154;
  1714.                 //g_MBHoldReg1[4] = 5;
  1715.         }
  1716.         Display_Run();                        
  1717.         Run_setkey();
  1718. }
  1719. void init_Pro()
  1720. {
  1721.         char i = 0;
  1722.         for(i=0;i<12;i++)
  1723.                 G_ProC[i]=0;
  1724. }

  1725. void G_Uh()
  1726. {
  1727. //        if(!kongflag)
  1728.         {        
  1729.                 g_MBHoldReg1[5] = 221;
  1730. //                kongflag = 1;
  1731.                 init_Pro();
  1732.                 G_ProC[0]=1;
  1733.                 Display_Protect();
  1734.         }
  1735.                                 
  1736.         Run_setkey();
  1737. }
  1738. void G_ProUH()//数据
  1739. {
  1740. //        if(!kongflag)
  1741.         {        
  1742. //                kongflag = 1;
  1743.                 init_Pro();
  1744.                 G_ProC[1]=1;
  1745.                 g_MBHoldReg1[5] = 204;
  1746.         }
  1747.         Display_Protect();                        
  1748.         Run_setkey();
  1749. }
  1750. void G_Ul()
  1751. {
  1752. //        if(!kongflag)
  1753.         {        
  1754.                 g_MBHoldReg1[5] = 222;
  1755. //                kongflag = 1;
  1756.                 init_Pro();
  1757.                 G_ProC[2]=1;
  1758.                 Display_Protect();
  1759.         }                        
  1760.         Run_setkey();
  1761. }
  1762. void G_ProUl()//数据
  1763. {
  1764. //        if(!kongflag)
  1765.         {        
  1766. //                kongflag = 1;
  1767.                 init_Pro();
  1768.                 G_ProC[3]=1;
  1769.                 g_MBHoldReg1[5] = 205;
  1770.         }
  1771.         Display_Protect();                        
  1772.         Run_setkey();
  1773. }
  1774. void G_THDu()
  1775. {
  1776.         if(!kongflag)
  1777.         {        
  1778.                 g_MBHoldReg1[5] = 223;
  1779.                 kongflag = 1;
  1780.                 init_Pro();
  1781.                 G_ProC[4]=1;
  1782.                 Display_Protect();
  1783.         }                        
  1784.         Run_setkey();
  1785. }
  1786. void G_ProTHDu()//数据
  1787. {
  1788.         if(!kongflag)
  1789.         {        
  1790.                 kongflag = 1;
  1791.                 init_Pro();
  1792.                 G_ProC[5]=1;
  1793.                 g_MBHoldReg1[5] = 206;
  1794.         }
  1795.         Display_Protect();                        
  1796.         Run_setkey();
  1797. }
  1798. void G_THDi()
  1799. {
  1800.         if(!kongflag)
  1801.         {        
  1802.                 g_MBHoldReg1[5] = 224;
  1803.                 kongflag = 1;
  1804.                 init_Pro();
  1805.                 G_ProC[6]=1;
  1806.                 Display_Protect();
  1807.         }                        
  1808.         Run_setkey();
  1809. }
  1810. void G_ProTHDi()//数据
  1811. {
  1812.         if(!kongflag)
  1813.         {        
  1814.                 kongflag = 1;
  1815.                 init_Pro();
  1816.                 G_ProC[7]=1;
  1817.                 g_MBHoldReg1[5] = 207;
  1818.         }
  1819.         Display_Protect();                        
  1820.         Run_setkey();
  1821. }
  1822. void G_D2()
  1823. {
  1824.         if(!kongflag)
  1825.         {        
  1826.                 g_MBHoldReg1[5] = 225;
  1827.                 kongflag = 1;
  1828.                 init_Pro();
  1829.                 G_ProC[8]=1;
  1830.                 Display_Protect();
  1831.         }                        
  1832.         Run_setkey();
  1833. }
  1834. void G_ProD2()//数据
  1835. {
  1836.         if(!kongflag)
  1837.         {        
  1838.                 kongflag = 1;
  1839.                 init_Pro();
  1840.                 G_ProC[9]=1;
  1841.                 g_MBHoldReg1[5] = 208;
  1842.         }
  1843.         Display_Protect();                        
  1844.         Run_setkey();
  1845. }
  1846. void G_TP()
  1847. {
  1848.         if(!kongflag)
  1849.         {        
  1850.                 g_MBHoldReg1[5] = 226;
  1851.                 kongflag = 1;
  1852.                 init_Pro();
  1853.                 G_ProC[10]=1;
  1854.                 Display_Protect();
  1855.         }                        
  1856.         Run_setkey();
  1857. }
  1858. void G_ProTP()//数据
  1859. {
  1860.         if(!kongflag)
  1861.         {        
  1862.                 kongflag = 1;
  1863.                 init_Pro();
  1864.                 G_ProC[11]=1;
  1865.                 g_MBHoldReg1[5] = 209;
  1866.         }
  1867.         Display_Protect();                        
  1868.         Run_setkey();
  1869. }

  1870. void init_Cset()
  1871. {
  1872.         Uchar i;
  1873.         for(i=0;i<12;i++)
  1874.                 G_cset[i]=0;
  1875. }
  1876. void init_Cmcontrol()
  1877. {
  1878.         Uchar i;
  1879.         for(i=0;i<65;i++)
  1880.                 G_mcontrol[i]=0;
  1881. }        
  1882. void G_SN()                //电容配置,界面设置内容
  1883. {
  1884.         if(!kongflag)
  1885.         {        
  1886.                 g_MBHoldReg1[5] = 230;
  1887.                 kongflag = 1;
  1888.                 j_syn = 1 ;                                //8.1添加  为了确定电容配置 界面
  1889.                 init_Cset();
  1890.                 G_cset[0]=1;
  1891.                 Display_Configura();
  1892.         }                                
  1893.         Run_setkey();
  1894. }
  1895. void G_CapSN1()        //数据                //电容配置,界面设置内容
  1896. {
  1897.         if(!kongflag)
  1898.         {        
  1899.                 kongflag = 1;
  1900.                 j_syn = 0 ;                                //8.1添加  为了确定电容配置 界面
  1901.                 init_Cset();
  1902.                 G_cset[1]=1;
  1903.                 g_MBHoldReg1[5] = 180;
  1904.         }
  1905.         Display_Configura();                        
  1906.         Run_setkey();
  1907. }
  1908. void G_CapSN2()        //数据                //电容配置,界面设置内容
  1909. {
  1910.         if(!kongflag)
  1911.         {        
  1912.                 kongflag = 1;
  1913.                 init_Cset();
  1914.                 j_syn = 0 ;                                //8.1添加  为了确定电容配置 界面
  1915.                 G_cset[2]=1;
  1916.                 g_MBHoldReg1[5] = 181;
  1917.         }
  1918.         Display_Configura();                        
  1919.         Run_setkey();
  1920. }
  1921. void G_CapSN3()        //数据                //电容配置,界面设置内容
  1922. {
  1923.         if(!kongflag)
  1924.         {        
  1925.                 kongflag = 1;
  1926.                 j_syn = 2 ;                                //8.1添加  为了确定电容配置 界面
  1927.                 init_Cset();
  1928.                 G_cset[8]=1;
  1929.                 g_MBHoldReg1[5] = 188;
  1930.         }
  1931.         Display_Configura();                        
  1932.         Run_setkey();
  1933. }
  1934. void G_VE()        //                //电容配置,界面设置内容
  1935. {
  1936.         if(!kongflag)
  1937.         {        
  1938.                 g_MBHoldReg1[5] = 231;
  1939.                 kongflag = 1;
  1940.                 j_syn = 3 ;                                //8.1添加  为了确定电容配置 界面
  1941.                 init_Cset();
  1942.                 G_cset[3]=1;
  1943.                 Display_Configura();
  1944.         }                                
  1945.         Run_setkey();
  1946. }
  1947. void G_CapVE1()         //数据                //电容配置,界面设置内容
  1948. {
  1949.         if(!kongflag)
  1950.         {        
  1951.                 kongflag = 1;
  1952.                 init_Cset();
  1953.                 G_cset[4]=1;
  1954.                 j_syn = 0 ;                                //8.1添加  为了确定电容配置 界面
  1955.                 g_MBHoldReg1[5] = 182;
  1956.         }
  1957.         Display_Configura();                        
  1958.         Run_setkey();
  1959. }
  1960. void G_CapVE2()         //数据                //电容配置,界面设置内容
  1961. {
  1962.         if(!kongflag)
  1963.         {        
  1964.                 kongflag = 1;
  1965.                 init_Cset();
  1966.                 G_cset[5]=1;
  1967.                 j_syn = 0 ;                                //8.1添加  为了确定电容配置 界面
  1968.                 g_MBHoldReg1[5] = 183;
  1969.         }
  1970.         Display_Configura();                        
  1971.         Run_setkey();
  1972. }
  1973. void G_CapVE3()         //数据                //电容配置,界面设置内容
  1974. {
  1975.         if(!kongflag)
  1976.         {        
  1977.                 kongflag = 1;
  1978.                 j_syn = 4 ;                                //8.1添加  为了确定电容配置 界面
  1979.                 init_Cset();
  1980.                 G_cset[11]=1;
  1981.                 g_MBHoldReg1[5] = 189;
  1982.         }
  1983.         Display_Configura();                        
  1984.         Run_setkey();
  1985. }
  1986. void G_Ih()         //                //电容配置,界面设置内容
  1987. {
  1988.         if(!kongflag)
  1989.         {        
  1990.                 g_MBHoldReg1[5] = 232;
  1991.                 kongflag = 1;
  1992.                 j_syn = 5 ;                                //8.1添加  为了确定电容配置 界面
  1993.                 init_Cset();
  1994.                 G_cset[6]=1;
  1995.                 Display_Configura();
  1996.         }
  1997.                                 
  1998.         Run_setkey();
  1999. }
  2000. void G_CapIH1()         //数据                //电容配置,界面设置内容
  2001. {
  2002.         if(!kongflag)
  2003.         {        
  2004.                 kongflag = 1;
  2005.                 j_syn = 6 ;                                //8.1添加  为了确定电容配置 界面
  2006.                 init_Cset();
  2007.                 G_cset[7]=1;
  2008.                 g_MBHoldReg1[5] = 184;
  2009.         }
  2010.         Display_Configura();                        
  2011.         Run_setkey();
  2012. }
  2013. void G_CapIH2()         //数据                //电容配置,界面设置内容
  2014. {
  2015.         if(!kongflag)
  2016.         {        
  2017.                 kongflag = 1;
  2018.                 init_Cset();
  2019.                 G_cset[8]=1;
  2020.                 g_MBHoldReg1[5] = 185;
  2021.         }
  2022.         Display_Configura();                        
  2023.         Run_setkey();
  2024. }
  2025. void G_Il()         //                //电容配置,界面设置内容
  2026. {
  2027.         if(!kongflag)
  2028.         {        
  2029.                 g_MBHoldReg1[5] = 233;
  2030.                 kongflag = 1;
  2031.                 j_syn = 7 ;                                //8.1添加  为了确定电容配置 界面
  2032.                 init_Cset();
  2033.                 G_cset[9]=1;
  2034.                 Display_Configura();
  2035.         }
  2036.                                 
  2037.         Run_setkey();
  2038. }
  2039. void G_CapIL1()         //数据                //电容配置,界面设置内容
  2040. {
  2041.         if(!kongflag)
  2042.         {        
  2043.                 kongflag = 1;
  2044.                 j_syn = 8 ;                                //8.1添加  为了确定电容配置 界面
  2045.                 init_Cset();
  2046.                 G_cset[10]=1;
  2047.                 g_MBHoldReg1[5] = 186;
  2048.         }
  2049.         Display_Configura();                        
  2050.         Run_setkey();
  2051. }
  2052. void G_CapIL2()         //数据                //电容配置,界面设置内容
  2053. {
  2054.         if(!kongflag)
  2055.         {        
  2056.                 kongflag = 1;
  2057.                 init_Cset();
  2058.                 G_cset[11]=1;
  2059.                 g_MBHoldReg1[5] = 187;
  2060.         }
  2061.         Display_Configura();                        
  2062.         Run_setkey();
  2063. }
  2064. void Bitwise(Uchar a)         //取反
  2065. {
  2066.         if(a == 0)
  2067.         {        
  2068.                 a = 1;               
  2069.         }
  2070.         else
  2071.         a = 0;
  2072. }
  2073. /////32组电容器标号,接线方式和容量
  2074. void Cx_control0()         //  i值 0-31  手动控制
  2075. {
  2076.                 g_InitiativeFlag = 0 ;                        //进入手动控制界面后 都是被控  退出后重新竞争主机(新乡)
  2077.         //        g_CFlagTimeCnt = 0 ;
  2078.                 if(!kongflag)
  2079.                 {        
  2080.                                 g_MBHoldReg1[5] = 110;
  2081.                                 kongflag = 1;
  2082.                                 //Npage = 0;                        //确保进入手动控制界面的时间是从c01开始
  2083.                                 init_Cmcontrol();                                
  2084. //                                initcc();                        //初始化电容器容量,解决修改后不能更新的问题
  2085.                                 Display_Mcontrol(g_Ccontrol);                 
  2086.                 }                        
  2087.                 CxcontrolKey();
  2088. }
  2089. void Cx_control1()         //  i值 1-64
  2090. {
  2091.         if(!kongflag)
  2092.         {        
  2093.                 g_MBHoldReg1[5] = 111;
  2094.                 kongflag = 1;
  2095.                 init_Cmcontrol();
  2096.                 //G_mcontrol[1]=1;               
  2097.                 Display_Mcontrol(2);                 
  2098.         }        
  2099.         CxcontrolKey();
  2100. }

  2101. //////////////////
  2102. void CxcontrolKey()    //手动控制按键扫描  手动投切
  2103. {
  2104.         unsigned char tmp;        
  2105.         u8 i = 0;
  2106.         tmp = g_keyValue;                                           //键值
  2107.         g_keyValue = 0;
  2108.         //g_InitiativeFlag = 0 ;
  2109.         //g_CFlagTimeCnt = 0 ;
  2110.         Auto_manual = 1;
  2111.         switch(tmp)
  2112.         {
  2113.                 case KCR://实现电容投切
  2114.                 {
  2115.                                 kongflag =0;
  2116.                                 for(i=0;i<64;i++)
  2117.                                 {
  2118.                                         if((G_mcontrol[i+1] == 1)&&(capdevice[i].cctype!=0))//&&(g_warnFlag == 0))                                                //选中,可进行投退
  2119.                                         {                                       
  2120.                                                 if(capdevice[i].cstatus==0)        {capdevice[i].cstatus=1;}
  2121.                                                         else{capdevice[i].cstatus=0;}                                       
  2122.                                                 
  2123.                                                 if((i+1) == g_CapSN1)
  2124.                                                 {        
  2125.                                                         if(capdevice[i].cstatus==0){Drq1=1;Drt1=0;}                                                                                //Drq1=1;Drt1=0;}//J_Cq1 =1;A1_C = 1;}                //电容1切除
  2126.                                                         else
  2127.                                                         {
  2128.                                                                 Drq1=0;Drt1=1;
  2129.                                                                 j_flag=1;
  2130.                                                                 if(g_RunID1==1){T_CASTD1 = 0;DISchargeD1 = 0;}
  2131.                                                         }
  2132.                                                 }else if((i+1) == g_CapSN2)
  2133.                                                 {        
  2134.                                                         if(capdevice[i].cstatus==0)        
  2135.                                                         {
  2136.                                                                 Drq2=1;Drt2=0;//J_Cq3 =1;A2_C =1;                                        //电容2切除
  2137.                                                         }
  2138.                                                         else
  2139.                                                         {                                                
  2140.                                                                 Drq2=0;Drt2=1;
  2141.                                                                 j_flag2=1;//J_Cc3 = 1;A2_C =1;
  2142.                                                                 if(g_RunID1==1){T_CASTD1 = 0;DISchargeD2 = 0;}                //电容2投入
  2143.                                                         }
  2144.                                                 }                                                
  2145.                                         }                                
  2146.                                 }
  2147.                                 if(Host_Flag == 1)//主机
  2148.                                 {
  2149.                                         Struct_SendData();
  2150.                                         UartSends(17);
  2151.                                 }               
  2152.                 }break;
  2153.                 case KESC://返回上级菜单
  2154.                 {
  2155.                                 Npage = 0;
  2156.                                 g_Ccontrol = 1;
  2157.                                 LcmClear(0);
  2158.                                 pMenu = pMenu -> parentMenuItem;                                                
  2159.                 }break;
  2160.                 case KUP://实现菜单切换
  2161.                 {
  2162.                                 kongflag = 0;               
  2163.                                 if(g_Ccontrol > 1) g_Ccontrol -- ;
  2164.                           else {g_Ccontrol = 64 ; LcmClear(0);}
  2165.                                 if((g_Ccontrol)%12 == 0)//换页时清屏 0.6.12.18.24.30
  2166.                                 LcmClear(0);
  2167. //                                pMenu = pMenu -> lastMenuItem;
  2168.                                 Npage = (g_Ccontrol -1)/12;                                                        
  2169.                 }break;
  2170.                 case KDOWN://实现菜单切换
  2171.                 {
  2172.                                 kongflag = 0;
  2173.                                 if(g_Ccontrol < 64) g_Ccontrol ++ ;
  2174.                            else g_Ccontrol = 1 ;
  2175.                                 if((g_Ccontrol -1 )%12 == 0)//换页时清屏 5.11.17.23.29
  2176.                                 LcmClear(0);
  2177. //                                pMenu = pMenu -> nextMenuItem;
  2178.                                 Npage = (g_Ccontrol -1)/12;                                                
  2179.                 }break;
  2180.                 default:
  2181.                 break;
  2182.         }
  2183. }






  2184. //zhangjian
  2185. u8 Warn_Tui_Gong = 1; //要退的共补的数量
  2186. //报警时的共补退函数

  2187. void Warn_CapJ_Tui()
  2188. {
  2189.         u32 temp = 0x0fffffff;
  2190.         u32 i = 0;
  2191.         unsigned char need = 0;
  2192.         unsigned char all[64] = {0};
  2193.         unsigned char j = 0;
  2194.         unsigned char k =0;
  2195.         unsigned char last = 0;        
  2196.         Tou_Gong = 0;
  2197.         Tou_Fen = 0;
  2198.         for(i = 0;i<SystemPara[7];i++)
  2199.         {
  2200.                 if((capdevice[SystemPara[6]+i].cstatus) != 0)
  2201.                 {
  2202.                         if((capdevice[SystemPara[6]+i].cvalue) <= temp)
  2203.                         {
  2204.                                 temp = capdevice[SystemPara[6]+i].cvalue;
  2205.                                 need = SystemPara[6]+i;
  2206.                                 need++;
  2207.                         }
  2208.                 }
  2209.         }
  2210.         if(need != 0)
  2211.         {
  2212.                 for(i = 0;i<SystemPara[7];i++)
  2213.                 {
  2214.                         if(capdevice[SystemPara[6]+i].cstatus != 0)
  2215.                         {        
  2216.                                 if(capdevice[SystemPara[6]+i].cvalue == capdevice[need-1].cvalue)        
  2217.                                 {
  2218.                                         all[j] = SystemPara[6]+i;                                                //如果有多个与所需电容量的电容器都取出来
  2219.                                         j++;
  2220.                                 }
  2221.                         }
  2222.                 }
  2223.         }
  2224.         Warn_Tui_Gong = j;
  2225.         Tui_Gong = j;

  2226.         if(j >= 1)
  2227.         {
  2228.                 last = all[0];
  2229.                 for(k = 0;k<j;k++)
  2230.                 {
  2231.                         if(capdevice[all[k]].count < capdevice[last].count)
  2232.                                 last = all[k];                             //多个电容器容量相同的 比较投入次数  投入次数最少的一个
  2233.                 }
  2234.                 capdevice[last].cstatus = 0;
  2235.                 capdevice[last].count += 1;
  2236.         }
  2237. }  
  2238. //报警时的分补退函数
  2239. /*void Warn_CapX_Tui(u8 x)
  2240. {
  2241.         u8 i = 0;
  2242.         u32 temp = 0x0fffffff;
  2243.         u8 need = 0;
  2244.         u8 all[64] = {0};
  2245.         u8 j = 0;
  2246.         u8 k =0;
  2247.         u8 last = 0;        
  2248.         u8 Nn = 0;
  2249.         Tou_Gong = 0;
  2250.         Tou_Fen = 0;
  2251.         if(x == 1)
  2252.         {
  2253.                 Nn = 0;
  2254.         }
  2255.         else if(x == 2)
  2256.         {
  2257.                 Nn = 1;
  2258.         }
  2259.         else if(x == 3)
  2260.         {
  2261.                 Nn = 2;
  2262.         }
  2263.         for(i = 0;i<(SystemPara[6]/3);i++)
  2264.         {
  2265.                 if((capdevice[3*i+Nn].cstatus) != 0)
  2266.                 {
  2267.                         
  2268.                                 if((capdevice[3*i+Nn].cvalue) <= temp)
  2269.                                 {
  2270.                                         temp = capdevice[3*i+Nn].cvalue;
  2271.                                         need = 3*i+Nn;                                              //取得与小于无功功率且最小的电容器容量
  2272.                                         need++;
  2273.                                 }
  2274.                 }
  2275.         }
  2276.         if(need != 0)
  2277.         {
  2278.                 for(i = 0;i<(SystemPara[6]/3);i++)
  2279.                 {
  2280.                         if(capdevice[3*i+Nn].cstatus != 0)
  2281.                         {        
  2282.                                 if(capdevice[3*i+Nn].cvalue == capdevice[need-1].cvalue)        
  2283.                                 {
  2284.                                         all[j] = 3*i+Nn;                                                //如果有多个与所需电容量的电容器都取出来
  2285.                                         j++;
  2286.                                 }
  2287.                         }
  2288.                 }
  2289.         }
  2290.         Tui_Fen = j;
  2291.         if(j >= 1)
  2292.         {
  2293.                 last = all[0];
  2294.                 for(k = 0;k<j;k++)
  2295.                 {
  2296.                         if(capdevice[all[k]].count < capdevice[last].count)
  2297.                                 last = all[k];                             //多个电容器容量相同的 比较投入次数  投入次数最少的一个
  2298.                 }
  2299.                 capdevice[last].cstatus = 0;
  2300.                 capdevice[last].count += 1;
  2301.         }               
  2302. }*/
  2303. //共补投退逻辑 用于混补
  2304. /*void CapJ_Controls()   //共补逻辑
  2305. {
  2306.         //共补逻辑(投)
  2307.         if((g_Pfa < g_RunCOS*10)&&(g_Pfb < g_RunCOS*10)&&(g_Pfc < g_RunCOS*10)&&((Qaflag == 0)&&(Qbflag == 0)&&(Qcflag == 0)))
  2308.         {
  2309.                 CapJT_Sub();
  2310.         }
  2311.         //共补逻辑(退)
  2312.         if((Qaflag == 1)&&(Qbflag == 1)&&(Qcflag == 1))
  2313.         {
  2314.                 CapJQ_Sub();
  2315.         }
  2316. }*/
  2317. //纯共补的 共补投退逻辑
  2318. void CapJ_Controls_Chun()   //共补逻辑
  2319. {
  2320.         //共补逻辑(投)
  2321.         if((g_Pf < g_RunCOS*10)&&(Qflag == 0))
  2322.         {
  2323.                 CapJT_Chun();
  2324.         }
  2325.         //共补逻辑(退)
  2326.         if(Qflag == 1)
  2327.         {
  2328.                 CapJQ_Chun();
  2329.         }
  2330. }
  2331. //分补投退逻辑
  2332. /*void CapX_Controls()  //分补逻辑
  2333. {
  2334.         //分补逻辑(投)
  2335.         if((g_warnFlag == 0)&&(g_warnFlaga ==0)&&(g_warnFlagIa == 0))
  2336.         {        
  2337.                 if((g_Pfa < g_RunCOS*10)&&(Qaflag == 0))
  2338.                 {
  2339.                         CapXT_Sub(1);        
  2340.                 }   
  2341.         }  
  2342.         if((g_warnFlag == 0)&&(g_warnFlagb ==0)&&(g_warnFlagIb == 0))                             
  2343.         {        
  2344.                 if((g_Pfb < g_RunCOS*10)&&(Qbflag == 0))
  2345.                 {
  2346.                         CapXT_Sub(2);
  2347.                 }
  2348.         }
  2349.         if((g_warnFlag == 0)&&(g_warnFlagc ==0)&&(g_warnFlagIc == 0))
  2350.         {
  2351.                 if((g_Pfc < g_RunCOS*10)&&(Qcflag == 0))
  2352.                 {
  2353.                         CapXT_Sub(3);
  2354.                 }
  2355.         }
  2356.         //分补逻辑(退)
  2357.         if((g_warnFlag == 0)&&(g_warnFlaga ==0)&&(g_warnFlagIa == 0))
  2358.         {        
  2359.                 if(Qaflag == 1)
  2360.                         CapXQ_Sub(1);
  2361.         }
  2362.         if((g_warnFlag == 0)&&(g_warnFlagb ==0)&&(g_warnFlagIb == 0))
  2363.         {        
  2364.                 if(Qbflag == 1)
  2365.                         CapXQ_Sub(2);
  2366.         }
  2367.         if((g_warnFlag == 0)&&(g_warnFlagc ==0)&&(g_warnFlagIc == 0))
  2368.         {
  2369.                 if(Qcflag == 1)
  2370.                         CapXQ_Sub(3);
  2371.         }
  2372.         
  2373. } */
  2374. //混补投退逻辑
  2375. /*void CapXJ_Controls()                      //共补分补混合
  2376. {
  2377. //        unsigned char a = 0;
  2378. //        unsigned char b = 0;
  2379. //        unsigned char c = 0;
  2380.         
  2381.         //共补逻辑
  2382.         if((g_warnFlag == 0)&&(g_warnFlaga ==0)&&(g_warnFlagb == 0)&&(g_warnFlagc == 0)&&(g_warnFlagIa ==0)&&(g_warnFlagIb == 0)&&(g_warnFlagIc == 0))
  2383.                 CapJ_Controls();
  2384.                         
  2385.         //分补逻辑(投)
  2386.         if(Tou_Gong == 0)
  2387.         {
  2388.                 if((g_warnFlag == 0)&&(g_warnFlaga ==0)&&(g_warnFlagIa == 0))
  2389.                 {        
  2390.                         if((g_Pfa < g_RunCOS*10)&&(Qaflag == 0))
  2391.                         {
  2392.                                 CapXT_Sub(1);        
  2393.                         }   
  2394.                 }  
  2395.                 if((g_warnFlag == 0)&&(g_warnFlagb ==0)&&(g_warnFlagIb == 0))                             
  2396.                 {        
  2397.                         if((g_Pfb < g_RunCOS*10)&&(Qbflag == 0))
  2398.                         {
  2399.                                 CapXT_Sub(2);
  2400.                         }
  2401.                 }
  2402.                 if((g_warnFlag == 0)&&(g_warnFlagc ==0)&&(g_warnFlagIc == 0))
  2403.                 {
  2404.                         if((g_Pfc < g_RunCOS*10)&&(Qcflag == 0))
  2405.                         {
  2406.                                 CapXT_Sub(3);
  2407.                         }
  2408.                 }               
  2409.         }
  2410.         //分补逻辑(退)
  2411.         if(Tui_Gong == 0)
  2412.         {
  2413.                 if((g_warnFlag == 0)&&(g_warnFlaga ==0)&&(g_warnFlagIa == 0))
  2414.                 {        
  2415.                         if(Qaflag == 1)
  2416.                                 CapXQ_Sub(1);
  2417.                 }
  2418.                 if((g_warnFlag == 0)&&(g_warnFlagb ==0)&&(g_warnFlagIb == 0))
  2419.                 {        
  2420.                         if(Qbflag == 1)
  2421.                                 CapXQ_Sub(2);
  2422.                 }
  2423.                 if((g_warnFlag == 0)&&(g_warnFlagc ==0)&&(g_warnFlagIc == 0))
  2424.                 {
  2425.                         if(Qcflag == 1)
  2426.                                 CapXQ_Sub(3);
  2427.                 }        
  2428.         }        
  2429. }*/
  2430. u32 Find_min(u32 Qa,u32 Qb,u32 Qc)
  2431. {
  2432.         u32 min = 0;
  2433.         min = Qa;
  2434.         if(Qb<min)
  2435.                 min = Qb;
  2436.         if(Qc<min)
  2437.                 min = Qc;
  2438.         return (min);
  2439. }
  2440. u32 Find_max(u32 Qa,u32 Qb,u32 Qc)
  2441. {
  2442.         u32 max = 0;
  2443.         max = Qa;
  2444.         if(Qb > max)
  2445.                 max = Qb;
  2446.         if(Qc > max)
  2447.                 max = Qc;
  2448.         return (max);
  2449. }
  2450. //共补投函数 用于混补
  2451. /*void CapJT_Sub()    //共补电容器投 子函数
  2452. {
  2453.         unsigned char i = 0;
  2454.         u32 temp = 0x0fffffff;
  2455.         u32 g_Qsn = 0;
  2456.         u8 need = 0;
  2457.         u8 all[64] = {0};
  2458.         u8 j = 0;
  2459.         u8 k =0;
  2460.         u8 last = 0;
  2461.         Tui_Gong = 0;
  2462.         Tui_Fen = 0;
  2463.         g_Qsn = Find_min(g_Qa,g_Qb,g_Qc)/100;
  2464.         for(i = 0;i<SystemPara[7];i++)
  2465.         {
  2466.                 if((capdevice[SystemPara[6]+i].cvalue != 0)&&(capdevice[SystemPara[6]+i].cstatus == 0))
  2467.                 {
  2468.                         if((g_Qsn  >= g_RunQC*capdevice[SystemPara[6]+i].cvalue/3)&&((g_Qsn - g_RunQC*(capdevice[SystemPara[6]+i].cvalue/3))<0x0fffffff))
  2469.                         {                        
  2470.                                 if((g_Qsn - g_RunQC*(capdevice[SystemPara[6]+i].cvalue/3)) <= temp)
  2471.                                 {                                       
  2472.                                         temp = g_Qsn - g_RunQC*(capdevice[SystemPara[6]+i].cvalue/3);
  2473.                                         need = SystemPara[6]+i;  
  2474.                                                                                     //取得与小于无功功率且最接近的电容器容量
  2475.                               
  2476. ……………………

  2477. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

全部资料下载地址:
http://www.51hei.com/bbs/dpj-109977-1.html



评分

参与人数 2黑币 +17 收起 理由
zhangjianhu + 5
YJGG + 12 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏10 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:415572 发表于 2018-12-7 10:25 | 只看该作者
最近正在为这个菜单烦恼
回复

使用道具 举报

板凳
ID:481570 发表于 2019-6-6 10:40 | 只看该作者
楼主  你也是做无功补偿的嘛
回复

使用道具 举报

地板
ID:18591 发表于 2019-6-6 23:32 | 只看该作者
感謝~~~~~~~~~~~~~~~~
回复

使用道具 举报

5#
ID:568895 发表于 2019-6-24 10:57 | 只看该作者
大佬能给一下menu.h这个头文件吗?pdf中描述的结构体和程序里的不一样
回复

使用道具 举报

6#
ID:119642 发表于 2021-2-21 20:39 | 只看该作者
这个太牛了。
回复

使用道具 举报

7#
ID:517951 发表于 2021-2-22 08:38 | 只看该作者
好帖收藏下来,仔细拜读一下.
回复

使用道具 举报

8#
ID:168565 发表于 2021-2-25 23:01 | 只看该作者
谢谢分享,好好学习一下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表