PCB机打孔机程序(二)

/************************************/
              void main(void)
              {
              aa=bb=0;
              P0M0=0;
              P0M1=0;
              P1M0=0X80;    //1000 0000      P1.7开漏
              P1M1=0X80;    //1000 0000
              P2M0=0;
              P2M1=0;
              P3M0=0;
              P3M1=0;
              P4M0=0;
              P4M1=0;
              P5M0=0X10;    //0001 0000      P5.4开漏
              P5M1=0X10;    //0001 0000
              P6M0=0;
              P6M1=0;
              P7M0=0;
              P7M1=0;
              XCursor=0;                 //X光标指针归零
              YCursor=0;                 //Y光标指针归零
              XPosiNegate_Flag=1;         //初始化X实际位置正负标志
              XBuff_Data=0;                 //X实际位置缓冲置零
              YPosiNegate_Flag=1;         //初始化Y实际位置正负标志
              YBuff_Data=0;                 //Y实际位置缓冲置零
              Prog_LineNum=0;            //程序行号    临时数据
              Prog_Number=0;             //程序编号    临时数据
              RunLineNum=0;              //运行程序行号置零
              Speed=100;                  //初始化等于100
              Frequency=0;               //频率初始化等于0
              ManuSet_Flag=0;            //手动设定运行标志 按键进入手动置一,退出置0
              JogOperating_Flag=0;       //点动操作反显标志
              ProgAdmin_Flag=0;          //程序管理循环检测标志
              ProgEdit_Flag=0;           //程序编辑循环检测标志
              ProgRead_Flag=0;           //程序读入循环检测标志
              ProgSave_Flag=0;           //程序保存循环检测标志
              ProgSaveas_Flag=0;         //程序另存循环检测标志
              DataSet_Flag=0;            //参数设置循环检测标志
              SystemDataSet_Flag=0;      //系统参数设置循环检测标志
              SystemSeifTest_Flag=0;     //系统自检循环检测标志
              IOSet_Flag=0;              //IO设置循环检测标志
              SystemSet_Flag=0;          //系统数据设置循环检测标志   分子分母最高时间点位起速
              XBuff_Data=0;                 //X向实际位置缓冲器归零
              YBuff_Data=0;                 //Y向实际位置缓冲器归零
              OUT1=1;
              OUT2=1;
              OUT3=1;
              OUT4=1;
              IN1=1;
              IN2=1;
              IN3=1;
              IN4=1;
              IN5=1;
              IN6=1;
              IN7=1;
              counter=0;
              rst=0;
              delay_nms(100);
              rst=1;
              delay_nms(100);
              fs=0;
              InitLCD();
              ClearScreen();
              wr_24C64(10,2);         /*写入个位*/
              wr_24C64(11,2);         /*写入个位*/
              wr_24C64(12,6);         /*写入十位*/
              wr_24C64(13,9);         /*写入百位*/
              write_val();             //临时函数
              read_val();             //临时函数
              display_a();             //
              AUXR=0X80;         //STC系列的1T 设置
              TMOD=0X01;          //
              TL0=0X32;
              TH0=0X53;
              ET0=1;
              TR0=1;  
              AUXR|=0x04;        //定时器2为1T模式      12MHZ
              T2L=0X90;          //设置定时初值
              T2H=0XE8;          //设置定时初值
              AUXR|=0X10;        //定时器2开始计时
              IE2|=0x04;         //开定时器2中断
              EA=1;
              IT0=1;                             //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)
              EX0=1;                             //使能INT0中断
              CP1=1;
              DIR1=1;
              EN1=1;
              CP2=1;
              DIR2=1;
              EN2=1;
              CP3=1;
              DIR3=1;
              EN3=1;
              valm=0;
              vals=0;
              X_Data=0;         //X运行置赋零
              Y_Data=0;            //Y运行置赋零
              while(1)
              {
                OUT1=0;              //?????????OUT1总线开始??????????????????????????????????????
                kcounter=0;                         //按键计数器归零
                kstatus=0;                         //状态寄存器归零
//
                if(!IN7)                //手动操作检测入口//总线OUT1~~~~~~~~~~~//
                {
                 for(;kcounter<5;)               //按键循环至少5次    /
                 {                               A手动界面进入检测/
                  if(!IN7)                       //按键低电平
                  {
                  kcounter++;                    //按键计数器加一
                  kstatus++;                     //按键状态标志加一
                  delay(10);                     //延时
                  }
                  else if(~!IN7)                 //按键高电平
                  {
                  kcounter++;                     //按键计数器加一
                  kstatus=0;                     //按键状态标志归零
                  delay(10);                     //延时
                  }
                 }                     A手动界面结束检测/
                 if(kstatus>=3)                  /***大于3进入手动控制界面****/
                 {                     B/
                  OUT1=1;                         /***关OUT1总线***/
                  OUT2=0;                         /***开OUT2总线***/
                  ManuSet_Flag=1;                 //手动检测运行标志置一
                  display_b();                   /***显示手动高速*点动操作*回程序零*回机械零***/
//手动控制功能循环 按返回键退出循环//
                  while(ManuSet_Flag)            /*循环检测按键 手动高速*点动操作*回程序零*回机械零*/
                  {                                 ///while循环
                  delay_nms(50);
                  if(!IN6)                         //14手动功能返回检测
                   {
                   for(;kcounter<5;)               //按键循环5次
                   {
                    if(!IN6)                       //按键低电平
                    {
                    kcounter++;                    //按键计数器加一
                    kstatus++;                     //按键状态标志加一
                    delay(10);                     //延时
                    }
                    else if(~!IN6)                 //按键高电平
                    {
                    kcounter++;                    //按键计数器加一
                    kstatus=0;                     //按键状态标志归零
                    delay(10);                     //延时
                    }
                   }
                   if(kstatus>=3)                  //返回首页
                   {
                   ClearScreen();                  //清除液晶显示
                   display_a();                    //显示开机画面自动执行*手动操作*程序管理*参数设置
                   ManuSet_Flag=0;                 //手动检测运行标志置零失效,退出手动检测
                   display_graphic_16x8(28,1,xsadd[1],tab0);//  显示14
                   display_graphic_16x8(29,1,xsadd[4],tab0);//
                   }
                   kcounter=0;                     //按键循环标志归零
                   kstatus=0;                     //按键状态标志归零
                  }    
                  kcounter=0;                     //按键循环标志归零
                  kstatus=0;                     //按键状态标志归零
                  if(!IN7)                         //显示10手动高速反显检测
                  {
                   for(;kcounter<5;)             //按键循环5次
                   {
                    if(!IN7)                      //按键低电平
                    {
                    kcounter++;                     //按键计数器加一
                    kstatus++;                     //按键状态标志加一
                    delay(10);                     //延时
                    }
                    else if(~!IN7)              //按键高电平
                    {
                    kcounter++;                     //按键计数器加一
                    kstatus=0;                     //按键状态标志归零
                    delay(10);                     //延时
                    }
                   }
                   if(kstatus>=3)                  /***手动高速反显***/
                   {
                   display_graphic_16x8(28,1,xsadd[1],tab0);//  显示10
                   display_graphic_16x8(29,1,xsadd[0],tab0);//
                   ManuFast_Flag=~ManuFast_Flag;
                   if(ManuFast_Flag==0)
                   {
                   negatedisplay_manufast();
                   }
                   else
                   {
                   display_manufast();
                   }
                   }
                   kcounter=0;                     //按键循环标志归零
                   kstatus=0;                     //按键状态标志归零
                  }
/手动前进检测检测低电平显示前进松开按键高电平清除显示前进/
                  if(!IN5)                       //手动前进检测
                  {
                   for(;kcounter<3;)             //按键循环5次
                   {
                    if(!IN5)                     //按键低电平
                    {
                    kcounter++;                  //按键计数器加一
                    kstatus++;                   //按键状态标志加一
                    }
                    else if(~!IN5)               //按键高电平
                    {
                    kcounter++;                  //按键计数器加一
                    kstatus=0;                   //按键状态标志归零
                    }
                   }
                   if(kstatus>=3)                
                   {
                   DIS_Forward();                 //前进
                   YDirRun_Data();                 //显示Y位置数据
                   }
                   kcounter=0;                   //按键循环标志归零
                   kstatus=0;                    //按键状态标志归零
                   for(;kcounter<=3;)            /*寄存器复位*/
                   {
                    if(~!IN5)                    /*检测前进为高电平?*/
                    {                            /**/
                    kcounter++;
                    }
                    else if(!IN5)                /*检测前进为低电平?*/
                    {
                    kcounter=0;                  /*寄存器复位*/  
                    CP2=0;
                    delay(100);  
                    CP2=1;
                    delay(100);  
                    Y_Data+=1;
                    if(Y_Data>=0)                 //如果Y值大于等于零
                    {
                    YBuff_Data=Y_Data;             //Y缓冲器等于运行值
                    YPosiNegate_Flag=1;             //Y值正负标志置一
                    }
                    else if(Y_Data<0)             //如果Y值小于零
                    {
                    YBuff_Data=Y_Data-Y_Data*2;     //
                    YPosiNegate_Flag=0;             //Y值正负标志置零
                    }
                    YDirRun_Data();                 //显示Y位置数据
                    }         
                   }
                   Clear_Forward();                 //清除显示前进
                   kcounter=0;                   //按键循环标志归零
                   kstatus=0;                    //按键状态标志归零
                  }
///
                  OUT2=1;                        //10手动高速反显 14号返回按键OUT2总线释放
                  delay_nms(50);
                  OUT1=0;
                  kcounter=0;                    //按键循环标志归零
                  kstatus=0;                     //按键状态标志归零
                  if(!IN7)                       //检测点动操作//~~11号总线~OUT1~~~//
                  {
                   for(;kcounter<10;)            //按键循环5次
                   {
                    if(!IN7)                     //按键低电平
                    {
                    kcounter++;                  //按键计数器加一
                    kstatus++;                   //按键状态标志加一
                    delay(10);                   //延时
                    }
                    else if(~!IN7)               //按键高电平
                    {
                    kcounter++;                  //按键计数器加一
                    kstatus=0;                   //按键状态标志归零
                    delay(10);                   //延时
                    }
                   }
                   if(kstatus>=3)                /*按键状态标志大于等于3为有效值*/
                   {                             /*点动操作循环检测*/
/进入点动操作循环检测数字输入
                    jog_operating();
                    negatejog_operating();
                    counter=0;                             //光标计数器清零
                    JogOperatSet_Flag=1;
                    while(JogOperatSet_Flag)               //检测0---9按键
                    {
                     if(counter==0)
                     {
                     display_graphic_16x8(21,33,xsadd[10],tab0);// 清除   
                     delay_nms(100);
                     display_graphic_16x8(21,33,xsadd[20],tab0);// 方块   
                     delay_nms(100);
                     }
                     kcounter=0;                           //按键循环标志归零
                     kstatus=0;                            //按键状态标志归零
                      if(!IN1)                             //数字3检测
                      {
                       for(;kcounter<5;)                   //按键循环5次
                       {
                        if(!IN1)                           //按键低电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus++;                         //按键状态标志加一
                        delay(10);                         //延时
                        }
                        else if(~!IN1)                     //按键高电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus=0;                         //按键状态标志归零
                        delay(10);                         //延时
                        }
                       }
                      if(kstatus>=3)                       /***数字3***/
                      {
                       counter+=1;
                       Key_val=3;
                       JogData_calculate (counter,Key_val);//调用点动数据处理子程序
                       Dis_JogData();                      //显示点动数据  
                      }
                       kcounter=0;                         //按键循环标志归零
                       kstatus=0;                          //按键状态标志归零
                      }
                      kcounter=0;                          //按键循环标志归零
                      kstatus=0;                           //按键状态标志归零
                      if(!IN2)                             //数字2检测
                      {
                       for(;kcounter<5;)                   //按键循环5次
                       {
                        if(!IN2)                           //按键低电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus++;                         //按键状态标志加一
                        delay(10);                         //延时
                        }
                        else if(~!IN2)                     //按键高电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus=0;                         //按键状态标志归零
                        delay(10);                         //延时
                        }
                       }
                      if(kstatus>=3)                       /***数字2***/
                      {
                      counter+=1;
                      Key_val=2;
                      JogData_calculate (counter,Key_val); //调用点动数据处理子程序
                      Dis_JogData();                       //显示点动数据
                      }
                       kcounter=0;                         //按键循环标志归零
                       kstatus=0;                          //按键状态标志归零
                      }
                      kcounter=0;                          //按键循环标志归零
                      kstatus=0;                           //按键状态标志归零
                      if(!IN3)                             //数字1检测
                      {
                       for(;kcounter<5;)                   //按键循环5次
                       {
                        if(!IN3)                           //按键低电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus++;                         //按键状态标志加一
                        delay(10);                         //延时
                        }
                        else if(~!IN3)                     //按键高电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus=0;                         //按键状态标志归零
                        delay(10);                         //延时
                        }
                       }
                      if(kstatus>=3)                       /***数字1***/
                      {
                       counter+=1;
                       Key_val=1;
                       JogData_calculate (counter,Key_val);//调用点动数据处理子程序
                       Dis_JogData();                      //显示点动数据
                      }
                       kcounter=0;                         //按键循环标志归零
                       kstatus=0;                          //按键状态标志归零
                      }
检测123结束//
                    OUT1=1;                                //关取反点动操作总线
                    delay_nms(100);
                    OUT2=0;
                    kcounter=0;                            //按键循环标志归零
                    kstatus=0;                             //按键状态标志归零
                    if(!IN1)                               //数字6检测
                    {
                     for(;kcounter<5;)                     //按键循环5次
                     {
                      if(!IN1)                             //按键低电平
                      {
                      kcounter++;                          //按键计数器加一
                      kstatus++;                           //按键状态标志加一
                      delay(10);                           //延时
                      }
                      else if(~!IN1)                       //按键高电平
                      {
                      kcounter++;                          //按键计数器加一
                      kstatus=0;                           //按键状态标志归零
                      delay(10);                           //延时
                      }
                      }
                      if(kstatus>=3)                       /***数字6***/
                      {
                       counter+=1;
                       Key_val=6;
                       JogData_calculate (counter,Key_val);//调用点动数据处理子程序
                       Dis_JogData();                      //显示点动数据  
                      }
                       kcounter=0;                         //按键循环标志归零
                       kstatus=0;                          //按键状态标志归零
                      }
                      kcounter=0;                          //按键循环标志归零
                      kstatus=0;                           //按键状态标志归零
                      if(!IN2)                             //数字5检测
                      {
                       for(;kcounter<5;)                   //按键循环5次
                       {
                        if(!IN2)                           //按键低电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus++;                         //按键状态标志加一
                        delay(10);                         //延时
                        }
                        else if(~!IN2)                     //按键高电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus=0;                         //按键状态标志归零
                        delay(10);                         //延时
                        }
                       }
                      if(kstatus>=3)                       /***数字5***/
                      {
                      counter+=1;
                      Key_val=5;
                      JogData_calculate(counter,Key_val);  //调用点动数据处理子程序
                      Dis_JogData();                       //显示点动数据
                      }
                       kcounter=0;                         //按键循环标志归零
                       kstatus=0;                          //按键状态标志归零
                      }
                      kcounter=0;                          //按键循环标志归零
                      kstatus=0;                           //按键状态标志归零
                      if(!IN3)                             //数字4检测
                      {
                       for(;kcounter<5;)                   //按键循环5次
                       {
                        if(!IN3)                           //按键低电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus++;                         //按键状态标志加一
                        delay(10);                         //延时
                        }
                        else if(~!IN3)                     //按键高电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus=0;                         //按键状态标志归零
                        delay(10);                         //延时
                        }
                       }
                      if(kstatus>=3)                       /***数字4***/
                      {
                       counter+=1;
                       Key_val=4;
                       JogData_calculate(counter,Key_val); //调用点动数据处理子程序
                       Dis_JogData();                      //显示点动数据
                      }
                       kcounter=0;                         //按键循环标志归零
                       kstatus=0;                          //按键状态标志归零
                      }
                      if(!IN6)                             //返回键
                      {
                       for(;kcounter<5;)                   //按键循环5次
                       {
                        if(!IN6)                           //按键低电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus++;                         //按键状态标志加一
                        delay(10);                         //延时
                        }
                        else if(~!IN6)                     //按键高电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus=0;                         //按键状态标志归零
                        delay(10);                         //延时
                        }
                       }
                      if(kstatus>=3)                       /***返回键***/
                      {
                       JogOperatSet_Flag=0;                //退出点动检测循环界面
                       ManuSet_Flag=0;                     //退出手动检测循环界面
                       display_graphic_16x8(21,33,xsadd[21],tab0);//
                       ClearScreen();
                       display_a();                        //显示开机界面
                      }
                       kcounter=0;                         //按键循环标志归零
                       kstatus=0;                          //按键状态标志归零
                      }
