• 大小: 1KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: 其他
  • 标签: 51单片机  

资源简介

51单片机:4路舵机控制 编写语言:C 运行情况:完美运行

资源截图

代码片段和文件信息

#include
sbit xh1=P1^0;
sbit xh2=P1^1;
sbit xh3=P1^2;  //四个舵机的信号口
sbit xh4=P1^3;

sbit left1=P2^0;
sbit right1=P2^1;
sbit left2=P2^2;
sbit right2=P2^3;  //一个舵机两个按键控制
sbit left3=P2^4;
sbit right3=P2^5;
sbit left4=P2^6;
sbit right4=P2^7;

unsigned char pwm1=10;
unsigned char pwm2=10;   //每个舵机由一个pwm控制
unsigned char pwm3=10;
unsigned char pwm4=10;

unsigned char n=0;   
void delay1ms(unsigned int i)
{
  unsigned char j;
  while(i--)
  {
    for(j=0;j<115;j++)   //一ms基准延时程序
{
  ;
}
  
  }
}

void key()
{
  EA=1;
  ET0=1;
  TMOD=0x01;  //定时,中断的开关
  TH0=(65536-92)/256;
  TL0=(65536-92)%256;
  TR0=1;
}

void no1()     //第一个舵机控制
{   
  if(left1==0)
  {
    delay1ms(15);  //消抖
if(left1==0)
{   
  pwm1=pwm1+1;  //左转
  n=0;
  if(pwm1==18) //限制其转动角度,防止角度转过损坏舵机
         pwm1=17;
}
  }
  while(left1==0);  //松手检测

  if(right1==0)
  {
    delay1ms(15);  //消抖
if(right1==0)
{
  pwm1=pwm1-1; //右转
  n=0;
  if(pwm1==3) //限制角度!
         pwm1=4;
}
  }
  while(right1==0);   //松手检测

}
/*******************************************************/
void no2()    //第二个舵机控制
{

  if(left2==0)
  {
    delay1ms(15);
if(left2==0)
{
  pwm2=pwm2+2;
  if(pwm2>18)
         pwm2=17;
 n=0;
}
  }    //原理同上
  while(left2==0);

  if(right2==0)
  {
    delay1ms(15);
if(right2==0)
{
  pwm2=pwm2-2;
  
  if(pwm2<5)
         pwm2=4;
 n=0;
}
  }
  while(right2==0);

}
/******************************************************/
  void no3()    //第三个舵机控制
{

  if(left3==0)
  {
    delay1ms(15);
if(left3==0)
{
  pwm3=pwm3+1;
  n=0;
  if(pwm3==18)
         pwm3=17;
}
  }
  while(left3==0);

  if(right3==0) //原理同上
  {
    delay1ms(15);
if(right3==0)
{
  pwm3=pwm3-1;
  n=0;
  if(pwm3==3)
         pwm3=4;
}
  }
  while(right3==0);

}
/********************************************************/
void no4()     //第四个舵机控制
{

  if(left4==0)
  {
    delay1ms(15);
if(left4==0)
{
  pwm4=pwm4+2;
  if(pwm4>18)
         pwm4=17;
 n=0;
}
  }
  while(left4==0);

  if(right4==0)    //原理同上
  {
    delay1ms(15);
if(right4==0)
{
  pwm4=pwm4-2;
  
  if(pwm4<5)
         pwm4=4;
 n=0;
}
  }
  while(right4==0);

}

//*****************************************************//
void main()    //主函数
{
  key();
  while(1)
  {
      no1();
  no2();
      no3();
      no4();
  }

}

void timer0(void) interrupt 1    //中断服务函数
{
  n++;
  
  if(n    xh1=1;   //no1
  else
    xh1=0;
 /******************/
  if(n    xh2=1;
  else   //no2
    xh2=0;
 /*******************/
if(n    xh3=1;
  else
    xh3=0;    //no3
 /*******************/
  if(n    xh4=1;
  else    //no4
    xh4=0;
 /********************/
  if(n==200)
     n=0;
  TH0=(65536-92)/256;
  TL0=(65536-92)%256;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        3088  2017-05-16 17:23  51-4路舵机控制.c

评论

共有 条评论