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

📄 main.c

📁 走迷宫的智能小车
💻 C
字号:
    #include "msp430x14x.h"
#include "public.h"
#include "System.h"

void XT2_Init(void)    // XT2高频晶振2失效标志检查
{
  unsigned char i;
  BCSCTL1 &= ~(XT2OFF);
  do{
      IFG1 &= ~(OFIFG);
      for(i=0; i<100; i++)
         {
           _NOP();
          }
    }
  while((IFG1 & OFIFG) != 0);
}

void BCS_Init(void)    // 系统时钟初始化
{
  XT2_Init();
/*---------------系统时钟设定---------------
  // DCO设置为 4080KHz
  // ACLK 为 LFXT1(低频模式)
  // MCLK 为 XT2CLK 4MHz
  // SMLCK为 LFXT1CLK(11x/12x) / XT2CLK(13x+)  
--------------------------------------------*/
  BCSCTL1 = DIVA_0 + 0x07;
  BCSCTL2 = SELM_2 + DIVM_0 + SELS + DIVS_0;
}

void PWM_Init(void)     //舵机初始化
{
  unsigned char i;
  Sys_PWMDataAccount();	//根据舵机旋转角度PWMangle和舵机速度PWMspeed这两个量计算舵机控制量
  for(i=0;i<8;i++)
  {
    PWMbuff[i] = PWMangle[i];
  }	
}