检测456结束//
                      OUT2=1;                              //关检测456总线
                      delay_nms(100);
                      OUT3=0;
                      kcounter=0;                          //按键循环标志归零
                      kstatus=0;                           //按键状态标志归零
                      if(!IN1)                             //数字9检测
                      {
                       for(;kcounter<5;)                   //按键循环5次
                       {
                        if(!IN1)                           //按键低电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus++;                         //按键状态标志加一
                        delay(10);                         //延时
                        }
                        else if(~!IN1)                     //按键高电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus=0;                         //按键状态标志归零
                        delay(10);                         //延时
                        }
                       }
                      if(kstatus>=3)                       /***数字9***/
                      {
                       counter+=1;
                       Key_val=9;
                       JogData_calculate(counter,Key_val); //调用点动数据处理子程序
                       Dis_JogData();                      //显示点动数据
                      }
                       kcounter=0;                         //按键循环标志归零
                       kstatus=0;                          //按键状态标志归零
                      }
                      kcounter=0;                          //按键循环标志归零
                      kstatus=0;                           //按键状态标志归零
                      if(!IN2)                             //数字8检测
                      {
                       for(;kcounter<5;)                   //按键循环5次
                       {
                        if(!IN2)                           //按键低电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus++;                         //按键状态标志加一
                        delay(10);                         //延时
                        }
                        else if(~!IN2)                     //按键高电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus=0;                         //按键状态标志归零
                        delay(10);                         //延时
                        }
                       }
                      if(kstatus>=3)                       /***数字8***/
                      {
                      counter+=1;
                      Key_val=8;
                      JogData_calculate(counter,Key_val);  //调用点动数据处理子程序
                      Dis_JogData();                       //显示点动数据
                      }
                       kcounter=0;                         //按键循环标志归零
                       kstatus=0;                          //按键状态标志归零
                      }
                      kcounter=0;                          //按键循环标志归零
                      kstatus=0;                           //按键状态标志归零
                      if(!IN3)                             //数字7检测
                      {
                       for(;kcounter<5;)                   //按键循环5次
                       {
                        if(!IN3)                           //按键低电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus++;                         //按键状态标志加一
                        delay(10);                         //延时
                        }
                        else if(~!IN3)                     //按键高电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus=0;                         //按键状态标志归零
                        delay(10);                         //延时
                        }
                       }
                      if(kstatus>=3)                       /***数字7***/
                      {
                       counter+=1;
                       Key_val=7;
                       JogData_calculate(counter,Key_val); //调用点动数据处理子程序
                       Dis_JogData();                      //显示点动数据
                      }
                       kcounter=0;                         //按键循环标志归零
                       kstatus=0;                          //按键状态标志归零
                      }
