舞蹈机器人Word文件下载.docx
《舞蹈机器人Word文件下载.docx》由会员分享,可在线阅读,更多相关《舞蹈机器人Word文件下载.docx(44页珍藏版)》请在冰豆网上搜索。
//定义电机0的状态A
unsignedcharstate0_B=0;
//定义电机0的状态B
unsignedcharstate1_A=0;
//定义电机1的状态A
unsignedcharstate1_B=0;
//定义电机1的状态B
unsignedcharstate2_A=0;
//定义电机2的状态A
unsignedcharstate2_B=0;
//定义电机2的状态B
unsignedcharstate3_A=0;
//定义电机3的状态A
unsignedcharstate3_B=0;
//定义电机3的状态B
unsignedcharstate4_A=0;
//定义电机4的状态A
unsignedcharstate4_B=0;
//定义电机4的状态B
unsignedcharstate5_A=0;
//定义电机5的状态A
unsignedcharstate5_B=0;
//定义电机5的状态B
unsignedcharstate6_A=0;
//定义电机6的状态A
unsignedcharstate6_B=0;
//定义电机6的状态B
//unsignedcharstate7_A=0;
//定义电机7的状态A
//unsignedcharstate7_B=0;
//定义电机7的状态B
//unsignedcharstate8_A=0;
//定义电机8的状态A
//unsignedcharstate8_B=0;
//定义电机8的状态B
unsignedinttemp=0xffff;
unsignedinttemp_595;
unsignedinttemp_0;
unsignedinttemp_1;
unsignedinttemp_2;
unsignedinttemp_3;
unsignedinttemp_4;
unsignedinttemp_5;
unsignedinttemp_6;
unsignedinttemp_7;
unsignedcharP17_temp;
unsignedcharP17_flag;
unsignedintnum_0=0xffff;
unsignedintnum_1=0xffff;
unsignedintnum_2=0xffff;
unsignedintnum_3=0xffff;
unsignedintnum_4=0xffff;
unsignedintnum_5=0xffff;
unsignedintnum_6=0xffff;
//unsignedintnum_7=0xffff;
//unsignedintnum_8=0xffff;
unsignedintcount_0=0;
unsignedintcount_1=0;
unsignedintcount_2=0;
unsignedintcount_3=0;
unsignedintcount_4=0;
unsignedintcount_5=0;
unsignedintcount_6=0;
//unsignedintcount_7=0;
//unsignedintcount_8=0;
voidWR_595();
voidOUT_595();
voidscan();
voidstart_595(void);
voidstop(void);
voidmoto0(unsignedchars0);
voidmoto1(unsignedchars1);
voidmoto2(unsignedchars2);
voidmoto3(unsignedchars3);
voidmoto4(unsignedchars4);
voidmoto5(unsignedchars5);
voidmoto6(unsignedchars6);
voidmoto7(unsignedchars7);
voidscan0(unsignedintn0);
voidscan1(unsignedintn1);
voidscan2(unsignedintn2);
voidscan3(unsignedintn3);
voidscan4(unsignedintn4);
voidscan5(unsignedintn5);
voidscan6(unsignedintn6);
voidscan7(unsignedintn7);
voiddelay50ms(intms);
/********************************************************/
/*将显示数据送入74HC595内部移位寄存器*/
voidWR_595(void)
{ucharj;
temp_595=temp;
for(j=0;
j<
16;
j++)
{
temp_595=temp_595<
<
1;
SDATA_595=CY;
SCLK_595=1;
//上升沿发生移位
_nop_();
SCLK_595=0;
}
}
/*将移位寄存器内的数据锁存到输出寄存器并显示*/
voidOUT_595(void)
{
RCK_595=0;
RCK_595=1;
//上升沿将数据送到输出锁存器
/*595开启子程序*/
/********************************************************/
voidstart_595(void)
WR_595();
OUT_595();
/*停止子程序*/
voidstop(void)
{temp=0xffff;
//取数据
WR_595();
//把数据写入595的寄存器
}
/*延时子程序*/
voiddelay50ms(intms)
{
intk;
while(ms--)
for(k=12500;
k>
0;
k--)
/*开关电机*/
/*0--关电机//关某位用1或,其他位为0*/
/*1--正转//开某位用0与,其他位为1*/
/*2--反转*/
voidmoto0(unsignedchars0)
{switch(s0)
{case0:
{temp_0=temp;
temp_0|=0x0003;
temp=temp_0;
}break;
//关电机
case1:
temp_0&
=0xfffe;
//正转
case2:
=0xfffd;
//反转
voidmoto1(unsignedchars1)
{switch(s1)
{temp_1=temp;
temp_1|=0x000c;
temp=temp_1;
temp_1&
=0xfffb;
=0xfff7;
}
voidmoto2(unsignedchars2)
{switch(s2)
{temp_2=temp;
temp_2|=0x0030;
temp=temp_2;
temp_2&
=0xffef;
=0xffdf;
voidmoto3(unsignedchars3)
{switch(s3)
{temp_3=temp;
temp_3|=0x00c0;
temp=temp_3;
temp_3&
=0xffbf;
=0xff7f;
voidmoto4(unsignedchars4)
{switch(s4)
{temp_4=temp;
temp_4|=0x0300;
temp=temp_4;
temp_4&
=0xfeff;
=0xfdff;
voidmoto5(unsignedchars5)
{switch(s5)
{temp_5=temp;
temp_5|=0x0c00;
temp=temp_5;
temp_5&
=0xfbff;
=0xf7ff;
voidmoto6(unsignedchars6)
{switch(s6)
{temp_6=temp;
temp_6|=0x3000;
temp=temp_6;
temp_6&
=0xefff;
=0xdfff;
voidmoto7(unsignedchars7)
{switch(s7)
{temp_7=temp;
temp_7|=0xc000;
temp=temp_7;
temp_7&
=0xbfff;
=0x7fff;
/*脉冲电机控制*/
/*num_i--输入电机的转动角数*/
/*state0_B--前一个电平状态*/
/*state0_A--当前电平状态*/
voidscan0(unsignedintn0)
{num_0=n0;
voidscan1(unsignedintn1)
{num_1=n1;
voidscan2(unsignedintn2)
{num_2=n2;
voidscan3(unsignedintn3)
{num_3=n3;
voidscan4(unsignedintn4)
{num_4=n4;
voidscan5(unsignedintn5)
{num_5=n5;
voidscan6(unsignedintn6)
{num_6=n6;
/*voidscan7(unsignedintn7)
{num_7=n7;
voidscan8(unsignedintn5)
}*/
voidscan(void)
/*****************第0个扫描***************************************/
state0_B=state0_A;
state0_A=in0;
if(state0_A!
=state0_B)//判断是否有电平跳变
count_0++;
if(count_0>
num_0)
{moto0(0);
start_595();
count_0=0;
num--;
num_0=0xffff;
}
/******************第一个扫描*************************************/
state1_B=state1_A;
state1_A=in1;
if(state1_A!
=state1_B)//判断是否有电平跳变
{count_1++;
if(count_1>
num_1)
{moto1(0);
count_1=0;
num_1=0xffff;
/*****************第二个扫描***************************************/
state2_B=state2_A;
state2_A=in2;
if(state2_A!
=state2_B)//判断是否有电平跳变
{count_2++;
if(count_2>
num_2)
{moto2(0);
count_2=0;
num_2=0xffff;
/*****************第三个扫描**************************************/
state3_B=state3_A;
state3_A=in3;
if(state3_A!
=state3_B)//判断是否有电平跳变
{count_3++;
if(count_3>
num_3)
{moto3(0);
count_3=0;
num_3=0xffff;
/****************第四个扫描*************************************/
state4_B=state4_A;
state4_A=in4;
if(state4_A!
=state4_B)//判断是否有电平跳变
{count_4++;
if(count_4>
num_4)
{moto4(0);
count_4=0;
num_4=0xffff;
/****************第五个扫描****************************************/
state5_B=state5_A;
state5_A=in5;
if(state5_A!
=state5_B)//判断是否有电平跳变
{count_5++;
if(count_5>
num_5)
{moto5(0);
count_5=0;
num_5=0xffff;
/**************第六个扫描******************************************/
state6_B=state6_A;
state6_A=in6;
if(state6_A!
=state6_B)//判断是否有电平跳变
{count_6++;
if(count_6>
num_6)
{P2=0xff;
count_6=0;
num_6=0xffff;
/****************第七个扫描****************************************
state7_B=state7_A;
state7_A=in7;
if(state7_A!
=state7_B)//判断是否有电平跳变
{count_7++;
if(count_7>
num_7)
{moto7(0);
count_7=0;
num_7=0xffff;
/****************第八个扫描****************************************
state8_B=state8_A;
state8_A=in8;
if(state8_A!
=state8_B)//判断是否有电平跳变
{count_8++;
if(count_8>
count_8=0;
}*/
/*主程序*/
voidmain(void)
{SCLK_595=0;
stop();
run=0;
P17_flag=1;
while
(1)
{
while(P17_flag)
P17_temp=P1;
P17_temp|=0x7f;
if(P17_temp==0x7F)
P17_flag=0;
switch(run)
{
case0:
//0-1秒,双手向前伸直,与身体成90度
num=2;
moto0
(1);
scan0(950);
//11