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

📄 main.c

📁 LM629运动控制器操作
💻 C
📖 第 1 页 / 共 3 页
字号:
#include<msp430x14x.h>
#include"lm629.h"
unsigned char rd_st();
unsigned char rd_data();
void wr_data(unsigned char val);
void wr_cmd(unsigned char cmd);
void check_busy();
void delay4ms();                //4MS
void DELAY();
void filter_sel();
void traj_sel();
void reset_right();
void reset_left();
void init_sys();
void init_port();
void init_timer_a();
void init_timer_b();
unsigned int rd_front();//读前排灯数据
unsigned char rd_back();//读后排灯数据
unsigned char counter_table();//数格
void turn_left(unsigned char v1,unsigned char v2,unsigned char v3 );
void turn_right(unsigned char v4,unsigned char v5,unsigned char v6);
void run_stright();
void run_back();
void traj_sel2(unsigned char a,unsigned char b,unsigned char c,unsigned char h,unsigned char d,unsigned char e,unsigned f);
void stop();
unsigned char temp1,temp2,temp6,temp8;
unsigned char sign,counter1=0,counter2=0,counter=0,a,b,i;
unsigned int temp3,temp4,temp5,temp7;
unsigned char access_sign_left_two=0,access_sign_right_two=0;
void turn_position_left_two(unsigned char e,unsigned char f,unsigned char g,unsigned char h);
void turn_position_right_two(unsigned char a,unsigned char b,unsigned char c,unsigned char d);
void turn_position_right_single(unsigned char a,unsigned char b);
void turn_position_left_single(unsigned char c,unsigned char d);
void run_position_back_two(unsigned char a,unsigned char b,unsigned char c,unsigned char d );
void reset_run_stright(unsigned char a,unsigned char b,unsigned char c,unsigned char d,unsigned char e,unsigned char f,unsigned char g,unsigned char h);
unsigned char  access_sign_right_single=0,access_sign_left_single=0, access_sign_back_two=0;
long int t=0,t1=1;
void turn_around_clockwise(); //顺时针转圈
void turn_around_anticlockwise();//逆时针转圈
unsigned char sign_clockwise,sign_anticlockwise;
unsigned char hand_sign=0,hand=0,sign_position=0,island=0;
void delay2s();
unsigned char chose;
unsigned long  realvell,realvelr;
char ch,lun=0;
void main()
{
  WDTCTL=WDTPW+WDTHOLD;
  init_sys();
  init_port();
  reset_right();
  reset_left();
  P6OUT=0X00;
  init_timer_b();
  _EINT();
  delay4ms();
  delay4ms();
  /*P5OUT&=~BIT3;//CS=0
  wr_cmd(RSTI);
  DELAY();
  filter_sel();
  DELAY();
  traj_sel();
  DELAY();
  P5OUT|=BIT3;//CS=1
  delay4ms();
  P5OUT&=~BIT2;//CS=0
  wr_cmd(RSTI);
  DELAY();
  filter_sel();
  DELAY();
  traj_sel();
  DELAY();
  P5OUT|=BIT2;
  P5OUT|=BIT7;*/
  //chose=(P1IN&0x03);
  run_stright();
  init_timer_a();
  _EINT();
  while(1)//数格
  {
      
    if(counter==1&access_sign_left_two==0)      
       {
         _DINT();
         stop();
         turn_position_left_two(0x11,0x10,0x04,0x10);
         _EINT();
         run_stright();
        }
     if(hand_sign==1&hand==0)
     {
       _DINT();
       stop();
       hand++;
       if((P1IN&BIT7)==BIT7)
        {P6OUT&=0xc7;
          P6OUT|=0X20;
          DELAY();
         while((P1IN&BIT7)==BIT7);
        }
          else
        { P6OUT&=0xc7;
          P6OUT|=0X20;
           DELAY();
          while((P1IN&BIT7)!=BIT7);
        }
    run_position_back_two(0x0a,0x00,0x0a,0x00);
       turn_position_right_two(0x15,0x07,0x15,0x07);          
       _EINT();
       counter=8;
       hand=1;
       run_stright();
       
      }
     if(counter==9&access_sign_left_two==1)
     {

       _DINT();
       stop();
      turn_position_left_two(0x11,0x10,0x04,0x10);         //lt2
       _EINT();
       run_stright();
     }
     if(counter==11&access_sign_left_two==2)
     {
       _DINT();
       turn_position_left_two(0x0f,0x9e,0x04,0x9e);        //lt3
       stop();
       _EINT();
      
     run_stright();
       //reset_run_stright(0x01,0x05,0xa0,0xFF,0x01,0x05,0xa0,0xFF);
     P2IFG&=~BIT1;
     P2IE|=BIT1;
     }
    if(sign_position==1&island==0)
    { _DINT();
       stop();
       island++;
       if((P1IN&BIT7)==BIT7)
       {P6OUT&=0xc7;
         P6OUT|=0X10;
          DELAY();
         while((P1IN&BIT7)==BIT7);
       }
      else
       {P6OUT&=0xc7;
          P6OUT|=0X10;
           DELAY();
          while((P1IN&BIT7)!=BIT7);
       }
        delay4ms();
       if((P1IN&BIT7)==BIT7)
       {P6OUT&=0xc7;
         P6OUT|=0X30;
          DELAY();
         while((P1IN&BIT7)==BIT7);
       }
      else
       {P6OUT&=0xc7;
          P6OUT|=0X30;
           DELAY();
          while((P1IN&BIT7)!=BIT7);
       }
      run_position_back_two(0x0c,0x00,0x0c,0x00);
       turn_position_left_two(0x15,0x07,0x15,0x07);        //rt4
       _EINT(); 
       P2IFG&=~BIT1;
       P2IE|=BIT1;
       island=1;
      run_stright();
    }
   if(counter==13&access_sign_left_two==4)
     { _DINT();
       stop();
      turn_position_left_two(0x0f,0x9e,0x04,0x9e);         //lt5
       _EINT();
      run_stright();
     }
     if(counter==16&access_sign_left_two==5)
     { _DINT();
       stop();
      turn_position_left_two(0x0f,0x9e,0x04,0x9e);         //lt6
       _EINT();
      run_stright();
       P2IFG&=~BIT1;
     P2IE|=BIT1;
     }
    
      if(sign_position==2&island==1)
     {
       _DINT();
       stop();
        island++;
       if((P1IN&BIT7)==BIT7)
       {P6OUT&=0xc7;
         P6OUT|=0X10;
          DELAY();
         while((P1IN&BIT7)==BIT7);
       }
      else
       {P6OUT&=0xc7;
          P6OUT|=0X10;
           DELAY();
          while((P1IN&BIT7)!=BIT7);
       }
       run_position_back_two(0x0c,0x00,0x0c,0x00);
       turn_position_left_two(0x15,0x07,0x15,0x07);      //rt7
      _EINT();
      island=2;
       run_stright();
       P2IFG&=~BIT1;
     P2IE|=BIT1;
     P6OUT&=0xc7;
     P6OUT|=0X08;
     }
  if(sign_position==3&island==2)
     {
       _DINT();
       stop();
        island++;
       if((P1IN&BIT7)==BIT7)
       {P6OUT&=0xc7;
         P6OUT|=0X30;
          DELAY();
         while((P1IN&BIT7)==BIT7);
       }
      else
       {P6OUT&=0xc7;
          P6OUT|=0X30;
           DELAY();
          while((P1IN&BIT7)!=BIT7);
       }
       run_position_back_two(0x0f,0x00,0x0f,0x00);
      // turn_position_right_two(0x15,0x07,0x15,0x07);      //rt7
      turn_position_right_two(0x0f,0x9e,0x04,0x9e);         //lt8
      // P6OUT&=0xc7;
      // P6OUT|=0X08;
    WYK_RESET();
   WYK_RESET_CHK();
   WYK_PORT8('l');
   WYK_PORT8('r');
   WYK_DFH('l');
   WYK_DFH('r');
   WYK_RSTI(0x0000,'l');
   WYK_RSTI(0x0000,'r');
   WYK_LFIL(0x040E,0x00e0,0x0030,0X001F,0,'l');
   WYK_LFIL(0x040E,0x00e0,0x0030,0X001F,0,'r');
    WYK_UDF('l');
   WYK_UDF('r');
   WYK_LTRJ(0x1828,0x00000013,0x0001e0ff,0,'l');//0x0000426c
   WYK_LTRJ(0x1828,0x0000001f,0x0002e0ff,0,'r');//0x00002e6c
 WYK_STT('l');
 WYK_STT('r');   
   for(;;);
     } 
     switch(temp7)
    {
    case 0xf3e0:turn_left(0x00,0xaf,0xff); break;
    case 0xf7e0:turn_left(0x00,0xbf,0xff); break;
    case 0xe7e0:turn_left(0x00,0xcf,0xff); break;
    case 0xefe0:turn_left(0x00,0xdf,0xff); break;
    case 0xcfe0:turn_left(0x00,0xef,0xff); break;
    case 0xdfe0:turn_left(0x00,0xff,0xff); break;
    case 0x9fe0:turn_left(0x00,0xff,0xff); break;
    case 0xbfe0:turn_left(0x00,0xf0,0xff); break;
    case 0x3fe0:turn_left(0x00,0xf0,0xff); break;
    case 0x7fe0:turn_left(0x00,0xff,0xff); break;

    case 0xfbe0:run_stright();break;

    case 0xf9e0:turn_right(0x00,0xaf,0xff);break;
    case 0xfde0:turn_right(0x00,0xbf,0xff);break;
    case 0xfce0:turn_right(0x00,0xcf,0xff);break;
    case 0xfee0:turn_right(0x00,0xdf,0xff);break;
    case 0xfe60:turn_right(0x00,0xef,0xff);break;
    case 0xff60:turn_right(0x00,0xff,0xff);break;
    case 0xff20:turn_right(0x00,0xff,0xff);break;
    case 0xffa0:turn_right(0x00,0xf0,0xff);break;
    case 0xff80:turn_right(0x00,0xf0,0xff);break;
    case 0xffc0:turn_right(0x00,0xff,0xff);break;
    case 0xffe0: break; //run_back();break;
    }
}
}
void DELAY()
{
  int i;
  for(i=0;i<250;i++);
}
void delay4ms()
{
  long int i;
  for(i=0;i<16000;i++);
}
void wr_data(unsigned char val)
{
  unsigned char i;
  P5DIR=0Xff;
  P4DIR=0Xff;
  P5OUT&=~BIT0;
  for(i=100;i>0;i++);
  P5OUT|=BIT5;//PS=1
  P5OUT|=BIT1;//RD=1
  P5OUT&=~BIT6;//WR=0
  P4OUT=val;
  DELAY();
  P5OUT|=BIT6;//WR=1
  P5OUT|=BIT0;
}
void wr_cmd(unsigned char cmd)
{
  P5DIR=0Xff;
  P4DIR=0Xff;
  P5OUT&=~BIT0;
  P5OUT&=~BIT5;//PS=0
  P5OUT|=BIT1;//RD=1
  P5OUT&=~BIT6;//WR=0
  P4OUT=cmd;
  DELAY();
  P5OUT|=BIT5;//PS=1
  P5OUT|=BIT6;//WR=1
  P5OUT|=BIT0;
}
unsigned char rd_st()
{
  unsigned char temp1;
  P5DIR=0Xff;
  P4DIR=0X00;
  P5OUT|=BIT0;
  P5OUT&=~BIT5;//PS=0
  P5OUT&=~BIT1;//RD=0
  P5OUT|=BIT6;//WR=1
  DELAY();
  temp1=P4IN;
  P5OUT|=BIT1;//RD=1
  P5OUT|=BIT5;//PS=1
  return temp1;
}
unsigned char rd_data()
{
  unsigned char temp2;
  P5DIR=0Xff;
  P4DIR=0X00;
  P5OUT|=BIT0;
  P5OUT|=BIT5;//PS=1
  P5OUT&=~BIT1;//RD=0
  P5OUT|=BIT6;//WR=1
  DELAY();
  temp2=P4IN;
  P5OUT|=BIT1;//RD=1
  return temp2;
}