检测789结束//
                     OUT3=1;                               //关检测789总线
                     delay_nms(100);
                     OUT4=0;
                     kcounter=0;                           //按键循环标志归零
                     kstatus=0;                            //按键状态标志归零
                     if(!IN2)                              //显示10手动高速反显检测
                      {
                       for(;kcounter<5;)                   //按键循环5次
                       {
                        if(!IN2)                           //按键低电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus++;                         //按键状态标志加一
                        delay(10);                         //延时
                        }
                        else if(~!IN2)                     //按键高电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus=0;                         //按键状态标志归零
                        delay(10);                         //延时
                        }
                       }
                      if(kstatus>=3)                       /***数字0***/
                      {
                      counter+=1;
                      Key_val=0;
                      JogData_calculate(counter,Key_val);  //调用点动数据处理子程序
                      Dis_JogData();                       //显示点动数据
                      }
                      kcounter=0;                          //按键循环标志归零
                      kstatus=0;                           //按键状态标志归零
                     }
检测0结束//
                     OUT4=1;                               //关检测0总线
                     delay_nms(100);
                     if(!INSERT)                           //显示25清除数据
                      {
                       for(;kcounter<5;)                   //按键循环5次
                       {
                        if(!INSERT)                        //按键低电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus++;                         //按键状态标志加一
                        delay(10);                         //延时
                        }
                        else if(~!INSERT)                  //按键高电平
                        {
                        kcounter++;                        //按键计数器加一
                        kstatus=0;                         //按键状态标志归零
                        delay(10);                         //延时
                        }
                       }
                      if(kstatus>=3)                       /***位置25***/
                      {                                    //点动数据清零
                      counter=0;
                      Buff_Data=0;
                      JogData_dealwith();
                      Dis_JogData();
                      display_graphic_16x8(15,33,xsadd[17],tab0);//显示数据
                      }
                      kcounter=0;                          //按键循环标志归零
                      kstatus=0;                           //按键状态标志归零
                     }
                     OUT1=0;                 //返回while循环使能检测321总线
                    }      ///点动操作while循环结束//
                   }
                   kcounter=0;                             //按键循环标志归零
                   kstatus=0;                              //按键状态标志归零
                  }