void Sys_Init()
{
  WDTCTL=WDTPW+WDTHOLD;  //停止看门狗
  P4DIR |= BIT4;  //P5.4输出
  P4OUT |= BIT4;  //P5.4输出高电平,使得LED亮,持续一段时间后熄灭,用来标志系统复位。
  BCS_Init();
  PWM_Init();
  P4OUT &= ~BIT4;  //P5.4输出低电平,使得LED熄灭
  P2DIR |= 0X0ff;
  P4DIR |= 0X0ff;                // P4口 output
  TACTL = TASSEL_2 + ID_2 + TACLR;      // SMCLK,4分频 up mode
  TACCR0=1;
  TACCTL0 |= CCIE;
  _EINT();                //开总中断
  TACTL |= MC_1;
}
unsigned char  array_dc[8]={0,0,0,0,0,0,0,0};
unsigned char  array_rc[16]={90+4,0,90+5,0,90+5,0,90,0,0,0,0,0,0,0,0,0};
void move_on(void)
{               array_dc[0] =0;
		array_dc[1] = 50;	
		array_dc[2] = 0xFE;
		array_dc[3] = 50;
		array_dc[4] = 0xFE;
		array_dc[5] = 50;
		array_dc[6] = 0;
		array_dc[7] = 50;
		dc_moto_control(array_dc);
               delay(50);
    
}
void zuozhuan(void)
{               array_dc[0] = 0x80+55;	
		array_dc[1] = 0;		
		array_dc[2] = 0x80+55;
		array_dc[3] = 0;
		array_dc[4] = 0x80+55;
		array_dc[5] =0;
		array_dc[6] = 0x80+55;
		array_dc[7] = 0;
		dc_moto_control(array_dc);//电机停止

		delay(50);	
		array_rc[0]=90-20;			
		array_rc[1]=170;
		array_rc[2]=90+20;
		array_rc[3]=170;
		array_rc[4]=90+20;
		array_rc[5]=170;
		array_rc[6]=90-20;
		array_rc[7]=170;
		rc_moto_control(array_rc);
		delay(50);
		array_dc[0] = 0x80+55;	
		array_dc[1] = 28;		
		array_dc[2] = 0x80+55;
		array_dc[3] = 28;
		array_dc[4] = 0x80+55;
		array_dc[5] = 28;
		array_dc[6] = 0x80+55;
		array_dc[7] = 28;
		dc_moto_control(array_dc);
		delay(100);	
//机器人恢复直线运动		
		array_rc[0]=90+5.5;
		array_rc[1]=170;
		array_rc[2]=90+3;
		array_rc[3]=170;
		array_rc[4]=90+2;
		array_rc[5]=170;
		array_rc[6]=90-2;
		array_rc[7]=170;
		rc_moto_control(array_rc);
		delay(50);
}
void zuozhuan1(void)
{             
                array_dc[0] =0;
		array_dc[1] =17;	
		array_dc[2] = 0xFE;
		array_dc[3] = 17;
		array_dc[4] = 0xFE;
		array_dc[5] = 17;
		array_dc[6] = 0;
		array_dc[7] = 17;
		dc_moto_control(array_dc);
                delay(100);
		array_rc[0]=90-20;			
		array_rc[1]=170;
		array_rc[2]=90+20;
		array_rc[3]=170;
		array_rc[4]=90+20;
		array_rc[5]=170;
		array_rc[6]=90-20;
		array_rc[7]=170;
		rc_moto_control(array_rc);
		delay(50);
		array_dc[0] = 0x80+55;	
		array_dc[1] = 28;		
		array_dc[2] = 0x80+55;
		array_dc[3] = 28;
		array_dc[4] = 0x80+55;
		array_dc[5] = 28;
		array_dc[6] = 0x80+55;
                array_dc[7] =28;
		dc_moto_control(array_dc);
		delay(100);	
//机器人恢复直线运动		
		array_rc[0]=90+5.5;
		array_rc[1]=170;
		array_rc[2]=90+3;
		array_rc[3]=170;
		array_rc[4]=90;
		array_rc[5]=170;
		array_rc[6]=90-2;
		array_rc[7]=170;
		rc_moto_control(array_rc);
		delay(50);
}
void zuozhuan2(void)
{             
                array_dc[0] =0;
		array_dc[1] =10;	
		array_dc[2] = 0xFE;
		array_dc[3] = 10;
		array_dc[4] = 0xFE;
		array_dc[5] = 10;
		array_dc[6] = 0;
		array_dc[7] = 10;
		dc_moto_control(array_dc);
                delay(100);
		array_rc[0]=90-20;			
		array_rc[1]=170;
		array_rc[2]=90+20;
		array_rc[3]=170;
		array_rc[4]=90+20;
		array_rc[5]=170;
		array_rc[6]=90-20;
		array_rc[7]=170;
		rc_moto_control(array_rc);
		delay(50);
		array_dc[0] = 0x80+55;	
		array_dc[1] = 28;		
		array_dc[2] = 0x80+55;
		array_dc[3] = 28;
		array_dc[4] = 0x80+55;
		array_dc[5] = 28;
		array_dc[6] = 0x80+55;
                array_dc[7] =28;
		dc_moto_control(array_dc);
		delay(100);	
//机器人恢复直线运动		
		array_rc[0]=90+5.5;
		array_rc[1]=170;
		array_rc[2]=90+3;
		array_rc[3]=170;
		array_rc[4]=90;
		array_rc[5]=170;
		array_rc[6]=90-2;
		array_rc[7]=170;
		rc_moto_control(array_rc);
		delay(50);
}

