打印

求助:要疯了,各位大哥来帮我看看这个问题啊?多谢了!

[复制链接]
1571|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
星星电灯|  楼主 | 2007-8-18 08:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//-----------------------------------------------水平电机移动处理----------------------------------------
void  DianJ_ShuiPMove_Manage( ) reentrant      //游戏处理(必须在游戏进行中)
{
     uchar8  ForeDirect1 = 0;
     uchar8  ForeDirect2 = 0;
    if (StopToMoveCountFlag)           //是否允许电机从停止到下次运动的研时计数
         {
              StopToMoveCount ++;
              if (StopToMoveCount >90) 
                  {
                      RandFlag = 1;
                      StopToMoveCount = 0;
                      StopToMoveCountFlag = 0;
                  }
         }
         
    if (RandFlag)                      //允许产生种子(也就是说明青蛙可以运动了)
         {
               RandFlag = 0;                //清零
               StopOrMoveFlag = 1;                   //电机是否移动(0 不移动 1 移动)
            RandSeek ++;                            //种子变化
            if(RandSeek > 100)                 //种子清零
                 {
                       RandSeek = 0;
                 }
            srand(RandSeek);    
          Now_Frog_Position =  (rand()%5) + 1 ;     //值的范围为 [1,2,3,4,5]
          RecordNowPosition(); //此函数得到最后电机经过哪里得到 Last_Frog_Position 的值
          ForeDirect = Last_Frog_Position;
          
          if (Last_Frog_Position == Now_Frog_Position)  //如果产生的随机数和上一位置的值相同则重新产生随机数
               {
                    RandSeek ++;                            //种子变化
                    Now_Frog_Position =  (rand() %5) + 1 ;     //值的范围为 [1,2,3,4,5]
               }
          Dianj_ShuP_Move_Direct = 1; 
   
        }
        
         
    if (Dianj_ShuP_Move_Direct)//电机水平向哪个放启动,是否设置 ( 0 没有 1 有)
         {
                Dianj_ShuP_Move_Direct = 0;  
                if (Last_Frog_Position > Now_Frog_Position) //说明新产生的随机数在左边
               {
                      U23373839_False();  //使 U2 U3 U37 U38 U39 禁能 
                     BujDianj_Control = (BujDianj_Control_Temp | 0x02);      //水平步进电机的方向向左
                     BujDianj_Control_Temp = BujDianj_Control;               //把 BujDianj_Control 赋给中间变量
                     ForeDirect1 = 1;
                     ForeDirect2 = 0;
                 }
          else
                 {
                         U23373839_False();  //使 U2 U3 U37 U38 U39 禁能 
                     BujDianj_Control = (BujDianj_Control_Temp & 0xfd);      //水平步进电机的方向向右
                     BujDianj_Control_Temp = BujDianj_Control;               //把 BujDianj_Control 赋给中间变量
                     ForeDirect2 = 1;
                     ForeDirect1 = 0;
                  }    
         }//if (Dianj_ShuP_Move_Direct == 0)//电机水平向哪个放启动,是否设置 ( 0 没有 1 有)                    
         
         
                           
    if(StopOrMoveFlag) 
        { 
         //--------------------------------电机转动--------------------------------------------
        BujDianjMoveFlag = 1;  //把步进电机速度打开
        U23373839_False();  //使 U2 U3 U37 U38 U39 禁能 
          BujDianj_Control = (BujDianj_Control_Temp & 0xfb);      //水平步进电机转动
          BujDianj_Control_Temp = BujDianj_Control;               //把 BujDianj_Control 赋给中间变量
     
         U2_Enable();   //U2 使能  
         if(DainJ_ShuiP_Left_ONe == 0) 
              {
                    
                if ((Now_Frog_Position ^ 1) == 0)  //如果到了随机抛出数地方,就停止
                    {
                       StopOrMoveFlag = 0 ;  //电机移动标志清零
                       StopToMoveCountFlag = 1;  //允许研时计数
                       BujDianjMoveFlag = 0;  //把步进电机速度停止
                     }
           }         
     //--------------------------------电机转动--------------------------------------------
   }//if(StopOrMoveFlag)             
}      

上面的程序,如果随机抛出的是 1,而电机运动到了 DainJ_ShuiP_Left_ONe ,则 电机就停止

假设 1 在最左边  5  在 最右边 
现在我需要的是, 不管抛出的是 1,2,3,4,5 中的任何一个
只要电机是从右往左运动的,只要到了 1 这个位置都要停

我是这样写的:
 U2_Enable();   //U2 使能  
         if(DainJ_ShuiP_Left_ONe == 0) 
              {
                    
                if (ForeDirect1)  //如果到了随机抛出数地方,就停止
                    {
                       StopOrMoveFlag = 0 ;  //电机移动标志清零
                       StopToMoveCountFlag = 1;  //允许研时计数
                       BujDianjMoveFlag = 0;  //把步进电机速度停止
                     }
           }       
                                
可是硬是不行啊,
各位大哥,我是错在哪里啊?
应该要怎么写?
谢谢!


上面的程序是放在 定时器里执行的
每 10ms 就执行一偏

相关帖子

沙发
古道热肠| | 2007-8-18 10:10 | 只看该作者

看得晕

    遇事不要慌,用调试信息检查出错原因,用二分法定位,过去我都这么干。屡试不爽。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

74

主题

121

帖子

1

粉丝