51单片机控制舵机左转90然后延时2秒再右转180,延时两秒回到中间,怎么做?

如题所述

第1个回答  2021-04-12
以下程序可供参考
//用一个定时器定时100US产生PWM波
//周期200*100us=20ms
//改变b的值可改变占空比 b=10对应高电平时间1ms
#include<STC12C5A.H>
#define uchar unsigned char
#define uint unsigned int
sbit PWM=P2^0;

uchar a=200,b=15;//b=15对应舵机0度
void Delay1ms(uint i) //1ms延时程序

{
uint j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}

void main()
{
TMOD=0X01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
ET0=1;
EA=1;
TR0=1;
P1M0=0X0F; //低4位推挽输出 控制两个电机正反转
P1M1=0X00;

P2M0=0X01; //最低位推挽输出 控制舵机
P2M1=0X00;

while(1)
{
P1=0x0a;
b=15;Delay1ms(2000);//直行
b=10;Delay1ms(1000);//左转
b=15;Delay1ms(2000);//直行
b=20;Delay1ms(1000);//右转
b=15;Delay1ms(2000);//直行
P1=0x05;
b=15;Delay1ms(2000);//后退
b=10;Delay1ms(1000);//后左转
b=15;Delay1ms(2000);//后退
b=20;Delay1ms(1000);//后右转
b=15;Delay1ms(2000);//后退
}

}
void timer0()interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
a++;
if(a<=b) PWM=1;
else PWM=0;
if(a==200){a=0;PWM=1;}
}
相似回答