单片机自动排列上料控制程序 下
/***************上料时间参数显示******************/
                void dis_timea(uchar s)
                {
                uchar x,y;
                uint i=0;
                A1=s/100;
                A2=(s-A1*100)/10;
                A3=s-A1*100-A2*10;
                for(y=0;y<2;y++)                  //百位显示
                {
                Write_IIC_Command(0XB2+y);        //纵向页
                Write_IIC_Command(00);            //横向离左部边缘开始的距离
                Write_IIC_Command(0X15);          //横向第四个字
                 for(x=0;x<8;x++)                 //横向像素
                 {
                 Write_IIC_Data(show1[x+y*8+A1*16]);     //0--A字符表
                 }
                 for(x=0;x<8;x++)                 //横向像素
                 {
                 Write_IIC_Data(show1[x+y*8+A2*16]);
                 }
                }
                 for(y=0;y<2;y++)                 //十位显示
                 {
                 Write_IIC_Command(0XB2+y);       //纵向页
                 Write_IIC_Command(00);           //横向离左部边缘开始的距离
                 Write_IIC_Command(0X16);         //横向第五个字
                  for(x=0;x<8;x++)                //横向像素
                  {
                  Write_IIC_Data(show1[x+y*8+A3*16]);
                  }
                  for(x=0;x<8;x++)                //横向像素
                  {
                  Write_IIC_Data(0X00);             //2025 4 20
                  }
                 }
                }
 /***************设置参数显示******************/
                void dis_timeb(uchar s)
                {
                uchar x,y;
                uint i=0;
                A1=s/100;
                A2=(s-A1*100)/10;
                A3=s-A1*100-A2*10;
                for(y=0;y<2;y++)                  //百位显示
                {
                Write_IIC_Command(0XB4+y);        //纵向页
                Write_IIC_Command(00);            //横向离左部边缘开始的距离
                Write_IIC_Command(0X15);          //横向第四个字
                 for(x=0;x<8;x++)                 //横向像素
                 {
                 Write_IIC_Data(show1[x+y*8+A1*16]);     //0--A字符表
                 }
                 for(x=0;x<8;x++)                 //横向像素
                 {
                 Write_IIC_Data(show1[x+y*8+A2*16]);
                 }
                }
                 for(y=0;y<2;y++)                 //十位显示
                 {
                 Write_IIC_Command(0XB4+y);       //纵向页
                 Write_IIC_Command(00);           //横向离左部边缘开始的距离
                 Write_IIC_Command(0X16);         //横向第五个字
                  for(x=0;x<8;x++)                //横向像素
                  {
                  Write_IIC_Data(show1[x+y*8+A3*16]);
                  }
                 }
                }
 /***************显示参数归零******************/
                void csgl()
                {
                uchar x,y;
                uint  Cnt=32;
 //参B0 12    00
               for(y=0;y<2;y++)
                {
                Write_IIC_Command(0xb0+y);        //竖向第一行    
                Write_IIC_Command(0x00);
                Write_IIC_Command(0x11);             //横向第三个字
                 for(x=0;x<16;x++)                 //横向像素
                 {
                 Write_IIC_Data(show4[x+y*16+Cnt*0]); //字符表第0个字
                 }
                }
 //数B0 13   01
                for(y=0;y<2;y++)
                {
                Write_IIC_Command(0xb0+y);        //竖向第一行
                Write_IIC_Command(0x00);
                Write_IIC_Command(0x12);             //横向第四个字
                 for(x=0;x<16;x++)                 //横向像素
                 {
                 Write_IIC_Data(show4[x+y*16+Cnt*1]);  //字符表第1个字
                 }
                }
 //归B0 14  02
               for(y=0;y<2;y++)
                {
                Write_IIC_Command(0xb0+y);        //竖向第一行    
                Write_IIC_Command(0x00);
                Write_IIC_Command(0x13);             //横向第五个字
                 for(x=0;x<16;x++)                 //横向像素
                 {
                 Write_IIC_Data(show4[x+y*16+Cnt*27]); //字符表第2个字
                 }
                }
 //零B0 15  03
                for(y=0;y<2;y++)
                {
                Write_IIC_Command(0xb0+y);        //竖向第一行    机
                Write_IIC_Command(0x00);
                Write_IIC_Command(0x14);             //横向第六个字
                 for(x=0;x<16;x++)                 //横向像素
                 {
                 Write_IIC_Data(show4[x+y*16+Cnt*28]);  //字符表第3个字
                 }
                }
               }
 /***************显示开关数率******************/
               void DisRunSpeed()
               {
                uchar x,y;
                uint  Cnt=32;
 //开B2 10 36
               for(y=0;y<2;y++)
                {
                Write_IIC_Command(0xb2+y);         //竖向第一行    
                Write_IIC_Command(0x00);
                Write_IIC_Command(0x10);           //横向第三个字
                 for(x=0;x<16;x++)                 //横向像素
                 {
                 Write_IIC_Data(show4[x+y*16+Cnt*36]); //字符表第0个字
                 }
                }
 //关B2 11 37
                for(y=0;y<2;y++)
                {
                Write_IIC_Command(0xb2+y);        //竖向第一行
                Write_IIC_Command(0x00);
                Write_IIC_Command(0x11);             //横向第四个字
                 for(x=0;x<16;x++)                 //横向像素
                 {
                 Write_IIC_Data(show4[x+y*16+Cnt*37]);  //字符表第1个字
                 }
                }
 //数B2 12  1
               for(y=0;y<2;y++)
                {
                Write_IIC_Command(0xb2+y);        //竖向第一行    
                Write_IIC_Command(0x00);
                Write_IIC_Command(0x12);             //横向第五个字
                 for(x=0;x<16;x++)                 //横向像素
                 {
                 Write_IIC_Data(show4[x+y*16+Cnt*1]); //字符表第2个字
                 }
                }
 //率B2 13  17
                for(y=0;y<2;y++)
                {
                Write_IIC_Command(0xb2+y);        //竖向第一行    机
                Write_IIC_Command(0x00);
                Write_IIC_Command(0x13);          //横向第六个字
                 for(x=0;x<16;x++)                //横向像素
                 {
                 Write_IIC_Data(show4[x+y*16+Cnt*17]);  //字符表第3个字
                 }
                }
               }
 /*----------功能判断子程序------------*/
                void   function(uchar FuncData)
                {
                 uchar  func;
                 func=FuncData;
                 Dis_Num(func);    
                 display(func);                   //临时测试
                 if(func==1)                      //功能设置循环置为1
                 {
                 Initial_LY096BG30();             //初始化显示屏
                 Infrared_delay();                //上料延时
             //    DisNumber(0);                    //功能编号
                 distest(RunTime_A);
                 }
                 if(func==2)                      //功能设置循环置为2
                 {
                 Initial_LY096BG30();             //初始化显示屏
                 photoelectricity_delay();        //光电延时
                 distest(RunTime_B);
                 }
                 if(func==3)                      //功能设置循环置为3
                 {
                 Initial_LY096BG30();             //初始化显示屏
                 DisStopData();                   //显示电机速度
                 dishz(FHz);                      //参数显示 分离lmn百十个位数据
                 }
                 if(func==4)                      //功能设置循环置为4
                 {
                 Initial_LY096BG30();             //初始化显示屏
                 DisMotorSpeed();                 //电机速度
                 distest(CT);                     //占空比
                 }
                 if(func==5)                      //功能设置循环置为4
                 {
                 Initial_LY096BG30();             //初始化显示屏
                 DisRunSpeed();                   //开关数率    计数器
                 display(total);                     //
                }
               }  
 /*----------参数加-----------------*/
                void   DataOn( )                  /*写数据B子函数*/
                {                                 /*子函数开始*/
                valb=valb+1;                      /**加一**/
                if(valb>999)
                valb=0;                           /*大于999归零*/
                }                                 /*子函数结束*/
 /*----------参数减---------------*/
                void   DataDown( )                /*写数据B子函数*/
                {                                 /*子函数开始*/
                valb=valb-1;                      /**加一**/
                if(valb==0)
                valb=999;                         /*大于999归零*/
                }                                                            //                    
 /*-----------加减按键处理子程序------*/
                void   addfunt(int funtt,bit adddec) //功能编号 加减标志
                {
                 int fun;
                 bit adddecb;
                 fun=funtt;
                 adddecb=adddec;
                 switch(fun)
                 {                                //
                   case 1:                        //上升结束延时加
                   if(adddecb)
                   {    
                   valb=RunTime_A;                //数据交上升结束延时加函数子程序处理
                   DataOn();                      //加函数  display()函数处理lmn
                   RunTime_A=valb;                //处理数据交上升结束延时 存储器
                   distest(RunTime_A);            //参数显示 分离lmn百十个位数据
                   write_eeprom();
                   }
                   else
                   {                              //减
                   valb=RunTime_A;                //数据交上升结束延时减函数子程序处理
                   DataDown();                    //减函数  display()函数处理lmn
                   RunTime_A=valb;                //处理数据交上升结束延时 存储器
                   distest(RunTime_A);            //参数显示 分离lmn百十个位数据
                   write_eeprom();
                   }break;   
                   case 2:                        //下降时间加
                   if(adddecb)
                   {    
                   valb=RunTime_B;                //数据交下降时间加函数子程序处理
                   DataOn();                      //加函数  display()函数处理lmn
                   RunTime_B=valb;                //处理数据交下降时间 存储器
                   distest(RunTime_B);            //参数显示 分离lmn百十个位数据
                   write_eeprom();
                   }
                   else
                   {                              //下降时间减
                   valb=RunTime_B;                //数据交减函数子程序处理
                   DataDown();                    //减函数  display()函数处理lmn
                   RunTime_B=valb;                //处理数据交下降时间 存储器
                   distest(RunTime_B);            //参数显示 分离lmn百十个位数据
                   write_eeprom();
                   }
                   break;   
                   case 3:                         //
                   if(adddecb)
                   {   
                    FHz = FHz/100;               //
                    FHz=FHz+1;                     //
                    if(FHz>=200)                 //
                    {
                     FHz=0;                         //
                    }     
                    dishz(FHz);                  //参数显示 分离lmn百十个位数据
                    Timer2_Init();
                    write_eeprom();
           //        write3();                    //写EEPROM lmn百十个位数据
                   }
                   else
                   {                             
                    FHz = FHz/100;              //
                    FHz=FHz-1;                     //
                    if(FHz==0)
                     {
                     FHz=200;
                     }
                    dishz(FHz);                  //参数显示 分离lmn百十个位数据
                    Timer2_Init();                 //
                    write_eeprom();                 //
                   }
                   break;   
                   case 4:                        //占空比
                   if(adddecb)
                   {                              //开模时间加
                   CT++;                          //数据交加函数子程序处理
                   if(CT>99)
                   CT=0;                          //处理数据交开模时间存储器
                   Timer2_Init();                 //定时器2初始化
                   distest(CT);                   //参数显示 分离lmn百十个位数据
                   write_eeprom();
                   }
                   else
                   {                              //开模时间减
                   CT--;                          //数据交加函数子程序处理
                   if(CT<1)
                   CT=99;  
                   Timer2_Init();                 //定时器2初始化
                   distest(CT);                   //参数显示 分离lmn百十个位数据
                   write_eeprom();
                   }
                    break;  
                   case 5:                   
                   if(adddecb)
                   {                              //开模时间加
                   RunTime_A=0X10;                //上料延时
                   RunTime_B=0X20;                //光电延时
                   FHz=190;                      //停顿时间
                   CT=85;                         //电机速度
                   total=5;
                   Timer2_Init();                 //定时器2初始化
                   write_eeprom();                 //
                   display(total);                     //
                   csgl();
                   }
                   else
                   {    
                   RunTime_A=0X10;                //上料延时
                   RunTime_B=0X20;                //光电延时
                   FHz=190;                      //停顿时间
                   CT=85;                         //电机速度
                   total=5;
                   Timer2_Init();                 //定时器2初始化
                   write_eeprom();                 //
                   display(total);                     //
                   csgl();
                   }
                  break;   
                  default :break;
                  }
                 }
 /*************功能设置函数**************/
 /*****功能,加减键设定各界面参数*********/
 /**************     **************/
               void  funset()
               {
                while(func)                       //进入功能设置流程
                {
                 DisSetData();                     //显示参数设置加减设置退出
                 if(func==0)                      //功能计数器为0返回主程序
                 break;                           //功能标志大于等于6功能计数器归零
                 if(!KEY_ADD)                     //检测按键加
                  {                               //数据处理
                   adddecbit=1;                   //加减处理标志置1
                   addfunt(func,adddecbit);       //调用加减处理功能子函数 func界面号adddecbit加减标志
                  }
                  if(!KEY_DEC)                    //检测按键减  
                  {                               //数据处理
                  adddecbit=0;                    //加减处理标志置0
                  addfunt(func,adddecbit);        //调用加减处理功能子函数 func界面号adddecbit加减标志
                  }
                  if(!Funkey)                     //再检测功能键
                  {
                  func++;                         //功能标志加一
                  Delay_50ms(2);                 //延时等待
                  Dis_Num(func);    
                  if(func>=6)                     //功能标志大于等于6归0
                   {
                    func=0;                       //功能计数器归零
                    Initial_LY096BG30();          //初始化显示屏
                   }                                 //
                   function(func);                //刷新功能显示界面
                  }
 // 退出检测
                  RstKey();
                  for(;kcounter<5;)               //按键循环5次
                  if(!Quitkey)                   //按键低电平
                   {
                    LowVoltKey();                      //按键低电平 清除计数器
                   }
                   else if(~!Quitkey)             //按键高电平
                   {
                    HighVoltKey();                     //按键计数器加一 状态计数器加一
                   }
                   if(kstatus>=3)                  /*按键状态标志大于等于3为有效值*/
                   {
                    func=0;
                    cleardisp();
                   }
                 }     
                cleardisp();
                Diswait();
                Delay_50ms(5);
                }
 /*****************************/
               void  MOTORLRUN()                  //顶进
               {
                do
                {
                RstKey();                        //按键复位
                 for(;kcounter<5;)                //按键循环5次
                  {
                   if(!INTPUT1)                   //按键低电平
                   {
                   LowVoltKey();
                   }
                   else if(~!INTPUT1)             //按键高电平
                   {
                   HighVoltKey();
                   }
                  }
                  if(kstatus>=4)                  /*按键状态标志大于等于3为有效值*/
                  {                               /*循环检测 */
                  MOTORRUN_L=0;
                  }
                 }                           
                 while(MOTORRUN_L);
               }
 /*****************************/
               void  MOTORRRUN()                  //顶退
               {
               do
                {
                RstKey();                        //按键复位
                 for(;kcounter<5;)                //按键循环5次
                  {
                   if(!INTPUT2)                   //按键低电平
                   {
                   LowVoltKey();
                   }
                   else if(~!INTPUT2)             //按键高电平
                   {
                   HighVoltKey();
                   }
                  }
                  if(kstatus>=4)                  /*按键状态标志大于等于3为有效值*/
                  {                               /*循环检测 */
                  MOTORRUN_R=0;
                  }
                 }                           
                 while(MOTORRUN_R);
               }