//后退检测Y-/
                  if(!IN5)                       //手动后退检测
                  {
                   for(;kcounter<3;)             //按键循环3次
                   {
                    if(!IN5)                     //按键低电平
                    {
                    kcounter++;                  //按键计数器加一
                    kstatus++;                   //按键状态标志加一
                    }
                    else if(~!IN5)               //按键高电平
                    {
                    kcounter++;                  //按键计数器加一
                    kstatus=0;                   //按键状态标志归零
                    }
                   }
                   if(kstatus>=3)                
                   {
                   DIS_Relreal();                 //手动后退
                   YDirRun_Data();                 //显示Y位置数据
                   }
                   kcounter=0;                   //按键循环标志归零
                   kstatus=0;                    //按键状态标志归零
                   for(;kcounter<=3;)            /*寄存器复位*/
                   {
                    if(~!IN5)                    /*检测后退为高电平?*/
                    {                            /**/
                    kcounter++;
                    }
                    else if(!IN5)                /*检测后退为低电平?*/
                    {
                    kcounter=0;                  /*寄存器复位*/  
                    CP2=0;
                    delay(100);  
                    CP2=1;
                    delay(100);  
                    Y_Data-=1;
                    if(Y_Data>=0)                 //如果Y值大于等于零
                    {
                    YBuff_Data=Y_Data;             //Y缓冲器等于运行值
                    YPosiNegate_Flag=1;             //Y值正负标志置一
                    }
                    else if(Y_Data<0)             //如果Y值小于零
                    {
                    YBuff_Data=Y_Data-Y_Data*2;     //
                    YPosiNegate_Flag=0;             //Y值正负标志置零
                    }
                    YDirRun_Data();                 //显示Y位置数据
                    }         
                   }
                   Clear_Relreal();                 //清除显示下行
                   kcounter=0;                   //按键循环标志归零
                   kstatus=0;                    //按键状态标志归零
                  }

                  OUT1=1;                        //关取反点动操作下行总线
                  delay_nms(100);