void youzhuan(void)
{
              array_dc[0] = 0x80+55;
		array_dc[1] = 0;		
		array_dc[2] = 0x80+55;
		array_dc[3] = 0;
		array_dc[4] = 0x80+55;
		array_dc[5] =0;
		array_dc[6] = 0x80+55;
		array_dc[7] = 0;
		dc_moto_control(array_dc);//电机停止
		delay(50);	
		
		array_rc[0]=90-20;
		array_rc[1]=170;
		array_rc[2]=90+20;
		array_rc[3]=170;
		array_rc[4]=90+20;
		array_rc[5]=170;
		array_rc[6]=90-20;
		array_rc[7]=170;
		rc_moto_control(array_rc);
		delay(50);
		 array_dc[0] = 0x80-55;
		array_dc[1] = 28;		
		array_dc[2] = 0x80-55;
		array_dc[3] = 28;
		array_dc[4] = 0x80-55;
		array_dc[5] =28;
		array_dc[6] = 0x80-55;
		array_dc[7] = 28;
		dc_moto_control(array_dc);//电机停止
		delay(100);	
		array_rc[0]=90+5.5;
		array_rc[1]=170;
		array_rc[2]=90+3;
		array_rc[3]=170;
		array_rc[4]=90+2;
		array_rc[5]=170;
		array_rc[6]=90-2;
		array_rc[7]=170;
		rc_moto_control(array_rc);
               delay(50);
}
void youzhuan1(void)
{               
                 array_dc[0] =0;
		array_dc[1] =5;	
		array_dc[2] = 0xFE;
		array_dc[3] = 5;
		array_dc[4] = 0xFE;
		array_dc[5] = 5;
		array_dc[6] = 0;
		array_dc[7] = 5;
		dc_moto_control(array_dc);
                delay(50);
		
		array_rc[0]=90-20;
		array_rc[1]=170;
		array_rc[2]=90+20;
		array_rc[3]=170;
		array_rc[4]=90+20;
		array_rc[5]=170;
		array_rc[6]=90-20;
		array_rc[7]=170;
		rc_moto_control(array_rc);
		delay(50);
		 array_dc[0] = 0x80-55;
		array_dc[1] = 27;		
		array_dc[2] = 0x80-55;
		array_dc[3] = 27;
		array_dc[4] = 0x80-55;
		array_dc[5] =27;
		array_dc[6] = 0x80-55;
		array_dc[7] = 27;
		dc_moto_control(array_dc);//电机停止
		delay(100);	
		array_rc[0]=90+5.5;
		array_rc[1]=170;
		array_rc[2]=90+3;
		array_rc[3]=170;
		array_rc[4]=90+2;
		array_rc[5]=170;
		array_rc[6]=90-2;
		array_rc[7]=170;
		rc_moto_control(array_rc);
               delay(50);
}