void check_busy()
{
   unsigned char status;
    do{status=rd_st();}
    while(status&0x01);
}

void reset_left()
{ 
  unsigned char i;
  P5DIR=0Xff;
  P4DIR=0Xff;
  unsigned char temp3;
  unsigned char temp4;
restart:  P5OUT|=0X6e;//CS RD WR PS 全置1
          DELAY();
          P5OUT&=~BIT0;
          for(i=100;i>0;i--);
          P4OUT=0X00;
          DELAY();
  do{
           P5OUT&=~BIT4;//RST=0
           DELAY();
           P5OUT|=BIT4;//RST=1
           DELAY();
           DELAY();
           P5OUT&=~BIT2;//CS=0
           delay4ms();
           check_busy();
           temp3=rd_st();
    }
  while(!(temp3==0x84||temp3==0xc4));
     check_busy();
     wr_cmd(RSTI);
     check_busy();
     wr_data(0x00);
     check_busy();
     wr_data(0x00);
     DELAY();
     temp3=rd_st();
     wr_cmd(MSKI);
     check_busy();
     wr_data(0x00);
     check_busy();
     wr_data(0x00);
     DELAY();
     check_busy();
     temp4=rd_st();
     DELAY();
     if(!(temp4==0x80||temp4==0xc0))
     {goto restart;}
     check_busy();
     wr_cmd(PORT8);
     DELAY();
     check_busy();
     wr_cmd(DFH);
     DELAY();
     P5OUT|=BIT2;//CS=1
}

