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

📄 step.c

📁 此代码是有关一种智能无线通信小车的源代码!无线通信小车的功能通过上位机控制实现是走固定长度的路线
💻 C
字号:
#include<reg52.h>
#include<absacc.h>
#include<math.h>
#define uchar unsigned char
#define uint  unsigned int
//--------------------------------------------------------------------------------------------------------
    //左轮方向 右轮方向 左轮速度 右轮速度
uint  speed_1,  speed_2;
uchar ii = 0,jj = 0;
uchar dir_1,dir_2;
uchar pai_1 = 0,quan_1 = 0,pai_2 = 0;quan_2 = 0;
uint pwm_1 = 0,pwm_2 = 0;
uint cmd = 0,cmd_temp=0;
uint aa=200,bb=100;
uint ww;
int c=0;
float long_data = 0;
float long_ctrl = 0;
//-----------------
char cmd_table[4];
//--------------------------------------------------------------------------------------------
uchar table[ 16 ] = { 0x09, 0x08, 0x0a, 0x02, 0x06, 0x04, 0x05, 0x01,
                      0x01, 0x05, 0x04, 0x06, 0x02, 0x0a, 0x08, 0x09};
//--------------------------------------------------------------------------------------------------------
void run( uchar su_1,uchar su_2,bit zz,bit yy );//小车运行程序
void start( void ); //初始化程序
void ctrl( void );  // 控制小车行进路程
void get_long(void);// 测量路程
void stop(void); //   停止小车
void turn_right( uchar jiao_du_1 );//右转
void turn_left( uchar jiao_du_2 ); //左转
void turn_yuan(uchar zhou_chang);  //圆
//--------------------------------------------------------------------------------------------------------
void start( void )
{
  EA = 1;  ET0 = 1;  TMOD=0x02;TH0 = 0xe0;  TL0 = 0xe0;
  EX0=1; IT0=1;
}
//--------------------------------------------------------------------------------------------------------
void run( uint su_1,uint su_2,bit zz,bit yy )
{
 dir_1   = zz;
 dir_2   = yy;
 speed_1 = su_1;
 speed_2 = su_2;
 TR0 = 1;
}
//---------------------------------------------------------------------------------------------------------
void get_long(void)
{
  long_data =( quan_1 + quan_2 ) * 10.75 + ( pai_1 + pai_2 ) * 0.217;
}
//----------------------------------------------------------------------------------------------
void stop(void)
{
 if(long_data>long_ctrl)
 {
   TR0 = 0; quan_1 = quan_2 = pai_1 = pai_2 = 0;
 }
}
void turn_yuan(uchar zhi_jing)
{
  if(zhi_jing==30)
   {
     run (zhi_jing*2-1,zhi_jing*2+16,1,1);
     long_ctrl=zhi_jing*6.70+5;
    }
   if(zhi_jing==50)
   {
     run (zhi_jing*2-1,zhi_jing*2+16,1,1);
     long_ctrl=zhi_jing*6.62;
   }
}
//--------------------------------------------------------------------------------------------------------
void turn_right( float jiao_du_1 )
{
  run( 100, 100, 1, 0);
  long_ctrl = jiao_du_1 / 12;
}
//--------------------------------------------------------------------------------------------------------------------
void turn_left( float jiao_du_2 )
{
   run( 100, 100, 0, 1);
  long_ctrl = jiao_du_2 / 13;
}
//---------------------------------------------------------------------------------------------------------
void ctrl( void )
{
 if(cmd)
 {
  switch(cmd)
   {
   case 0x10: long_ctrl=100; run( 100, 100, 1, 1);ww=150; break; //前进1米
   case 0x20: long_ctrl=200; run( 100, 100, 1, 1);ww=150; break; //前进2米
   case 0x40: turn_yuan(30);                      ww=150; break; //30 圆
   case 0x80: turn_yuan(50);                      ww=150; break; //50 圆
   case 0x90: turn_left(40);                      ww=150; break; //左转                                   //
   case 0x30: run(0,0,1,1);long_ctrl=1000;        ww=150; break; //前进
   case 0x50: run(0,0,0,0);long_ctrl=1000;        ww=150; break; //后退
   case 0x60: turn_right(40);                     ww=150; break; //右转
   case 0xa0: long_ctrl=0;                                break; //停止
   case 0xc0: turn_left(90);                      ww=150; break; //左转(90)
   case 0x70: turn_right(90);                     ww=150;  break; //右转(90)
   case 0xb0: turn_left(60);                      ww=150;  break; //左转(60)
   case 0xe0: turn_right(60);                     ww=150;  break; //右转(60)
  }
  cmd=0x00;
 }
  get_long( );
  stop();
}

//---------------------------------------------------------------------------------------------
void main(void)
{
  start();
//  run (50,100,1,1); long_ctrl=1000;
  while( 1 )
  {
    ctrl();
   // play();
  }
}
//---------------------------------------------------------------------------------------------------
void steep( void ) interrupt 1 using 1
{
   pwm_1 ++;
   pwm_2 ++;
//----------------------------------
     if( pwm_1 > speed_1+ww )
     {
       if(ww > 0) ww--;
         pwm_1 = 0;
         ii ++;
              if(ii >= 8)
               {
                ii = 0; pai_1 ++;
                 if( pai_1 >= 50 )
                  {
                   pai_1 = 0; quan_1 ++;
                  }
               }
     }
//----------------------------------
   if( pwm_2 > speed_2 + ww )
    {
      pwm_2 = 0;
       jj ++;
              if(jj >= 8)
               {
                jj = 0; pai_2 ++;
                 if( pai_2 >= 50 )
                  {
                   pai_2 = 0; quan_2 ++;
                  }
               }
     }
  P1 = ( table[ ii + dir_1 * 8 ] << 4) | table[ jj + ( dir_2 * 8 ) ];
}
//---------------------------------------------------------------------------------------------------
void get_cmd( void ) interrupt 0 using 0
{
 cmd = P3 & 0xf0;
}

⌨️ 快捷键说明

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