///右移X+/
                  OUT3=0;
                  if(!IN5)                       //手动右移检测
                  {
                   for(;kcounter<3;)             //按键循环5次
                   {
                    if(!IN5)                     //按键低电平
                    {
                    kcounter++;                  //按键计数器加一
                    kstatus++;                   //按键状态标志加一
                    }
                    else if(~!IN5)               //按键高电平
                    {
                    kcounter++;                  //按键计数器加一
                    kstatus=0;                   //按键状态标志归零
                    }
                   }
                   if(kstatus>=3)                
                   {
                   DIS_MoveRight();                 //右移
                   XDirRun_Data();                 //显示X值位置数据
                   }
                   kcounter=0;                   //按键循环标志归零
                   kstatus=0;                    //按键状态标志归零
                   for(;kcounter<=3;)            /*寄存器复位*/
                   {
                    if(~!IN5)                    /*检测前进为高电平?*/
                    {                            /**/
                    kcounter++;
                    }
                    else if(!IN5)                /*检测右移为低电平?*/
                    {
                    kcounter=0;                  /*寄存器复位*/  
                    CP1=0;
                    delay(100);  
                    CP1=1;
                    delay(100);  
                    X_Data+=1;
                    if(X_Data>=0)                 //如果X值大于等于零
                    {
                    XBuff_Data=X_Data;             //X缓冲器等于运行值
                    XPosiNegate_Flag=1;             //X值正负标志置一
                    }
                    else if(X_Data<0)             //如果X值小于零
                    {
                    XBuff_Data=X_Data-X_Data*2;     //
                    XPosiNegate_Flag=0;             //X值正负标志置零
                    }
                    XDirRun_Data();                 //显示X值位置数据
                    }         
                   }
                   Clear_MoveRight();             //清除显示右移
                   kcounter=0;                   //按键循环标志归零
                   kstatus=0;                    //按键状态标志归零
                  }

                  OUT3=1;                //关右移检测总线
                  delay_nms(100);
                  OUT4=0;
