📄 main.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 + -