/*** 2020 10 16 21:21硫化机控制程序 ***/    
 /****L971 CODE5035*********************/          
               #include     <REG52.H>  
               #include     <intrins.h>
               #include     <string.h>
               #include     "stdio.h"
               #include     <stdlib.h>
               #define      uint unsigned int
               #define      uchar unsigned char
               #define      IAP_ADDRESS_Time  0x0000   //时间 EEPROM首地址
               #define      CMD_IDLE    0         //空闲模式
               #define      CMD_READ    1         //IAP字节读命令
               #define      CMD_PROGRAM 2         //IAP字节编程命令
               #define      CMD_ERASE   3         //IAP扇区擦除命令
               #define      ENABLE_IAP  0x82      //if SYSCLK<20MHz
               #define      IAP_ADDRESS 0x0000    //时间 EEPROM首地址
               typedef      unsigned char BYTE;
               typedef      unsigned int WORD;
               bit          Signauto=0;              /*退出循环检测*/
               bit           Rst_Bit=0;            /**/
               sbit         OUT0=P2^6;             //前闸前进  光耦输出    
               sbit         OUT1=P2^7;              //前闸后退  光耦输出    
               sbit         OUT2=P1^0;              //后闸前进
               sbit         OUT3=P1^1;            //后闸后退
               sbit         OUT4=P1^2;              //
               sbit         M_Pump=P1^3;             //大泵溢流
               sbit         PRESS=P1^4;             //辅助压力
               sbit         Model_merge=P1^5;      //并流输出
               sbit         Model_close=P1^6;     //合模     下降
               sbit         Model_open=P1^7;         //开模     上升
               sbit         ALARM=P5^4;              //警报
               sbit         MOTOR=P5^5;             //电机
               sbit         INTPUT1=P3^2;
               sbit         INTPUT2=P3^3;
               sbit         INTPUT3=P3^4;
               sbit         INTPUT4=P3^5;
               sbit         INTPUT5=P3^6;
               sbit         INTPUT6=P3^7;
               sbit         INTPUT7=P2^0;
               sbit         INTPUT8=P2^1;
               sbit         INTPUT9=P2^2;
               sbit         INTPUT10=P2^3;
               sbit         INTPUT11=P2^4;
               sbit         INTPUT12=P2^5;
               uint         Ad_data;
               uint         DELAY_A;              //排气一段延时时间
               uint         DELAY_B;              //排气二段延时时间
               uint         DELAY_C;              //排气三段延时时间
               uint         DELAY_D;              //排气四段延时时间
               uint         DELAY_E;              //排气一段停顿延时时间
               uint         DELAY_F;              //排气二段停顿延时时间
               uint         DELAY_G;              //排气三段停顿延时时间
               uint         DELAY_H;              //排气四段停顿延时时间
               uint         DELAY_I;              //硫化开模延时时间
               uint         DELAY_J;              //合模电磁阀延时
               uint         DELAY_K;              //开模电磁阀延时
               uint         a[10];                //定义数组a  
               uchar        i;                    //串口接收计数器
               uchar        k;                    //信号输入高电平计数器
               uint         counter;              //产量计数器
               uint         RUN_TIM;
               bit           Receive_Flag;
               bit          Run_Flag;
               uint         FLAG_S;                 //触摸屏显示标志
               uchar        kcounter,kstatus;     //按键计数标志 按键状态标志
 /*----关闭IAP----------------------------*/
               void IapIdle()
               {
               IAP_CONTR = 0;                  //关闭IAP功能
               IAP_CMD = 0;                    //清除命令寄存器
               IAP_TRIG = 0;                   //清除触发寄存器
               IAP_ADDRH = 0x80;               //将地址设置到非IAP区域
               IAP_ADDRL = 0;
               }
 /*-从ISP/IAP/EEPROM区域读取一字节-*/
               BYTE IapReadByte(WORD addr)
               {
               BYTE dat;                       //数据缓冲区
               IAP_CONTR = ENABLE_IAP;         //使能IAP
               IAP_CMD = CMD_READ;             //设置IAP命令
               IAP_ADDRL = addr;               //设置IAP低地址
               IAP_ADDRH = addr >> 8;          //设置IAP高地址
               IAP_TRIG = 0x5a;                //写触发命令(0x5a)
               IAP_TRIG = 0xa5;                //写触发命令(0xa5)
               _nop_();                        //等待ISP/IAP/EEPROM操作完成
               dat = IAP_DATA;                 //读ISP/IAP/EEPROM数据
               IapIdle();                      //关闭IAP功能
               return dat;                     //返回
               }
 /*-写一字节数据到ISP/IAP/EEPROM区域-*/
               void IapProgramByte(WORD addr, BYTE dat)
               {
               IAP_CONTR = ENABLE_IAP;         //使能IAP
               IAP_CMD = CMD_PROGRAM;          //设置IAP命令
               IAP_ADDRL = addr;               //设置IAP低地址
               IAP_ADDRH = addr >> 8;          //设置IAP高地址
               IAP_DATA = dat;                 //写ISP/IAP/EEPROM数据
               IAP_TRIG = 0x5a;                //写触发命令(0x5a)
               IAP_TRIG = 0xa5;                //写触发命令(0xa5)
               _nop_();                        //等待ISP/IAP/EEPROM操作完成
               IapIdle();
               }
 /*---扇区擦除---------------*/
               void IapEraseSector(WORD addr)
               {
               IAP_CONTR = ENABLE_IAP;         //使能IAP val=IapReadByte(IAP_ADDRESS+1);
               IAP_CMD = CMD_ERASE;            //设置IAP命令
               IAP_ADDRL = addr;               //设置IAP低地址
               IAP_ADDRH = addr >> 8;          //设置IAP高地址
               IAP_TRIG = 0x5a;                //写触发命令(0x5a)
               IAP_TRIG = 0xa5;                //写触发命令(0xa5)
               _nop_();                        //等待ISP/IAP/EEPROM操作完成
               IapIdle();
               }
 /*------------------------------------------*/
               void delay(uint t)
               {
               uint i,j;
               for(i=0;i<t;i++)
               for(j=0;j<1000;j++);
               }
 /*-----------(1)延时子程序12MHz 加千百十个显示--------*/
                void Delay100ms(uint x)
                {
                int i,j;
                 for(i=0;i<x;i++)
                 {
                 for(j=0;j<9200;j++);
                 printf("n8.val=%d\xff\xff\xff",i);//
                 }
                }
 /*-----------(1)延时子程序12MHz 加千百十个显示--------*/
                void Delay_100ms(uint x)
                {
                int i,j;
                 for(i=0;i<x;i++)
                 {
                 for(j=0;j<9200;j++);
                 printf("n8.val=%d\xff\xff\xff",i);//
                 }
                }               
 /********************************************/             
               void resrt_io()
               {
               OUT0=1;
               OUT1=1;
               OUT2=1;
               OUT3=1;
               OUT4=1;
               M_Pump=1;           //大泵溢流
               PRESS=1;
               Model_close=1;
               Model_merge=1;
               Model_open=1;
               ALARM=1;        //警报
               MOTOR=1;       //电机
               }
 /****************按键计数器状态寄存器归零*************/
                void RstKey()
                {
                kcounter=0;                       //按键计数器归零
                kstatus=0;                        //状态寄存器归零
                }
 /*****************按键低电平检测函数*****************/
                void   LowVoltKey(void)           //按键计数器状态标志加一
                {
                kcounter++;                       
                kstatus++;     
                delay(5);                         //延时                  
                }
 /*****************按键高电平检测函数*****************/
                void    HighVoltKey(void)         //按键计数器加一 状态标志归零
                {
                kcounter++;                       //按键计数器加一
                kstatus=0;                        //按键状态标志归零
                delay(5);                         //延时
                }
 /******************************************/
               void red_eeprom(void)
               {
               uint m,n;        
               m=IapReadByte(IAP_ADDRESS);    //时间前八位
               n=IapReadByte(IAP_ADDRESS+1);  //时间后八位
               DELAY_A=m*256+n;                 //排气一段延时时间
               m=IapReadByte(IAP_ADDRESS+2);  //时间前八位
               n=IapReadByte(IAP_ADDRESS+3);  //时间后八位
               DELAY_B=m*256+n;                 //排气二段延时时间
               m=IapReadByte(IAP_ADDRESS+4);  //时间前八位
               n=IapReadByte(IAP_ADDRESS+5);  //时间后八位
               DELAY_C=m*256+n;                 //排气三段延时时间
               m=IapReadByte(IAP_ADDRESS+6);  //时间前八位
               n=IapReadByte(IAP_ADDRESS+7);  //时间后八位
               DELAY_D=m*256+n;                 //排气四段延时时间
               m=IapReadByte(IAP_ADDRESS+8);  //时间前八位
               n=IapReadByte(IAP_ADDRESS+9);  //时间后八位
               DELAY_E=m*256+n;                 //排气一段停顿延时时间
               m=IapReadByte(IAP_ADDRESS+10); //时间前八位
               n=IapReadByte(IAP_ADDRESS+11); //时间后八位
               DELAY_F=m*256+n;                 //排气二段停顿延时时间
               m=IapReadByte(IAP_ADDRESS+12); //时间前八位
               n=IapReadByte(IAP_ADDRESS+13); //时间后八位
               DELAY_G=m*256+n;                 //排气三段停顿延时时间
               m=IapReadByte(IAP_ADDRESS+14); //时间前八位
               n=IapReadByte(IAP_ADDRESS+15); //时间后八位
               DELAY_H=m*256+n;                 //排气四段停顿延时时间
               m=IapReadByte(IAP_ADDRESS+16); //时间前八位
               n=IapReadByte(IAP_ADDRESS+17); //时间后八位
               DELAY_I=m*256+n;                 //硫化开模延时时间
               m=IapReadByte(IAP_ADDRESS+18); //时间前八位
               n=IapReadByte(IAP_ADDRESS+19); //时间后八位
               DELAY_J=m*256+n;                 //合模电磁阀延时
               m=IapReadByte(IAP_ADDRESS+20); //时间前八位
               n=IapReadByte(IAP_ADDRESS+21); //时间后八位
               DELAY_K=m*256+n;                 //开模电磁阀延时
               }
 /******************************************/
               void Write_EepromTime()
               {
                IapEraseSector(IAP_ADDRESS);                 //扇区擦除
                IapProgramByte(IAP_ADDRESS,DELAY_A/256);     // 排气一段延时时间高位
                IapProgramByte(IAP_ADDRESS+1,DELAY_A%256);   // 排气一段延时时间低位
                IapProgramByte(IAP_ADDRESS+2,DELAY_B/256);   // 排气二段延时时间高位
                IapProgramByte(IAP_ADDRESS+3,DELAY_B%256);   // 排气二段延时时间低位
                IapProgramByte(IAP_ADDRESS+4,DELAY_C/256);   // 排气三段延时时间高位
                IapProgramByte(IAP_ADDRESS+5,DELAY_C%256);   // 排气三段延时时间低位
                IapProgramByte(IAP_ADDRESS+6,DELAY_D/256);   // 排气四段延时时间高位
                IapProgramByte(IAP_ADDRESS+7,DELAY_D%256);   // 排气四段延时时间低位
                IapProgramByte(IAP_ADDRESS+8,DELAY_E/256);   // 排气一段停顿延时时间高位
                IapProgramByte(IAP_ADDRESS+9,DELAY_E%256);   // 排气一段停顿延时时间低位
                IapProgramByte(IAP_ADDRESS+10,DELAY_F/256);  // 排气二段停顿延时时间高位
                IapProgramByte(IAP_ADDRESS+11,DELAY_F%256);  // 排气二段停顿延时时间低位
                IapProgramByte(IAP_ADDRESS+12,DELAY_G/256);  // 排气三段停顿延时时间高位
                IapProgramByte(IAP_ADDRESS+13,DELAY_G%256);  // 排气三段停顿延时时间低位
                IapProgramByte(IAP_ADDRESS+14,DELAY_H/256);  // 排气四段停顿延时时间高位
                IapProgramByte(IAP_ADDRESS+15,DELAY_H%256);  // 排气四段停顿延时时间低位
                IapProgramByte(IAP_ADDRESS+16,DELAY_I/256);  // 硫化开模延时时间高位
                IapProgramByte(IAP_ADDRESS+17,DELAY_I%256);  // 硫化开模延时时间低位
                IapProgramByte(IAP_ADDRESS+18,DELAY_J/256);  // 合模电磁阀延时高位
                IapProgramByte(IAP_ADDRESS+19,DELAY_J%256);  // 合模电磁阀延时低位
                IapProgramByte(IAP_ADDRESS+20,DELAY_K/256);  // 开模电磁阀延时高位
                IapProgramByte(IAP_ADDRESS+21,DELAY_K%256);  // 开模电磁阀延时低位
               }
 /*****************************************/
               void start()
               {
               Run_Flag=1;               //运行标志置一
               M_Pump=1;                   //大泵溢流 关
               Model_merge=1;            //并流输出 关
               ALARM=0;
               Delay100ms(5);           //警报提示
               ALARM=1;    
               Delay100ms(5);           //警报提示
               ALARM=0;
               Delay100ms(5);           //警报提示
               ALARM=1;
               Delay100ms(5);           //警报提示
               ALARM=0;
               Delay100ms(5);           //警报提示
               ALARM=1;               
               FLAG_S=5;                //1模板下降2模板上升3硫化计时4待机停止5开启6停止
               printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
               MOTOR=0;                   //电机开
               PRESS=0;                  //辅助压力
               Model_close=0;           //合模  小缸下降开
               Delay100ms(DELAY_J);       //合模电磁阀延时
               printf("n10.val=%d\xff\xff\xff",DELAY_J);// 显示合模电磁阀延时设置值
               Model_close=1;           //合模 小缸下降关
               PRESS=1;                  //辅助压力关
               M_Pump=0;                   //大泵溢流 开
               Model_merge=0;            //并流输出 开
               FLAG_S=2;                //1模板下降2模板上升3硫化计时4待机停止5开启6停止
               printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
               Signauto=1;               /*电接点压力表输入信号检测标志无输入为1,永久循环*/
                 while(Signauto)           //压力表检测1
                 {
                 RstKey();
                 for(;kcounter<5;)      //输入信号检测循环5次
                 {
                  if(!INTPUT2)            //电接点压力表低电平
                  {
                   LowVoltKey();
                  }
                  else if(~!INTPUT2)    //电接点压力表高电平
                  {
                   HighVoltKey();   
                  }
                 }
                if(kstatus>=3)          /*按键状态标志大于等于3为有效值*/
                 {     
                 Signauto=0;            /*行程输入信号连续检测到五次Signauto=0退出循环*/   
                 }
                }
 //电接点压力表检测
                M_Pump=1;                //大泵溢流关
                Model_merge=1;            //并流输出关
                printf("n10.val=%d\xff\xff\xff",DELAY_E);// 显示一段硫化设置值
                Delay100ms(DELAY_E); //    一段硫化停顿计时
 //第一段硫化停顿
                FLAG_S=1;               //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                PRESS=0;                   //辅助压力开
                Model_open=0;           //开模    小缸 上升
                printf("n10.val=%d\xff\xff\xff",DELAY_A);// 显示设置值
                Delay100ms(DELAY_A);    //第一段排气计时
                Model_open=1;           //开模电磁阀关
 //第一段循环结束
 //第二段合模开始
               Model_close=0;           //合模  小缸下降开
               Delay100ms(DELAY_J);       //合模电磁阀延时
               printf("n10.val=%d\xff\xff\xff",DELAY_J);// 显示合模电磁阀延时设置值
               Model_close=1;           //合模 小缸下降关
               PRESS=1;                  //辅助压力关
               M_Pump=0;                   //大泵溢流 开
               Model_merge=0;            //并流输出 开
               FLAG_S=2;                //1模板下降2模板上升3硫化计时4待机停止5开启6停止
               printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
               Signauto=1;               /*电接点压力表输入信号检测标志无输入为1,永久循环*/
                  while(Signauto)           //压力表检测2
                 {
                 RstKey();
                 for(;kcounter<5;)      //输入信号检测循环5次
                 {
                  if(!INTPUT2)            //电接点压力表低电平
                  {
                   LowVoltKey();
                  }
                  else if(~!INTPUT2)    //电接点压力表高电平
                  {
                   HighVoltKey();   
                  }
                 }
                if(kstatus>=3)          /*按键状态标志大于等于3为有效值*/
                 {     
                 Signauto=0;            /*行程输入信号连续检测到五次Signauto=0退出循环*/   
                 }
                 }
 //电接点压力表检测
                M_Pump=1;                //大泵溢流关
                Model_merge=1;            //并流输出关
                printf("n10.val=%d\xff\xff\xff",DELAY_F);//显示一段硫化设置值
                Delay100ms(DELAY_F);                     //    二段硫化停顿计时    
 //第二段硫化停顿
                FLAG_S=1;               //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                PRESS=0;                   //辅助压力开
                Model_open=0;           //开模    小缸 上升
                printf("n10.val=%d\xff\xff\xff",DELAY_B);// 显示第二段排气计时设置值
                Delay100ms(DELAY_B);    //第二段排气计时
                Model_open=1;           //开模电磁阀关
 //第二段循环结束
 //第三段合模开始
                Model_close=0;          //合模  小缸下降开
                Delay100ms(DELAY_J);       //合模电磁阀延时
                printf("n10.val=%d\xff\xff\xff",DELAY_J);// 显示合模电磁阀延时设置值
                Model_close=1;           //合模 小缸下降关
                PRESS=1;                  //辅助压力关
                M_Pump=0;               //大泵溢流 开
                Model_merge=0;            //并流输出 开
                FLAG_S=2;               //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                Signauto=1;               /*电接点压力表输入信号检测标志无输入为1,永久循环*/
                while(Signauto)           //压力表检测3
                 {
                 RstKey();
                 for(;kcounter<5;)      //输入信号检测循环5次
                 {
                  if(!INTPUT2)            //电接点压力表低电平
                  {
                   LowVoltKey();
                  }
                  else if(~!INTPUT2)    //电接点压力表高电平
                  {
                   HighVoltKey();   
                  }
                 }
                if(kstatus>=3)          /*按键状态标志大于等于3为有效值*/
                 {     
                 Signauto=0;            /*行程输入信号连续检测到五次Signauto=0退出循环*/   
                 }
                 }
 //电接点压力表检测
                M_Pump=1;                //大泵溢流关
                Model_merge=1;            //并流输出关
                printf("n10.val=%d\xff\xff\xff",DELAY_G);// 显示三段硫化设置值
                Delay100ms(DELAY_G);    //三段硫化停顿计时
 //第三段硫化停顿
                FLAG_S=1;               //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                PRESS=0;                   //辅助压力开
                Model_open=0;           //开模    小缸 上升
                printf("n10.val=%d\xff\xff\xff",DELAY_C);// 显示第三段排气计时设置值
                Delay100ms(DELAY_C);    //第三段排气计时
                Model_open=1;           //开模电磁阀关
 //第三段循环结束
 //第四段合模开始
                Model_close=0;          //合模  小缸下降开
                Delay100ms(DELAY_J);       //合模电磁阀延时
                printf("n10.val=%d\xff\xff\xff",DELAY_J);// 显示合模电磁阀延时设置值
                Model_close=1;           //合模 小缸下降关
                PRESS=1;                  //辅助压力关
                M_Pump=0;               //大泵溢流 开
                Model_merge=0;            //并流输出 开
                FLAG_S=2;               //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                Signauto=1;               /*电接点压力表输入信号检测标志无输入为1,永久循环*/
                while(Signauto)           //压力表检测4
                 {
                 RstKey();
                 for(;kcounter<5;)      //输入信号检测循环5次
                 {
                  if(!INTPUT2)            //电接点压力表低电平
                  {
                   LowVoltKey();
                  }
                  else if(~!INTPUT2)    //电接点压力表高电平
                  {
                   HighVoltKey();   
                  }
                 }
                if(kstatus>=3)          /*按键状态标志大于等于3为有效值*/
                 {     
                 Signauto=0;            /*行程输入信号连续检测到五次Signauto=0退出循环*/   
                 }
                 }
 //电接点压力表检测
                M_Pump=1;                //大泵溢流关
                Model_merge=1;            //并流输出关
                printf("n10.val=%d\xff\xff\xff",DELAY_H);// 显示四段硫化设置值
                Delay100ms(DELAY_H);    //四段硫化停顿计时
 //第四段硫化停顿
                FLAG_S=1;               //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                PRESS=0;                   //辅助压力开
                Model_open=0;           //开模    小缸 上升
                printf("n10.val=%d\xff\xff\xff",DELAY_D);// 显示第四段排气计时设置值
                Delay100ms(DELAY_D);    //第四段排气计时
                Model_open=1;           //开模电磁阀关
 //第五段合模开始
                Model_close=0;          //合模  小缸下降开
                Delay100ms(DELAY_J);       //合模电磁阀延时
                printf("n10.val=%d\xff\xff\xff",DELAY_J);// 显示合模电磁阀延时设置值
                Model_close=1;           //合模 小缸下降关
                PRESS=1;                  //辅助压力关
                M_Pump=0;               //大泵溢流 开
                Model_merge=0;            //并流输出 开
                FLAG_S=2;               //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                Signauto=1;               /*电接点压力表输入信号检测标志无输入为1,永久循环*/
                while(Signauto)           //压力表检测5
                 {
                 RstKey();
                 for(;kcounter<5;)      //输入信号检测循环5次
                 {
                  if(!INTPUT2)            //电接点压力表低电平
                  {
                   LowVoltKey();
                  }
                  else if(~!INTPUT2)    //电接点压力表高电平
                  {
                   HighVoltKey();   
                  }
                 }
                if(kstatus>=3)          /*按键状态标志大于等于3为有效值*/
                 {  
                 Signauto=0;            /*行程输入信号连续检测到五次Signauto=0退出循环*/  
                 MOTOR=1;               /*关电机*/   
                 FLAG_S=6;              //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                 printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                 }
                }
                M_Pump=1;               //大泵溢流关
                PRESS=1;                   //辅助压力关
                Model_merge=1;            //并流输出关
                Model_close=1;           //合模主油缸电磁阀关
                Delay100ms(10);           //时间缓冲
                FLAG_S=3;               //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                printf("n10.val=%d\xff\xff\xff",DELAY_I);// 显示设置值
                Delay_100ms(DELAY_I*10); //硫化延时计时
                ALARM=0;
                Delay100ms(5);           //警报提示
                ALARM=1;    
                Delay100ms(5);           //警报提示
                ALARM=0;
                Delay100ms(5);           //警报提示
                ALARM=1;
                Delay100ms(5);           //警报提示
                ALARM=0;
                Delay100ms(5);           //警报提示
                ALARM=1;    
                MOTOR=0;                 /*开电机*/
                PRESS=0;                   //辅助压力开
                Model_open=0;            //开模电磁阀开
                FLAG_S=1;                //
                printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                printf("n10.val=%d\xff\xff\xff",DELAY_K);// 显示设置值
                Delay100ms(DELAY_K);    //开模电磁阀延时
                Model_open=1;           //开模电磁阀关
                PRESS=1;                  //辅助压力关
                MOTOR=1;               /*关电机*/
                counter++;
                printf("n0.val=%d\xff\xff\xff",counter);    // 开模计数
                FLAG_S=4;                //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
               }
 /*------------初始化串口---------------------*/
               void InitUart()
               {
               SCON=0X50;                         //8位数据,可变波特率
               AUXR|=0x01;                        //串口1选择定时器2为波特率发生器
               AUXR|=0X04;                        //定时器2时钟为Fosc,即1T
               T2L=0XE0;                          //设置定时器处置  110592》9600
               T2H=0XFE;                          //设置定时器处置  110592》9600
               AUXR|=0X10;                        //启动定时器2
               TI=1;
               ES=1;                        //
               EA=1;
               }
 /*×--------UART 中断服务程序-------------------**/
 /**×**把接收到的数据存进数组a[i]**i开机初始化****/
 /***×*接收到触摸屏结束码Receive_Flag标志位置1****/
 /****×主程序检测到标志码=1判断指令功能***********/
 /****第一个字节E0存储时间 第一个字节E1存储气压***/
 /****第二个字节01,02,03,04为模式1A B C D段参数***/
 /****第二个字节11,12,13,14为模式2A B C D段参数***/
 /****第二个字节21,22,23,24为模式3A B C D段参数***/
 /****第二个字节31,32,33,34为模式4A B C D段参数***/
               void Uart() interrupt 4 using 1
               {
                if(RI)
                {
                 if(SBUF==0XFA)                     //触摸屏结束码
                 {
                 Receive_Flag=1;                     //接收数据标志置一
                 RI=0;                             //
                 i=0;                             //数组计数器归零
                 }
                 else
                 {
                 a[i]=SBUF;                       //数组下标位置的数据等于SBUF
                 RI=0;                             //
                 i++;
                 }
                }
               }
 /*************************************************/
               void   main( )                     /*主程序开始*/
               {
                resrt_io();
                AUXR=0X80;                        //STC系列的1T 设置
                TMOD=0X01;
                P_SW1=0x00;                       //RXD/P3.0, TXD/P3.1
                Receive_Flag=0;    
                InitUart();                       //初始化串口
                Delay100ms(20);
                red_eeprom();                     //
                printf("0XFF,0XFF,0XFF");
                i=0;                              //数据接收计数器等于0
                Run_Flag=0;
                counter=0;                        //产量归零
                FLAG_S=4;                //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                FLAG_S=6;                //
                printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                printf("n7.val=%d\xff\xff\xff",DELAY_I);    // 硫化时间
                printf("n0.val=%d\xff\xff\xff",counter);    // 开模计数
                while(1)                             //INTPUT1
                {
                  delay(5);                      //运行指示
                  OUT1=0;                          //
 /***************模板上升检测*************/
                  RstKey();                         //按键复位
                  for(;kcounter<5;)               //按键循环5次
                  {
                   if(!INTPUT3)                      //模退 按键低电平
                   {
                   LowVoltKey();
                   }
                   else if(~!INTPUT3)             //模退 按键高电平
                   {
                   HighVoltKey();                     //高电平检测
                   }
                  }
                  if(kstatus>=3)                  /*按键状态标志大于等于3为有效值*/
                  {  
                  FLAG_S=2;                       //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                  printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                  ALARM=0;
                  Delay100ms(5);           //警报提示
                  ALARM=1;    
                  Delay100ms(5);           //警报提示
                  ALARM=0;
                  Delay100ms(5);           //警报提示
                  ALARM=1;
                  Delay100ms(5);           //警报提示
                  ALARM=0;
                  Delay100ms(5);           //警报提示
                  ALARM=1;
                  M_Pump=1;               //大泵溢流 关
                  Model_merge=1;        //并流输出 关
                  delay(5);
                  FLAG_S=5;                      //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                  printf("va1.val=%d\xff\xff\xff",FLAG_S);    //           
                  MOTOR=0;               //开电机
                  PRESS=0;               //辅助压力
                     Model_close=0;        //合模     小缸下降开
                  Delay100ms(DELAY_J);  //合模电磁阀延时
                  M_Pump=0;               //大泵溢流 开
                  Model_merge=0;        //并流输出 开
                  Model_close=1;        //合模     小缸下降关               
                  PRESS=1;               //辅助压力 关
                  delay(50);
                  k=0;  
                  for(;k<=5;)                     /*寄存器复位*/
                   {
                   if(~!INTPUT3)                  /*检测模退按键为高电平?*/
                    {                     
                    k++;
                    delay(10);
                    }
                   else if(!INTPUT3)              /*检测合模按键为低电平?*/
                   k=0;                           /*寄存器复位*/                 
                   }   
                   delay(50);
                   MOTOR=1;                         //关电机
                   M_Pump=1;                         //大泵溢流 关
                   Model_merge=1;                  //并流输出 关
                   Model_close=1;                 //关模板上升
                   PRESS=1;                         //关辅助压力
                   FLAG_S=4;                      //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                   printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                   delay(5);
                   FLAG_S=6;                      //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                   printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                   delay(50);
                   FLAG_S=6;               //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                   printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                  }
 //模板上升
 /***************模板下降检测*************/
                  RstKey();                         //按键复位
                  for(;kcounter<5;)               //按键循环5次
                  {
                   if(!INTPUT4)                      //模退 按键低电平
                   {
                   LowVoltKey();
                   }
                   else if(~!INTPUT4)             //模退 按键高电平
                   {
                   HighVoltKey();                 //高电平检测
                   }
                  }
                  if(kstatus>=3)                  /*按键状态标志大于等于3为有效值*/
                  {   
                  FLAG_S=1;                       //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                  printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                  ALARM=0;
                  Delay100ms(5);           //警报提示
                  ALARM=1;    
                  Delay100ms(5);           //警报提示
                  ALARM=0;
                  Delay100ms(5);           //警报提示
                  ALARM=1;
                  Delay100ms(5);           //警报提示
                  ALARM=0;
                  Delay100ms(5);           //警报提示
                  ALARM=1;    
                  M_Pump=1;               //大泵溢流 关
                  Model_merge=1;        //并流输出 关
                  delay(5);
                  FLAG_S=5;                       //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                  printf("va1.val=%d\xff\xff\xff",FLAG_S);    //       
                  MOTOR=0;                         //开电机  
                  Model_open=0;                   //模板下降
                  PRESS=0;                         //开辅助压力
                  Delay100ms(DELAY_K);  //开模电磁阀延时
                  delay(50);
                  FLAG_S=5;                      //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                  printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                  k=0;  
                  for(;k<=5;)                     /*寄存器复位*/
                   {
                   if(~!INTPUT4)                  /*检测模退按键为高电平?*/
                    {                     
                    k++;
                    delay(10);
                    }
                   else if(!INTPUT4)              /*检测合模按键为低电平?*/
                   k=0;                           /*寄存器复位*/                 
                   }   
                   delay(50);
                   MOTOR=1;                         //关电机
                   Model_open=1;                  //关模板下降
                   PRESS=1;                         //关辅助压力
                   FLAG_S=4;                      //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                   printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                   delay(50);
                   FLAG_S=6;               //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                   printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                  }
 //模板下降
 /***************开机键检测*************/
                  RstKey();                         //按键复位
                  if(!INTPUT1)                     //启动信号键
                  {
                   for(;kcounter<5;)              //按键循环5次
                   {
                    if(!INTPUT1)                  //按键低电平
                    {
                    LowVoltKey();
                    }
                    else if(~!INTPUT1)            //按键高电平
                    {
                    HighVoltKey();
                    }
                   }
                   if(kstatus>=4)                 /*按键状态标志大于等于3为有效值*/
                   {                              /*循环检测 */
                    start();
                   }
                  }
 
                if(Receive_Flag==1)
                {
                Receive_Flag=0;
                 if(a[0]==0XE0)            //EEPROM参数存储
                 {
                    OUT0=0;                    //写EEPROM指示
                  if(a[1]==0X00)            
                   {                                      
                   DELAY_I=a[3]*256+a[2];//硫化开模延时时间
                   }
                   else if(a[1]==0X01)    
                   {
                   DELAY_A=a[3]*256+a[2];//排气一段延时时间
                   }
                   else if(a[1]==0X02)
                   {
                   DELAY_B=a[3]*256+a[2];//排气二段延时时间
                   }
                   else if(a[1]==0X03)
                   {
                   DELAY_C=a[3]*256+a[2];//排气三段延时时间
                   }
                   else if(a[1]==0X04)
                   {
                   DELAY_D=a[3]*256+a[2];//排气四段延时时间
                   }
                   else if(a[1]==0X05)
                   {
                   DELAY_E=a[3]*256+a[2];//排气一段停顿延时
                   }
                   else if(a[1]==0X06)
                   {
                   DELAY_F=a[3]*256+a[2];//排气二段停顿延时
                   }
                   else if(a[1]==0X07)
                   {
                   DELAY_G=a[3]*256+a[2];//排气三段停顿延时
                   }
                   else if(a[1]==0X08)
                   {
                   DELAY_H=a[3]*256+a[2];//排气四段停顿延时
                   }
                   else if(a[1]==0X09)
                   {
                   DELAY_J=a[3]*256+a[2];//合模导通延时
                   }
                   else if(a[1]==0X10)
                   {
                   DELAY_K=a[3]*256+a[2];//开模导通延时
                   }
                   Write_EepromTime();
                   delay(10);
                   OUT0=1;               //写EEPROM指示
                  }
                  else if(a[0]==0XD0)   //动作测试
                  {
                   if(a[1]==0X00)       //电机开
                   {
                   MOTOR=0;
                   }
                   else if(a[1]==0X01)  //后闸前进
                   {
                   OUT2=0;
                   }
                   else if(a[1]==0X02)  //后闸后退
                   {
                   OUT3=0;
                   }
                   else if(a[1]==0X03)  //备用
                   {
                   OUT4=0;
                   }
                   else if(a[1]==0X04)  //
                   {
                   M_Pump=0;               //大泵溢流
                   }
                   else if(a[1]==0X05)  //合模输出
                   {
                   Model_close=0;
                   }
                   else if(a[1]==0X06)  //开模输出
                   {
                   Model_open=0;                    
                   }
                   else if(a[1]==0X07)  //辅助压力
                   {
                   PRESS=0;
                   }
                   else if(a[1]==0X08)  //并流输出
                   {
                   Model_close=0;
                   }
                   else if(a[1]==0X09)  //前闸前进
                   {
                   OUT1=0;
                   }
                   else if(a[1]==0X10)  //前闸后退
                   {
                   OUT2=0;
                   }
                   else if(a[1]==0X11)  //警报输出
                   {
                   ALARM=0;
                   }
                  }
                 else if(a[0]==0XD1)    //动作测试
                  {
                    if(a[1]==0X00)              //电机关
                   {
                   MOTOR=1;
                   }
                   else if(a[1]==0X01)  //后闸前进
                   {
                   OUT2=1;
                   }
                   else if(a[1]==0X02)  //后闸后退
                   {
                   OUT3=1;
                   }
                   else if(a[1]==0X03)  //备用
                   {
                   OUT4=1;
                   }
                   else if(a[1]==0X04)  //
                   {
                   M_Pump=1;               //大泵溢流
                   }
                   else if(a[1]==0X05)  //合模输出
                   {
                   Model_close=1;
                   }
                   else if(a[1]==0X06)  //开模输出
                   {
                   Model_open=1;                    
                   }
                   else if(a[1]==0X07)  //辅助压力
                   {
                   PRESS=1;
                   }
                   else if(a[1]==0X08)  //并流输出
                   {
                   Model_close=1;
                   }
                   else if(a[1]==0X09)  //前闸前进
                   {
                   OUT1=1;
                   }
                   else if(a[1]==0X10)  //前闸后退
                   {
                   OUT2=1;
                   }
                   else if(a[1]==0X11)  //警报输出
                   {
                   ALARM=1;
                   }
                  }
                 else if(a[0]==0XB0)       //  B0 00发送主画面 内容
                  {
                  if(a[1]==0X00)          //
                   {
                    red_eeprom();
                    printf("n7.val=%d\xff\xff\xff",DELAY_I);    // 硫化时间
                    printf("n0.val=%d\xff\xff\xff",counter);    // 开模计数
                   }
                  else if(a[1]==0X01)       //发送参数设置页面内容
                   {
                    red_eeprom();
                    printf("n0.val=%d\xff\xff\xff",DELAY_A);    //排气一段延时时间
                    printf("n1.val=%d\xff\xff\xff",DELAY_B);    //排气二段延时时间
                    printf("n2.val=%d\xff\xff\xff",DELAY_C);    //排气三段延时时间
                    printf("n3.val=%d\xff\xff\xff",DELAY_D);    //排气四段延时时间
                    printf("n4.val=%d\xff\xff\xff",DELAY_E);    //排气一段停顿延时时间
                    printf("n5.val=%d\xff\xff\xff",DELAY_F);    //排气二段停顿延时时间
                    printf("n6.val=%d\xff\xff\xff",DELAY_G);    //排气三段停顿延时时间
                    printf("n7.val=%d\xff\xff\xff",DELAY_H);    //排气四段停顿延时时间
                    printf("n8.val=%d\xff\xff\xff",DELAY_J);    //合模电磁阀延时
                    printf("n9.val=%d\xff\xff\xff",DELAY_K);    //开模电磁阀延时
                   }
                  }
                  else if(a[0]==0XC0)             //手动操作
                  {
                  if(a[1]==0X10)                     //合模
                   {
                    FLAG_S=2;                       //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                    printf("va1.val=%d\xff\xff\xff",FLAG_S);    //    
                    delay(5);
                    FLAG_S=5;                       //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                    printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                    Model_close=0;                 //合模 小油缸下开
                    PRESS=0;                         //辅助压力开
                    Delay100ms(DELAY_J);             //合模电磁阀延时
                    PRESS=1;                         //辅助压力关
                    Model_close=1;                 //合模    小油缸下关
                    M_Pump=0;                     //大泵溢流开
                    Model_merge=0;                  //并流输出开
                   }
                   else if(a[1]==0X11)             //开模
                   {
                    FLAG_S=1;                       //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                    printf("va1.val=%d\xff\xff\xff",FLAG_S);    //    
                    delay(5);
                    FLAG_S=5;                       //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                    printf("va1.val=%d\xff\xff\xff",FLAG_S);    //
                    M_Pump=1;                     //大泵溢流关
                    Model_merge=1;                  //并流输出关
                    PRESS=0;                         //辅助压力开
                    Model_open=0;                 //开模 小油缸上开
                   }
                   else if(a[1]==0X12)             //
                   {
                    ALARM=0;
                    Delay100ms(5);                 //警报提示
                    ALARM=1;
                    ALARM=0;
                    Delay100ms(5);                 //警报提示
                    ALARM=1;
                    MOTOR=0;                         //电机开
                   }
                   }
                   else if(a[0]==0XC1)
                   {
                    if(a[1]==0X10)           
                    {
                    FLAG_S=4;                     //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                    printf("va1.val=%d\xff\xff\xff",FLAG_S);    //    
                    PRESS=1;                         //辅助压力关
                    Model_close=1;                 //合模关
                    M_Pump=1;                     //大泵溢流关
                    Model_merge=1;                  //并流输出关
                    }
                    else if(a[1]==0X11)             
                    {
                    FLAG_S=4;                       //1模板下降2模板上升3硫化计时4待机停止5开启6停止
                    printf("va1.val=%d\xff\xff\xff",FLAG_S);    //    
                    PRESS=1;                         //辅助压力关
                    Model_open=1;                 //开模关
                    M_Pump=1;                     //大泵溢流关
                    Model_merge=1;                  //并流输出关
                    }
                    else if(a[1]==0X12)             //
                    {
                    MOTOR=1;                         //电机关
                    }
                  }
                }  
                delay(5);
                OUT1=1;                    //
               }     
             }                    //L971 CODE5035