///
                  if(!IN5)                       //手动左移检测
                  {
                   for(;kcounter<3;)             //按键循环5次
                   {
                    if(!IN5)                     //按键低电平
                    {
                    kcounter++;                  //按键计数器加一
                    kstatus++;                   //按键状态标志加一
                    }
                    else if(~!IN5)               //按键高电平
                    {
                    kcounter++;                  //按键计数器加一
                    kstatus=0;                   //按键状态标志归零
                    }
                   }
                   if(kstatus>=3)                
                   {
                   DIS_Moveleft();                 //显示左移
                   XDirRun_Data();                 //显示X值位置数据
                   }
                   kcounter=0;                   //按键循环标志归零
                   kstatus=0;                    //按键状态标志归零
                   for(;kcounter<=3;)            /*寄存器复位*/
                   {
                    if(~!IN5)                    /*检测左移为高电平?*/
                    {                            /**/
                    kcounter++;
                    }
                    else if(!IN5)                /*检测左移为低电平?*/
                    {
                    kcounter=0;                  /*寄存器复位*/  
                    CP1=0;
                    delay(100);  
                    CP1=1;
                    delay(100);  
                    X_Data-=1;
                    if(X_Data>=0)                 //如果X值大于等于零
                    {
                    XBuff_Data=X_Data;             //X缓冲器等于运行值
                    XPosiNegate_Flag=1;             //X值正负标志置一
                    }
                    else if(X_Data<0)             //如果X值小于零
                    {
                    XBuff_Data=X_Data-X_Data*2;     //
                    XPosiNegate_Flag=0;             //X值正负标志置零
                    }
                    XDirRun_Data();                 //显示X值位置数据
                    }         
                   }
                   Clear_Moveleft();             //清除显示左移
                   kcounter=0;                   //按键循环标志归零
                   kstatus=0;                    //按键状态标志归零
                  }
///
                  OUT4=1;                //关左移检测总线
                  delay_nms(100);
                  OUT2=0;                         //
                  }                                 //退出手动控制界面
//按下返回键退出手动控制功能循环//
                 }                                 B退出手动控制检测界面
                }                                 //手动操作检测出口//~~~~~~~~~~~//
