/******************************************************************************
标题:多路舵机控制电路C语言版
说明:AT8951改变脉冲宽度控制舵机位置(C语言版)
作者:kaka000 论坛:http://www.proteus.com.cn
日期:2007年11月11日
******************************************************************************/
/******************************************************************************
分辨率:100 (即每增减1等于增减1.8°)
常用角度:
98=-90°;
115=-59.4°;
123=-45°;
131=-30.6°;
148=0°;
165=+30.6°;
173=+45°;
181=+59.4°;
198=+90°
******************************************************************************/
#include"at89x51.h"
//延时10ms子程序*********************************************************************
void delay10ms(void)
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
//延时2s子程序***********************************************************************
void delay1s(void)
{
unsigned char i;
for(i=100;i>0;i--)
delay10ms();
}
//各舵机转动子函数*******************************************************************
void P00(int i)
{
P0_0=0;
P0_0=1;
for(;i>=0;i--){}
P0_0=0;
}
void P01(int i)
{
P0_1=0;
P0_1=1;
for(;i>=0;i--){}
P0_1=0;
}
void P02(int i)
{
P0_2=0;
P0_2=1;
for(;i>=0;i--){}
P0_2=0;
}
void P03(int i)
{
P0_3=0;
P0_3=1;
for(;i>=0;i--){}
P0_3=0;
}
void P04(int i)
{
P0_4=0;
P0_4=1;
for(;i>=0;i--){}
P0_4=0;
}
void P05(int i)
{
P0_5=0;
P0_5=1;
for(;i>=0;i--){}
P0_5=0;
}
void P06(int i)
{
P0_6=0;
P0_6=1;
for(;i>=0;i--){}
P0_6=0;
}
void P07(int i)
{
P0_7=0;
P0_7=1;
for(;i>=0;i--){}
P0_7=0;
}
void P10(int i)
{
P1_0=0;
P1_0=1;
for(;i>=0;i--){}
P1_0=0;
}
void P11(int i)
{
P1_1=0;
P1_1=1;
for(;i>=0;i--){}
P1_1=0;
}
void P12(int i)
{
P1_2=0;
P1_2=1;
for(;i>=0;i--){}
P1_2=0;
}
void P13(int i)
{
P1_3=0;
P1_3=1;
for(;i>=0;i--){}
P1_3=0;
}
void P14(int i)
{
P1_4=0;
P1_4=1;
for(;i>=0;i--){}
P1_4=0;
}
void P15(int i)
{
P1_5=0;
P1_5=1;
for(;i>=0;i--){}
P1_5=0;
}
void P16(int i)
{
P1_6=0;
P1_6=1;
for(;i>=0;i--){}
P1_6=0;
}
void P17(int i)
{
P1_7=0;
P1_7=1;
for(;i>=0;i--){}
P1_7=0;
}
void P20(int i)
{
P2_0=0;
P2_0=1;
for(;i>=0;i--){}
P2_0=0;
}
void P21(int i)
{
P2_1=0;
P2_1=1;
for(;i>=0;i--){}
P2_1=0;
}
void P22(int i)
{
P2_2=0;
P2_2=1;
for(;i>=0;i--){}
P2_2=0;
}
void P23(int i)
{
P2_3=0;
P2_3=1;
for(;i>=0;i--){}
P2_3=0;
}
void P24(int i)
{
P2_4=0;
P2_4=1;
for(;i>=0;i--){}
P2_4=0;
}
void P25(int i)
{
P2_5=0;
P2_5=1;
for(;i>=0;i--){}
P2_5=0;
}
void P26(int i)
{
P2_6=0;
P2_6=2;
for(;i>=0;i--){}
P2_6=0;
}
void P27(int i)
{
P2_7=0;
P2_7=1;
for(;i>=0;i--){}
P2_7=0;
}
void P30(int i)
{
P3_0=0;
P3_0=1;
for(;i>=0;i--){}
P3_0=0;
}
void P31(int i)
{
P3_1=0;
P3_1=1;
for(;i>=0;i--){}
P3_1=0;
}
void P32(int i)
{
P3_2=0;
P3_2=1;
for(;i>=0;i--){}
P3_2=0;
}
void P33(int i)
{
P3_3=0;
P3_3=1;
for(;i>=0;i--){}
P3_3=0;
}
void P34(int i)
{
P3_4=0;
P3_4=1;
for(;i>=0;i--){}
P3_4=0;
}
void P35(int i)
{
P3_5=0;
P3_5=1;
for(;i>=0;i--){}
P3_5=0;
}
void P36(int i)
{
P3_6=0;
P3_6=3;
for(;i>=0;i--){}
P3_6=0;
}
void P37(int i)
{
P3_7=0;
P3_7=1;
for(;i>=0;i--){}
P3_7=0;
}
//所有舵机转动子函数*****************************************************************
void PALL(int a,int b,int c,int d,int e,int f,int g,int h,int i)
{
P10(a);
P11(b);
P12(c);
P13(d);
P14(e);
P15(f);
P16(g);
P17(h);
//可以继续增加到32路!!!!!!P0口要加上拉电阻!?
P07(i);
}
//主函数*****************************************************************************
void main(void)
{
while(1)
{
PALL(148,148,148,148,148,148,148,148,148);
delay1s();
PALL(198,181,165,148,148,131,115,98,98);
delay1s();
PALL(198,181,165,148,148,131,115,98,115);
delay1s();
PALL(198,181,165,148,148,131,115,98,131);
delay1s();
PALL(198,181,165,148,148,131,115,98,148);
delay1s();
PALL(198,181,165,148,148,131,115,98,165);
delay1s();
PALL(198,181,165,148,148,131,115,98,181);
delay1s();
PALL(198,181,165,148,148,131,115,98,165);
delay1s();
PALL(198,181,165,148,148,131,115,98,198);
delay1s();
}
}