//自动运行      INTPUT3
               void AutoRun()
               {
 /***************检测料满停机信号*********************/
 //低电平开始计时 到设定值料满停机
                do
                 {                                 //定时器检测INTPUTD2
 // 高电平 允许开摇摆电机
                  RstKey();                       //
                  for(;kcounter<5;)               //按键循环5次
                   {
                    if(!EXIT_0)                   //P3.2按键低电平
                    {
                    LowRst();                     //按键低电平 清除计数器
                    }
                    else if(~!EXIT_0)             //按键高电平
                    {
                    HighSet();                    //按键计数器加一 状态计数器加一
                    }
                   }
                   if(kstatus>=3)                 /*按键状态标志大于等于3为有效值*/
                   {
                    Time_A=0;
                    Switch_Flag=0;                //定时器计时标志
                    OUT1=1;                       //放料闸门关
                    if(Photoele_Flag==0)             //光电上料允许
                    {
                    MOTORA_CW=0;                  //上料电机开
                    MOTORB_CW=0;                  //排列电机开启
                    }
                   }
 /******外中断0检测到中断信号 置位Switch_Flag=1***/
 /***************检测上料信号*计时到电机停止******/
                  if(Switch_Flag==1)              /*按键状态标志大于等于3为有效值*/
                  {                                 //Switch_Flag=1;
                   LoaderMotorClose();             //“上料电机”显示关
                   DisWork();                     //显示上料
                   MOTORA_CW=1;                   //上料电机停止
                   OUT1=0;                        //放料闸门开 计时到闸门关闭
                    for(Time_A=0;Time_A<RunTime_A;Time_A++)
                    {                             //循环延时设定时间值
                    dis_timea(Time_A);             //显示上料时间
                    Delay_50ms(5);                 //延时
                   }
                   Clear_State();                 //清除第一行状态显示
                   Switch_Flag=0;                 //上料信号标志复位
                   MOTORA_CW=0;                   //上料电机开启
                   LoaderMotorOpen();             //“上料电机”显示开
                   OUT1=1;      
                  }
                  if(dis_Flag==1)                 //定时器2读到一次低电平 刷新显示
                  {
                   dis_Flag=0;
                   dis_timeb(Time_B);
                  }
 /***************光电低电平定时器计数 主程序显示时间******/
 // Photoele_Flag=1 检测光电开关信号 高电平开排列电机 上料电机
                  if(Photoele_Flag==1)//光电 链条传输 运行关闭态 开摇摆电机
                  {
                   LoaderMotorClose();             //“上料电机”显示关
                   ArrangeMotorClose();             //“排列电机”显示关
                   MOTORA_CW=1;                   //上料电机关闭
                   MOTORB_CW=1;                   //排列电机关闭
                   MOTORB_CCW=1;                     //备用
                   Delay_50ms(50);                 //
                   RstKey();                         //满料光电检测
                   for(;kcounter<10;)             //按键循环5次
                    {
                     if(!INTPUTD2)                //按键低电平
                     {
                        LowRst();                      //
                     }
                     else if(~!INTPUTD2)          //按键高电平
                     {
                       HighSet();                     //
                     }
                    }
                    if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                    {                             /*循环检测 */
                    Delay_50ms(10);                 //
                    MOTORA_CW=0;                  //上料电机开
                    MOTORB_CW=0;                  //排列电机开
                    LoaderMotorOpen();             //“上料电机”显示开
                    ArrangeMotorOpen();             //“排列电机”显示开
                    Photoele_Flag=0;              //定时器中断计时标志 计时到电机停止
                    }                               //Clearkey
                   }                                 //
 //光电高电平 重启运行
                  RstKey();                         //排列电机到位
                  for(;kcounter<10;)               //按键循环5次
                   {
                    if(!INTPUT0)                  //按键低电平
                    {
                    LowVoltKey();                 //按键低电平 清除计数器
                    }
                    else if(~!INTPUT0)            //按键高电平
                    {
                    HighVoltKey();                //按键计数器加一 状态计数器加一
                    }
                   }
                   if(kstatus>=8)                 /*按键状态标志大于等于3为有效值*/
                   {
                    MOTORB_CW=1;                  //排列电机开
                    L_EN=1;
                    R_EN=1;
                    DisJacking();                 //显示顶进
                    MOTORRUN_L=1;                 //电机正转标志
                    MOTORLRUN();                  //顶进
                    L_PWM = 0;
                    OUT2=1;
                    L_EN=1;
                    R_EN=1;
                    Delay_50ms(5);
                    DisRetreat();                 //显示顶退
                    MOTORRUN_R=1;                 //电机反转标志
                    MOTORRRUN();                  //顶退
                    R_PWM = 0;
                    OUT2=1;
                    L_EN=0;
                    R_EN=0;
                    DisRetreat();                 //清除显示
                    Clear_State();                 //清除第一行状态显示     INTPUT3
 //滑槽料满低电平检测
                    RstKey();                     //排列电机到位
                    for(;kcounter<10;)              //按键循环5次
                    {
                     if(!INTPUT3)                  //按键低电平
                     {
                     LowVoltKey();                 //按键低电平 清除计数器
                     }
                     else if(~!INTPUT3)            //按键高电平
                     {
                     HighVoltKey();                //按键计数器加一 状态计数器加一
                     }
                    }
                    if(kstatus>=8)                 /*按键状态标志大于等于3为有效值*/
                    {
 //滑槽料满高电平检测
                     kstatus=0;
                     for(;kstatus<5;)              //排列高电平检测
                     {
                      if(~!INTPUT3)                 //
                      kstatus++;
                      else
                      kstatus=0;
                     }
                    }
                    MOTORB_CW=0;                  //排列电机开
                    kstatus=0;
                    for(;kstatus<5;)              //排列高电平检测
                    {
                        if(~!INTPUT0)                 //
                     kstatus++;
                     else
                     kstatus=0;
                    }
                    Delay_50ms(10);                 //延时再检测
                   }
 //检测直流电机
                  RstKey();                         //
                  for(;kcounter<8;)               //按键循环5次
                   {
                   kcounter++;
                    if(~!StartD1)                 //按键高电平
                    {
                    kstatus++;                 //按键低电平 清除计数器
                    }
                    else if(!StartD1)            //按键低电平
                    {
                    kstatus=0;                //按键计数器加一 状态计数器加一
                    }
                   }
                   if(kstatus>=6)                 /*按键状态标志大于等于3为有效值*/
                   {
                   Reset_io();                     //关闭输出
                   RunFlag=0;                     //自动运行循环标志
                   cleardisp();                     //清除显示
                   Diswait();                     //显示待机
                   }
 //退出自动检测 StartD1
                 }
                 while(RunFlag);                     //
               }
 /**************定时中断*************************/
                void timer0() interrupt 1
                {
                 uchar aa;
                 aa++;                            //定时基数变量
                 if(aa>=200)                      //定时周期
                 {
                  aa=0;                           //定时基数归零
                 }                                //Photoele_Flag=1
 //光电停机计时
                 if(Switch_Flag==1)               //外中断0 开闸计时标志
                 {
                  Time_A++;                       //定时器计时开闸时间
                  if(Time_A>=RunTime_A)           //计数器到开闸设定值
                  {
                  Time_A=0;                       //计数器归零
                  Switch_Flag=0;                  //开闸计时标志归零
                  }
                 }
 //开闸计时
                }     
 /*************P3.2下降沿中断**链条上料***********/
               void exint0() interrupt 0          //INT0中断入口
               {         
                
                RstKey();
                for(;kcounter<5;)                 //按键循环5次
                {
                 if(!EXIT_0)                      //P3.2按键低电平
                 {
                 LowVoltKey();                    //按键低电平 计数器加一状态标志加一
                 }
                 else if(~!EXIT_0)                //按键高电平
                 {
                 HighVoltKey();                   //按键计数器加一    状态标志归零
                 }
                }
                if(kstatus>=3)                    /*按键状态标志大于等于3为有效值*/
                {  
                Switch_Flag=1;                    //定时器计时标志
                }                                 //自动运行函数上料电机停止
 //              
               }
 //========================================================================
 // 函数: void Timer0_Init(void)
 // 描述: 定时器0初始化函数。
 // 参数: none.
 // 返回: none.
 // 版本: VER1.0
 // 日期: 2022-6-2
 // 备注:
 //========================================================================
               void Timer_Init(void)
               {
               AUXR=0X80;         //STC系列的1T 设置
               TMOD=0X01;          //
               TL0=0X32;
               TH0=0X53;
               ET0=1;
               TR0=1;  
               }
 /**************定时器2初始化************/
               void Timer2_Init()
               {
               AUXR|=0x40;                        //定时器2为12T模式      12MHZ
               F_Hz = FHz*100;                   //*100 总分频20000HZ
               T2L = (65536-FOSC/2/F_Hz);         //初始化计时值
               T2H = (65536-FOSC/2/F_Hz) >> 8;            
               AUXR |= 0x10;                      //定时器2开始计时
 //    INT_CLKO = 0x04;                 //使能定时器2的时钟输出功能
               IE2 |= 0x04;                       //开定时器2中断
               EA  = 1;                           //打开总中断
               if(F_Hz == 0||F_Hz == 20000)       //当频率值为0或200Hz关闭输出
                {
                   IE2 &= ~0x04;                   //关闭中断
                AUXR &= ~0x10;                  //定时器2停止计时
          //      PWM1 = 0;
                }
               }
 /*定时器2扩展外部普通IO中断****************/
 /*P2.2低电平开计数器高电平关计数器*/
 /******/
               void t2int() interrupt 12          //中断入口
               {
                uint CT0,CT1,CT2,CT3; //
                uchar SS;                         //
                SS++;                             //定时基数变量
                if(SS>=200)                       //定时周期
                 {
                 SS=0;                            //定时基数归零
 //计时标志为0 检测低电平信号
                 if(Photoele_Flag==0)             //满料光电检测
                 {
                  if(!INTPUTD2)                   //按键低电平 INTPUTD2 P2.2口
                   {
                    Time_B++;                     //计数满清零
                    dis_Flag=1;                     //计数器刷新显示标志
                    if(Time_B>=RunTime_B)         //Auto_Run  Time_B++
                    {
                    Photoele_Flag=1;              //定时器中断计时标志 计时到电机停止
                    Time_B=0;                     //计数满清零
                    }
                   }                                 //高电平计数器归零
                   else  if(~!INTPUTD2)           //按键低电平 INTPUT3 P3.3口
                   {
                   Time_B=0;                      //计数满清零
                   }
                  }
                 }
 //
                 if(MOTORRUN_L==1)
                 {
                 CT2++;
                 if(CT2>=2)
                 {
                  CT2 = 0;
                  CT0++;
                  if(CT0>=CT)
                  {
                  L_PWM = 1; //
                  }
                  else
                  {
                  L_PWM = 0;
                  }
                  if(CT0>=100)
                  {
                  CT0 = 0;
                  }
                 }
                }
 //
                if(MOTORRUN_R==1)
                 {
                 CT3++;
                 if(CT3>=2)
                 {
                  CT3 = 0;
                  CT1++;
                  if(CT1>=CT)            //占空比
                  {
                  R_PWM = 1; //
                  }
                  else
                  {
                  R_PWM = 0;
                  }
                  if(CT1>=100)
                  {
                  CT1 = 0;
                  }
                 }
                }
 //
               }
 /******************** 主函数 **************************/
               void main(void)
               {
               // P_SW2 |= 0x80;     //扩展寄存器(XFR)访问使能
               func=0;
               RunFlag=0;                         //自动运行循环标志
               LED=0;
               total=0;
               IT0=1;                            //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)
               EX0=1;                            //使能INT0中断
               EA=1;
               Init_io();
               Initial_LY096BG30();
               cleardisp();
               red_eeprom();
               Timer_Init();                      //定时器0初始化
               Timer2_Init();                     //定时器2初始化
               dis_Flag=0;                         //光电显示刷新标志
               Run_Flag=0;                         //自动运行标志
               Photoele_Flag=0;                   //光电低电平计时标志 定时器1读IO口
               Valve_Time=0;
               cleardisp();
               red_eeprom();
               display(total);                     //
               Delay_50ms(10);
               total++;
               write_eeprom();                     //
               Diswait();                         //
               Step=5;                             //步进数
               while(1)
                {
                // OUT2=~OUT2;                    //
                 Delay_50ms(5);
                 cleardisp();
                 Diswait();                       //
                 RstKey();    
                 for(;kcounter<10;)               //按键循环5次
                  {
                   if(!Funkey)                    //按键低电平
                   {
                   LowVoltKey();
                   delay(50);                     //延时
                   }
                   else if(~!Funkey)              //按键高电平
                   {
                   HighVoltKey();
                   delay(50);                     //延时
                   }
                  }
                  if(kstatus>=8)                  /*按键状态标志大于等于3为有效值*/
                  {                               /*循环检测 */
                  Initial_LY096BG30();            //初始化显示屏
                  func+=1;                        // 功能循环标志
                  cleardisp();
                  DisSetData();
                  function(func);                 // 功能判断子程序 功能设置散转
                  funset();                       //进入功能设置界面
                  }                                 //Clearkey
 ///
 //功能键
                  RstKey();
                  for(;kcounter<5;)               //按键循环5次
                   {
                    if(!StartD1)                  //按键低电平
                    {
                    LowVoltKey();                 //按键低电平 清除计数器
                    }
                    else if(~!StartD1)            //按键高电平
                    {
                    HighVoltKey();                //按键计数器加一 状态计数器加一
                    }
                   }
                   if(kstatus>=3)                 /*按键状态标志大于等于3为有效值*/
                   {
                   cleardisp();
                   DisDoon();                     //显示运行
                   DisLoaderMotor();                 //上料电机
                   Delay_50ms(5);
                   DisArrangeMotor();             //排列电机
                   Delay_50ms(5);
                   dis_Value(Time_A);
                   dis_Val(Time_B);
                   Delay_50ms(10);
                   LoaderMotorOpen();
                   ArrangeMotorOpen();
                   RunFlag=1;                     //自动运行循环标志
                   AutoRun();                     //自动运行子程序
                   }
                }                                 //参数设置 EEPROM储存
               }                                     //L2251 CODE11820 2025 5 68
              