void youzhuan2(void)
{               
                 array_dc[0] =0;
		array_dc[1] =20;	
		array_dc[2] = 0xFE;
		array_dc[3] =20;
		array_dc[4] = 0xFE;
		array_dc[5] = 20;
		array_dc[6] = 0;
		array_dc[7] = 20;
		dc_moto_control(array_dc);
                delay(100);
		
		array_rc[0]=90-20;
		array_rc[1]=170;
		array_rc[2]=90+20;
		array_rc[3]=170;
		array_rc[4]=90+20;
		array_rc[5]=170;
		array_rc[6]=90-20;
		array_rc[7]=170;
		rc_moto_control(array_rc);
		delay(50);
		 array_dc[0] = 0x80-55;
		array_dc[1] = 27;		
		array_dc[2] = 0x80-55;
		array_dc[3] = 27;
		array_dc[4] = 0x80-55;
		array_dc[5] =27;
		array_dc[6] = 0x80-55;
		array_dc[7] = 27;
		dc_moto_control(array_dc);//电机停止
		delay(100);	
		array_rc[0]=90+5.5;
		array_rc[1]=170;
		array_rc[2]=90+3;
		array_rc[3]=170;
		array_rc[4]=90+2;
		array_rc[5]=170;
		array_rc[6]=90-2;
		array_rc[7]=170;
		rc_moto_control(array_rc);
                delay(50);
}
void youzhuan3(void)
{               
                 array_dc[0] =0;
		array_dc[1] =12;	
		array_dc[2] = 0xFE;
		array_dc[3] =12;
		array_dc[4] = 0xFE;
		array_dc[5] = 12;
		array_dc[6] = 0;
		array_dc[7] = 12;
		dc_moto_control(array_dc);
                delay(50);
		
		array_rc[0]=90-20;
		array_rc[1]=170;
		array_rc[2]=90+20;
		array_rc[3]=170;
		array_rc[4]=90+20;
		array_rc[5]=170;
		array_rc[6]=90-20;
		array_rc[7]=170;
		rc_moto_control(array_rc);
		delay(50);
		 array_dc[0] = 0x80-55;
		array_dc[1] = 27;		
		array_dc[2] = 0x80-55;
		array_dc[3] = 27;
		array_dc[4] = 0x80-55;
		array_dc[5] =27;
		array_dc[6] = 0x80-55;
		array_dc[7] = 27;
		dc_moto_control(array_dc);//电机停止
		delay(100);	
		array_rc[0]=90+5.5;
		array_rc[1]=170;
		array_rc[2]=90+3;
		array_rc[3]=170;
		array_rc[4]=90+2;
		array_rc[5]=170;
		array_rc[6]=90-2;
		array_rc[7]=170;
		rc_moto_control(array_rc);
               delay(50);
}
void move_on1(void)
{               array_dc[0] =0;
		array_dc[1] =50;	
		array_dc[2] = 0xFE;
		array_dc[3] = 50;
		array_dc[4] = 0xFE;
		array_dc[5] = 50;
		array_dc[6] = 0;
		array_dc[7] = 50;
		dc_moto_control(array_dc);
                delay(10);

}
void move_on2(void)
{               array_dc[0] =0;
		array_dc[1] =25;	
		array_dc[2] = 0xFE;
		array_dc[3] = 25;
		array_dc[4] = 0xFE;
		array_dc[5] = 25;
		array_dc[6] = 0;
		array_dc[7] = 25;
		dc_moto_control(array_dc);
                delay(100);

}
void move_on3(void)
{               array_dc[0] =0;
		array_dc[1] =50;	
		array_dc[2] = 0xFE;
		array_dc[3] = 50;
		array_dc[4] = 0xFE;
		array_dc[5] = 50;
		array_dc[6] = 0;
		array_dc[7] = 50;
		dc_moto_control(array_dc);
                delay(100);

}
void back(void)
{               array_dc[0] =0xFE;
		array_dc[1] = 50;	
		array_dc[2] = 0;
		array_dc[3] = 50;
		array_dc[4] = 0;
		array_dc[5] = 50;
		array_dc[6] = 0xFE;
		array_dc[7] = 50;
		dc_moto_control(array_dc);
               delay(200);
    
}
void main( void )
{
   
   Sys_Init();
   while(1)
     {unsigned char temp8;
       IO_mode_set(0);
       temp8=read_IO();
                array_rc[0]=90+5.5;
		array_rc[1]=170;
		array_rc[2]=90+3;
		array_rc[3]=170;
		array_rc[4]=90+2;
		array_rc[5]=170;
		array_rc[6]=90-2;
		array_rc[7]=170;
		rc_moto_control(array_rc);
               delay(10);  
  switch(temp8&0x07)
               {        
         case 1: move_on();
                  temp8=read_IO();
                if((temp8 & 0x0007)==3)zuozhuan1();
                  
                   else break;
                
         case 7: move_on2();
                temp8=read_IO();
                 if((temp8 & 0x0007)==3)zuozhuan1();
                 else break;
                  
         case 3:    move_on();
                    break; 
                                                     
                     
         case 5:   move_on2();
                   temp8=read_IO();
                  if((temp8 & 0x0007)==5) youzhuan1();
                  else  if((temp8 & 0x0007)==1) move_on();
                     else    break;
                      
                
         case 0 :  
                      
                      for(;((temp8 &0x0007)==0);)
                      {
                       youzhuan();
                       youzhuan();
                       
                         
                         for( move_on(); (temp8=read_IO());move_on2())
                         {
                           if((temp8 &0x0007)==3)
                       {
                       zuozhuan2();
                       break;
                       }
                       
                       if((temp8 &0x0007)==7)
                       { 
                       move_on();
                       break;}
                       if((temp8 & 0x0007)==5)
                      {  
                      youzhuan3();
                      break; } 
                         }
                        
                         break; }  
                   
                     break;
                     
          case 6: youzhuan3();
                      break;
          case 4: 
                      youzhuan1();
                        break;
          case 2:
                      zuozhuan2();
                       break;

               }
  
     }
   
               }

⌨️ 快捷键说明

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