//
                kcounter=0;                      //按键循环标志归零
                kstatus=0;                       //按键状态标志归零
                OUT1=1;
                delay_nms(80);
                OUT2=0;
                if(!IN7)                         //10手动 操作界面 手动高速反显检测
                {
                 for(;kcounter<5;)               //按键循环5次
                 {
                  if(!IN7)                       //按键低电平
                  {
                  kcounter++;                    //按键计数器加一
                  kstatus++;                     //按键状态标志加一
                  delay(10);                     //延时
                  }
                  else if(~!IN7)                 //按键高电平
                  {
                  kcounter++;                    //按键计数器加一
                  kstatus=0;                     //按键状态标志归零
                  delay(10);                     //延时
                  }
                 }
                 if(kstatus>=3)                  /***手动高速反显***/
                 {
                 display_graphic_16x8(28,1,xsadd[1],tab0);//  显示10
                 display_graphic_16x8(29,1,xsadd[0],tab0);//
                 }
                 kcounter=0;                     //按键循环标志归零
                 kstatus=0;                      //按键状态标志归零
                }
                OUT2=1;
                delay_nms(50);
                OUT3=0;
//参数设置界面检测//
                if(!IN6)                         //参数设置界面检测     位置13
                {
                for(;kcounter<5;)                //按键循环5次
                 {
                  if(!IN6)                       //按键低电平
                  {
                  kcounter++;                     //按键计数器加一
                  kstatus++;                     //按键状态标志加一
                  delay(10);                     //延时
                  }
                  else if(~!IN6)                 //按键高电平
                  {
                  kcounter++;                    //按键计数器加一
                  kstatus=0;                     //按键状态标志归零
                  delay(10);                     //延时
                  }
                 }
                 if(kstatus>=3)                 //显示13进入参数设置功能
                 {
                 ClearScreen();
                 DataSet_Flag=1;                 //参数设置循环检测标志
                 DataSet();                         //显示    系统参数*系统自检*IO*设置
                 while(DataSet_Flag)
                 {  
                 OUT3=1;
                 delay_nms(50);
                 OUT2=0;
                  if(!IN6)                       //     返回键
                  {
                   for(;kcounter<5;)             //按键循环5次
                   {
                    if(!IN6)                     //按键低电平
                    {
                    kcounter++;                  //按键计数器加一
                    kstatus++;                   //按键状态标志加一
                    delay(10);                   //延时
                    }
                    else if(~!IN6)               //按键高电平
                    {
                    kcounter++;                  //按键计数器加一
                    kstatus=0;                   //按键状态标志归零
                    delay(10);                   //延时
                    }
                   }
                   if(kstatus>=3)                /***返回键***/
                    {
                    DataSet_Flag=0;              //退出循环
                    display_graphic_16x8(21,33,xsadd[21],tab0);//
                    ClearScreen();
                    display_a();                 //首页显示
                    }
                     kcounter=0;                 //按键循环标志归零
                     kstatus=0;                  //按键状态标志归零
                   }
                   kcounter=0;                   //按键循环标志归零
                   kstatus=0;                    //按键状态标志归零
/系统参数检测START
                   if(!IN7)                      //10号按键系统参数
                   {
                    for(;kcounter<5;)            //按键循环5次
                    {
                     if(!IN7)                    //按键低电平
                     {
                     kcounter++;                 //按键计数器加一
                     kstatus++;                  //按键状态标志加一
                     delay(10);                  //延时
                     }
                     else if(~!IN7)              //按键高电平
                     {
                     kcounter++;                 //按键计数器加一
                     kstatus=0;                  //按键状态标志归零
                     delay(10);                  //延时
                     }
                    }
                    if(kstatus>=3)               /***系统参数选项循环***/
                    {
                    SystemDataSet_Flag=1;        //系统参数设置循环检测标志
                    ClearScreen();
                    PosiDis_Option();            //正显选项
                    DisSystem_Value();             //X正限X负限 Y正限Y负限
                    while(SystemDataSet_Flag)    //系统参数
                    {
                    if(!IN6)                     //返回键
                    {
                     for(;kcounter<5;)           //按键循环5次
                     {
                      if(!IN6)                   //按键低电平
                      {
                      kcounter++;                //按键计数器加一
                      kstatus++;                 //按键状态标志加一
                      delay(10);                 //延时
                      }
                      else if(~!IN6)             //按键高电平
                      {
                      kcounter++;                //按键计数器加一
                      kstatus=0;                 //按键状态标志归零
                      delay(10);                 //延时
                       }
                      }
                     if(kstatus>=3)              /***返回键***/
                     {
                     ClearScreen();
                     display_graphic_16x8(28,1,xsadd[1],tab0);//  显示14
                     display_graphic_16x8(29,1,xsadd[3],tab0);//
                     SystemDataSet_Flag=0;       //系统参数设置循环检测标志归零
                     DataSet();
                     }
                     kcounter=0;                 //按键循环标志归零
                     kstatus=0;                  //按键状态标志归零
                     }    //返回键检测结束
                     OUT2=1;
                     delay(80);                     //延时
                     OUT1=0;  //开检测系统总线   //OUT1 IN7
                     if(!IN7)                         //11系统检测
                     {
                      for(;kcounter<5;)              //按键循环5次
                       {
                        if(!IN7)                      //按键低电平
                        {
                        kcounter++;                     //按键计数器加一
                        kstatus++;                     //按键状态标志加一
                        delay(10);                     //延时
                        }
                        else if(~!IN7)               //按键高电平
                        {
                        kcounter++;                     //按键计数器加一
                        kstatus=0;                     //按键状态标志归零
                        delay(10);                     //延时
                        }
                       }
                      if(kstatus>=3)                 //显示10进入程序编辑功能
                      {
                      SystemSet_Flag=1;          //系统数据设置循环检测标志   分子分母最高时间点位起速
                      ClearScreen();
                      DisSystem();
                      OUT1=1;                         //关检测系统总线
                      while(SystemSet_Flag)
                      {
                      Dis_SystemCursorCalculate(XCursor,YCursor);     //     系统参数光标计算处理
                      Sys_CursorBlinking(SysCursor);                 //系统光标闪烁
                      delay(3000);                     //延时
                      delay(30);                     //延时
                      OUT2=0;                         //开返回光标上总线
                      if(!IN6)                         //10程序编辑界面检测
                      {
                       for(;kcounter<5;)             //按键循环5次
                       {
                        if(!IN6)                      //按键低电平
                        {
                        kcounter++;                     //按键计数器加一
                        kstatus++;                     //按键状态标志加一
                        delay(10);                     //延时
                        }
                        else if(~!IN6)                 //按键高电平
                        {
                        kcounter++;                     //按键计数器加一
                        kstatus=0;                     //按键状态标志归零
                        delay(10);                     //延时
                        }
                       }
                       if(kstatus>=3)                //进入系统参数设置界面
                       {
                           SystemSet_Flag=0;
                        ClearScreen();
                        PosiDis_Option();            //正显选项
                        DisSystem_Value();             //X正限X负限 Y正限Y负限
                        delay(200);                     //延时
                       }
                       kcounter=0;                     //按键循环标志归零
                       kstatus=0;                     //按键状态标志归零
                       }
/************XCursorX光标指针YCursor=0Y光标指针*********/
/光标上检测START/
                       if(!IN5)                          //光标上检测
                       {
                        for(;kcounter<5;)             //按键循环5次
                        {
                         if(!IN5)                       //按键低电平
                         {
                         kcounter++;                  //按键计数器加一
                         kstatus++;                      //按键状态标志加一
                         delay(10);                      //延时
                         }
                         else if(~!IN5)               //按键高电平
                         {
                         kcounter++;                  //按键计数器加一
                         kstatus=0;                      //按键状态标志归零
                         delay(10);                      //延时
                         }
                        }
                        if(kstatus>=3)                //光标上处理
                        {
                        YCursor-=1;
                        if(YCursor<0)
                        YCursor=3;
                       }
                       kcounter=0;                      //按键循环标志归零
                       kstatus=0;                      //按键状态标志归零
                       }    
///光标上检测STOP///
                       OUT2=1;
                       delay(80);                      //延时
                       OUT3=0;                        //开检测->总线      
                       if(!IN5)                          //光标->检测
                       {
                        for(;kcounter<5;)             //按键循环5次
                        {
                         if(!IN5)                       //按键低电平
                         {
                         kcounter++;                  //按键计数器加一
                         kstatus++;                      //按键状态标志加一
                         delay(10);                      //延时
                         }
                         else if(~!IN5)               //按键高电平
                         {
                         kcounter++;                  //按键计数器加一
                         kstatus=0;                      //按键状态标志归零
                         delay(10);                      //延时
                         }
                        }
                        if(kstatus>=3)                //光标->处理
                        {
                        XCursor-=1;
                        if(XCursor<0)
                        XCursor=3;
                       }
                       kcounter=0;                      //按键循环标志归零
                       kstatus=0;                      //按键状态标志归零
                       }
///->检测STOP///
                       OUT3=1;
                       delay(80);                      //延时
                       OUT4=0;                        //开检测<-总线      
                       if(!IN5)                          //光标<-检测
                       {
                        for(;kcounter<5;)             //按键循环5次
                        {
                         if(!IN5)                       //按键低电平
                         {
                         kcounter++;                  //按键计数器加一
                         kstatus++;                      //按键状态标志加一
                         delay(10);                      //延时
                         }
                         else if(~!IN5)               //按键高电平
                         {
                         kcounter++;                  //按键计数器加一
                         kstatus=0;                      //按键状态标志归零
                         delay(10);                      //延时
                         }
                        }
                        if(kstatus>=3)                //光标<-处理
                        {
                        XCursor-=1;
                        if(XCursor<0)
                        XCursor=1;
                       }
                       kcounter=0;                      //按键循环标志归零
                       kstatus=0;                      //按键状态标志归零
                       }

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值