⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 neck.c

📁 C语言程序
💻 C
📖 第 1 页 / 共 2 页
字号:
              CCPR2L=KnockSpeed[nCurMassSpeed];    
              TMR0IF=0;  
              m=0;
              n=0;                
              TMR0ON=1;                               //打开定时器0;
 	            break;       
      case 4:
              CCPR1L=0xff;
              CCPR2L=FingerSpeed[nCurMassSpeed];       //开始指压按摩;
 	            break;                          
      case 5: 
              CCPR1L=KneadFlapSpeed[nCurMassSpeed][0]; 
              CCPR2L=KneadFlapSpeed[nCurMassSpeed][1];              
 	            break;     
 	}     
     nPreMassState=nCurMassState;
  }
   if(nCurMassState==QJ)
 {
     if(TMR0IF==1)
   { TMR0IF=0;
      m++;
      TMR0H=0x3C;
      TMR0L=0xAF;                                     //对TMR0定时50ms写入一个初值; 
      if(m==10)
     {
       m=0;
       n++;
        if(n==1)
       {
        CCPR2L=0xff;
       }
        if(n==2)
       {
        CCPR2L=KnockSpeed[nCurMassSpeed];
        n=0;
       } 
     }
    }
  }
}
/**********************************************************************/
  /*                              主函数                              */  
/**********************************************************************/

    main()                                                       //主函数主要负责初始化,与手控板进行数据通信,
 {                                                               //并且查询键值,来执行相应的功能;                            
    int i;
    systemInit();                                                //系统初始化;
    bUpperOn=0; 
     key=1;
     k=1;
    UpMoveDir=0;
    DwMoveDir=0;
    nMoveTimeCount=0;
    nTimeCount=0;
    nMoveCycleCount=0;
    CycleTimeCount=0;
    bDischarge=0;
    bDischargeComplete=0;   
    nPreMassState=0;
    accycleflag=0;
      if(!RB6)
    {
      nCurMoveDir=2;
      nPreMoveDir=nCurMoveDir;
      RD7=1;                                         
	  RD6=0;                                                       //启动上行功能;
     while(1)
    {
      if(RB6)
     {nCurMoveDir=0;
      nPreMoveDir=nCurMoveDir;
      break;}
    }
    RD7=0;                                         
	RD6=0;
   }                                                            
    for(i=0;i<4;i++)                                              //延时2秒后开始执行下面的程序;
     Delay_ms(250);
       TXEN=1;                                                    //启动发送允许;
       TXREG=0xAA;                                                //发出联络信号AA;
       while(1)
       {
        if(TXIF==1) break;                                                 
       }                                                          //等待写入完成;
       TXEN=0;
       while(1)
       {
       	if(RCIF)
       	{
       		k=RCREG;
       		if(k=0xBB)
       			break;                                                //如果从机未准备好,继续等待;
       	 }
       	}                           
       PEIE=1;
       GIE=1;                                                     //初始化完成后,开放全局中断;
    while(1)
  {
     Task();
     if(bUpperOn&&KeyOn)                                          //开启所有功能;
    {
       KeyOn=0;
       bNeckAutoOn=1;
       if(bNeckAutoOn)
      { nCurMassState=RN;                                         //设置初始化按摩手法;
       nCurMassSpeed=4;                                           //默认速度为最快;
       nPreMassSpeed=nCurMassSpeed;
       UpLocationSet=AutoLocationSet[0][0];
       DwLocationSet=AutoLocationSet[0][1];
       }
      nCurMoveDir=1;
      nCurMoveCycle=0;
      TMR1ON=1;                                                   //开TMR1定时器;
    }
      else if(!bUpperOn)                                          //关闭所有功能;
         {
           bNeckAutoOn=0;
           nCurMoveDir=0;
           nCurMassState=0; 
          }
       if(TMR1IF==1)
    {
       TMR1IF=0;
       TMR1H=0xec;
       TMR1L=0x78;                                               //启动TMR1,定时时间为5ms,晶振为4.000M
       if(UpMoveDir==1||DwMoveDir==1)
      {  CycleDetect();                                          //圈数检测;   
         if(nMoveCycleCount)     
        {     
            if(UpMoveDir==1)
          nCurMoveCycle=nCurMoveCycle-nMoveCycleCount;           //上升过程中记录当前机械手位置;
            else if(DwMoveDir==1)
            nCurMoveCycle=nCurMoveCycle+nMoveCycleCount;         //下降过程中记录当前机械手位置;
          nMoveCycleCount=0;
         } 
       }
         if(nCurMoveCycle==UpLocation&&UpMoveDir==1)             //到规定位置后开始停止行走;
       {
         nMoveCycleCount=0;
         RD7=0;                                         
	       RD6=0;  
         nCurMoveDir=0;
         bDischarge=1;
        } 
         else if(nCurMoveCycle==DwLocation&&DwMoveDir==1)        //到规定位置后开始停止行走;
        {
         nMoveCycleCount=0;
         RD7=0;           
	       RD6=0;
         nCurMoveDir=0;
         bDischarge=1;
        }
         if(bDischarge)
       {   
         nTimeCount++;
         if(nTimeCount==250)                                     //等待放电完成;
        {bDischarge=0;
         nTimeCount=0;
         bDischargeComplete=1;}
       }
     }
         if(bDischargeComplete)                                  //放电完成后开始换向;
       {
           bDischargeComplete=0;
           DwMoveDir=0;
           UpMoveDir=0;                                          //放电完成后彻底停止圈数检测;
           if(nPreMoveDir==1)
            nCurMoveDir=2;
           if(nPreMoveDir==2)
             nCurMoveDir=1; 
           nMoveTimeCount++;                                     //上下移动次数检测;
           if(nMoveTimeCount==2)                                 //当移动次数达到规定次数后,改变按摩手法;
         {
            nMoveTimeCount=0;
            nCurMassState++;
            if(nCurMassState>5)                                  //按摩手法达到循环要求时,重新选择按摩手法;
           {
             nCurMassState=1;
             if(nCurMassSpeed<4)                                     
             nCurMassSpeed++;
             else                               
              nCurMassSpeed=1;                                   //五种按摩手法循环一次后,速度改变一次;
             nPreMassSpeed=nCurMassSpeed;
            }
          }
        }  
          masscontrol();
        if(nPreMoveDir!=nCurMoveDir)                             //换向后启动行走马达;
       { if(nCurMoveDir==1)
        {RD6=1;                                         
	       RD7=0;
         DwMoveDir=1;
         nPreMoveDir=nCurMoveDir;}                                //启动下行功能;
         if(nCurMoveDir==2)
	      {RD7=1;                                         
	       RD6=0;
         UpMoveDir=1;
         nPreMoveDir=nCurMoveDir;}                                //启动上行功能; 
       }
   }                                                      
 }	


 
void Task()                                                      //功能键判别及功能选择;
{  
    if(key)
  { 
      switch(k)
    {
      case 1:   bUpperOn=!bUpper;
                break;
      case 2:   bNeckAutoOn=!bNeckAutoOn; 
                bFullAutoOn=0;
                WaistAutoOn=0;
                break;
      case 3:   bFullAutoOn=!bFullAutoOn;
                WaistAutoOn=0;
                bNeckAutoOn=0;
                break;
      case 4:   WaistAutoOn=!WaistAutoOn;
                bFullAutoOn=0;
                bNeckAutoOn=0;
                break;
      default:   k=0;
                break;
    }
      key=0;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -