基于51的舵机控制
#include<reg52.h>sbit P1_0=P1^0;
sbit P3_7=P3^7;
void delay(unsigned int t)//50ms
{
unsigned char j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
void Degree0()//0
{
unsigned char i;
for(i=0;i<200;i++)
{
P1_0=1;
delay(10);//0.5ms
P1_0=0;
delay(390);//19.5ms
}
}
void Degree45()//45
{
unsigned char i;
for(i=0;i<200;i++)
{
P1_0=1;
delay(20);//1ms
P1_0=0;
delay(380);//19ms
}
}
void Degree90()//90
{
unsigned char i;
for(i=0;i<200;i++)
{
P1_0=1;
delay(30);//1.5ms
P1_0=0;
delay(370);//18.5ms
}
}
void Degree135()//135
{
unsigned char i;
for(i=0;i<200;i++)
{
P1_0=1;
delay(40);//2ms
P1_0=0;
delay(360);//18ms
}
}
void Degree180()//180
{
unsigned char i;
for(i=0;i<200;i++)
{
P1_0=1;
delay(50);//2.5ms
P1_0=0;
delay(350);//17.5ms
}
}
void delay10ms(void)
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
void main(void)
{
unsigned char ID;
while(1)
{
if(P3_7==0)
{
delay10ms();
if(P3_7==0)
{
ID++;
if(ID==5)
{
ID=0;
}
while(P3_7==0);
}
}
switch(ID)
{
case 0:
Degree0();
break;
case 1:
Degree180();
break;
case 2:
Degree90();
break;
case 3:
Degree180();
break;
case 4:
Degree0();
break;
}
}
} 看看,,学习学习 学习,mark 控制舵机 最好还是用定时器。 你这个只能4个角度, 不支持任意修改。
可以看看我发过的一个51 一路定时器 控制多路舵机。 坛子里有个八路的,用的定时器挺不错的,你这个貌似只能干这一件事
页:
[1]