void reset_right()
{ unsigned char i;
  P5DIR=0Xff;
  P4DIR=0Xff;
  unsigned char temp3;
  unsigned char temp4;
  restart: P5OUT|=0X6e;//CS RD WR PS 全置1
          DELAY();
          P5OUT&=~BIT0;
          for(i=100;i>0;i--);
          P4OUT=0X00;
          DELAY();
  do{
           P5OUT&=~BIT4;//RST=0
           DELAY();
           P5OUT|=BIT4;//RST=1
           DELAY();
           DELAY();
           P5OUT&=~BIT3;//CS=0
           delay4ms();
           check_busy();
           temp3=rd_st();
    }
  while(!(temp3==0x84||temp3==0xc4));
     check_busy();
     wr_cmd(RSTI);
     check_busy();
     wr_data(0x00);
     check_busy();
     wr_data(0x00);
     DELAY();
     DELAY();
     check_busy();
     temp4=rd_st();
     DELAY();
     if(!(temp4==0x80||temp4==0xc0))
     {goto restart;}
     check_busy();
     wr_cmd(PORT8);
     DELAY();
     check_busy();
     wr_cmd(DFH);
     DELAY();
     P5OUT|=BIT3;//CS=1
}
 void filter_sel()
{
  DELAY();
  check_busy();
  wr_cmd(LFIL);
   DELAY();
  check_busy();
  wr_data(0x08);
  DELAY();
  check_busy();
  wr_data(0x0c);//xie pi
  DELAY();
  check_busy();
  wr_data(0x00);//p 高字节
   DELAY();
  check_busy();
  wr_data(0xa0);//P  低字节
  DELAY();
  check_busy();
  wr_data(0x00);//I  高字节
   DELAY();
  check_busy();
  wr_data(0x09);//I  低字节
  DELAY();
  check_busy();
  wr_cmd(UDF);
}
void traj_sel()
{
  check_busy();
  wr_cmd(LTRJ);
  DELAY();
  check_busy();
  wr_data(0x00);
  DELAY();
  check_busy();
  wr_data(0x2a);
  DELAY();
  //acc
  check_busy();
  wr_data(0x00);
  DELAY();
  check_busy();
  wr_data(0x00);
  DELAY();
  check_busy();
  wr_data(0x00);
  DELAY();
  check_busy();
  wr_data(0x1f);
  DELAY();
  //v
  check_busy();
  wr_data(0x00);
  DELAY();
  check_busy();
  wr_data(0x00);
  DELAY();
  check_busy();
  wr_data(0x80);
  DELAY();
  check_busy();
  wr_data(0xFF);
  DELAY();
  //position
  check_busy();
  wr_data(0x00);
  DELAY();
  check_busy();
  wr_data(0xff);
  DELAY();
  check_busy();
  wr_data(0xff);
  DELAY();
  check_busy();
  wr_data(0xff);
  DELAY();
  check_busy();
  wr_cmd(STT);
  DELAY();
}
void init_sys()
{
  BCSCTL1&=~XT2OFF;
  do
  {
    IFG1&=~OFIFG;
    for(int i=0;i<0xfe;i++);
  }while((IFG1&OFIFG)!=0);
  BCSCTL2|=(SELM_2+SELS);
}
void init_port()
{
  P4DIR=0Xff;
  P5DIR=0Xff;
  P6DIR=0Xff;
  P2DIR=0X00;
  P1DIR=0X00;

⌨️ 快捷键说明

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