📄 main.c
字号:
#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 + -