找回密码
 注册
Simdroid-非首页
查看: 243|回复: 7

[2. C/C++/C#] 大家帮我看看这个小车的程序(高手请进)

[复制链接]
发表于 2004-11-8 15:11:22 | 显示全部楼层 |阅读模式 来自 吉林吉林
/****************程序说明************************ /
本程序用来控制一个画画小车,小车要求:
一、通电时能从指定地点做直线运动并能播放音乐;
二、遇到障碍物能停动几秒然后后退到起始位置,在此过程中播放音乐;
三、执行左转命令,到达指定时间时停动几秒,在此过程中播放音乐;
四、能完成后退,到达指定时间停动几秒,在此过程中播放音乐;
五、能完成右转,到达指定时间小车停止,在此过程中播放音乐。
程序中采用时间单位为毫秒。
/****************头函数*********************/
#include<reg51.h>
#include <Intrins.h>
/*******输入输出端口设置******************/
***it Motor1P = P1^0;
***it Motor1N = P1^1;
***it Motor2P = P1^2;
***it Motor2N = P1^3;
***it switch1=  P1^4 ;

/*****************全局变量***********/      
       int time;
     int turnLtime;
     int backtime;
     int turnRtime;

/*******基本函数***************/
void stop()       /*********小车停止***********/
   {
    Motor1P=0;                                       /**********控制后轮的电动机的正极*******/
    Motor1N=0;                                       /**********控制后轮的电动机的负极*******/
    Motor2P=0;                                       /**********控制前轮的电动机的正极*******/
    Motor2N=0;                                       /**********控制前轮的电动机的负极*******/
   }

void forward()      /*********小车前进***********/    

  { Motor1P=1;
    Motor1N=0;
   }
void  backward()     /*********小车后退***********/
   {
    Motor1P=0;
    Motor1N=1;

  }

void turnleft()       /*********小车左转***********/
  {
   
  Motor2P=1;
  Motor2N=0;
}
void turnright( )       /*********小车右转***********/
   {
   Motor2P=0;
   Motor2N=1;
  }

void timer()          /*********计时器(每个周期记录100ms,晶振选6MHz)***********/
{
    TMOD=0x1;
    TH0=0x3C;
    TL0=0xB0;
    TR0=1;
  }

/*********主函数********/
void main( )
{int j=0;             /*********变量j定义********/
   switch1=0;           /*********开关赋初始值********/
   timer( );           /*********开始计时********/
     while(1)          
{  forward( );                 /*********调用前进函数********/      
    if(TF0==1)
  {j++;             
  TF0=0;            /*********用计时器控制变量j的值********/
  }  
  
              
   if(switch1==1)         /*********判断开关的值********/
{  time=100*j;           /*********记录下小车前进的时间********/
     TR0=0;  
   j=0;            /********小车从A前进到B点并记录下前进时间********/

   while(1)          
  {timer( );          /*********再次重新记录时间********/
   backward( );         /*********调用后退函数********/
   if(TF0==1)
   {j++;
    TF0=0;}             /*********用计时器控制变量j的值********/
   backtime=100*j;        /*********记录小车后退时间********/
   if(backtime>=time)          /*********判断后退时间********/      
   {TR0=0;
   stop( );     
     break;
   }
  }
  

                /*********判断是否有障碍物,若是,那么小车后退到A点*********/


   
                     
   for(j=0;j++;j<=50)      /*********用循环控制小车的左转时间********/
  {turnleft();
  forward();}                  
                /*******小车左转并在左转的同时前进*********/

                 
   while(1)
  {j=0;
  timer( );             /*********重新记录时间********/
   if(TF0==1)
  {  j++;
    TF0=0;              /*********用计时器控制变量j的值********/
   }
  turnLtime=100*j;         /*********给左转时间赋值********/
   if(turnLtime<time/2)       /*********判断左转时间与前进时间的关系********/
    forward( );
   else if(turnLtime>=time/2)   /*********判断左转时间与前进时间的关系********/
    { TR0=0;
   stop( );
    break;
  }
  }

                            /********小车前进到C点*********/

  
   
   for(j=0;j++;j<=50)      /*********用循环控制小车的右转时间********/
     {turnright();           
  }              /*********小车自动调整前轮方向********/  
   
   
   
   while(1)
   {  j=0;
    timer();           /*********重新开始计数********/
    backward();           /*********调用后退函数********/
    if(TF0==1)
  {  j++;
    TF0=0;              /*********用计时器控制变量j的值********/
   }
   backtime=100*j;        /*********给后退时间赋值********/
  if(backtime>=time)       /*********判断后退时间与前进时间********/
   {stop();
    TF0=0;
  break;
   }  
   }                    /********小车前进到D点*********/

                    



for(j=0;j++;j<=50)        /*********用循环控制小车的右转时间********/
{turnright();
forward();}
                  /*******小车右转并在右转的同时前进*********/

  while(1)
  {j=0;                
  timer( );            /*********重新计数********/
  if(TF0==1)
  {  j++;
    TF0=0;          /*********用计时器控制变量j的值********/       
   }  
   turnLtime=100*j;       /*********给变量turnLtime赋值********/          
   if(turnLtime<time/2)     /*********判断变量turnLtime与前进时间的关系********/
    forward( );
   else if(turnLtime>=time/2) /*********判断变量turnLtime与前进时间的关系********/
    { TR0=0;
   stop( );
    break;
  }
    }                          /********小车前进到E点*********/
   

  
  for(j=0;j++;j<=50)          /********用循环控制前轮的调整*********/
  {  turnleft();             /********调用左转函数*********/

  }                

                    
                /********小车自我调整前轮方向*********/  
  
                          
  }                           /********if(switch1==1)*********/  

  }                          /********while(1)函数*********/  
                        
  }                          /********main函数*********/
 楼主| 发表于 2004-11-8 15:19:55 | 显示全部楼层 来自 吉林吉林

Re:大家帮我看看这个小车的程序(高手请进)

Simdroid开发平台
这是我编写的一段程序,主要是为实现以下功能:
小车前进,前进涂中遇到障碍物,然后后退,后退起始位置时执行左转,然后小车自我调整前轮方向,再执行后退,再后退到一定位置时,小车右转,至此,小车完成一个周期的运动!
小车的运动轨迹见附件!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 发表于 2004-11-8 15:23:43 | 显示全部楼层 来自 吉林吉林

Re:大家帮我看看这个小车的程序(高手请进)

以上是我设计的小车的轨迹和全部程序,请高手指导一下,我的程序存在什么问题?为什么写入单片机后,小车只前进而不执行其他程序!!!
兄弟在这先谢谢指点!
请高手指导啊!兄弟急求啊!
 楼主| 发表于 2004-11-8 17:13:12 | 显示全部楼层 来自 吉林吉林

Re:大家帮我看看这个小车的程序(高手请进)

请雁过留声啊!
 楼主| 发表于 2004-11-9 18:06:48 | 显示全部楼层 来自 吉林吉林

Re:大家帮我看看这个小车的程序(高手请进)

没人看?我自己看了!
发表于 2004-11-9 18:26:50 | 显示全部楼层 来自 吉林吉林

Re:大家帮我看看这个小车的程序(高手请进)

偶不是高手,呵呵,但也看看,还不错吗!
发表于 2004-11-9 20:47:42 | 显示全部楼层 来自 黑龙江哈尔滨

Re:大家帮我看看这个小车的程序(高手请进)

呵呵,有趣,可是不懂。
发表于 2004-11-27 20:46:05 | 显示全部楼层 来自 同济大学

Re:大家帮我看看这个小车的程序(高手请进)

厉害啊,

我搞不来a
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-11-2 01:26 , Processed in 0.054174 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表