欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2490|回復: 1
收起左側

51單片機如何控制舵機啊 求幫助

[復制鏈接]
ID:314625 發表于 2018-4-23 17:23 | 顯示全部樓層 |閱讀模式
求各位大樓幫忙  最好有編程解釋
回復

使用道具 舉報

ID:511588 發表于 2019-8-5 14:48 | 顯示全部樓層
//采用24.5MHZ的51單片機驅動舵機轉動程序如下:(上電自動轉動 )
#include <C8051F410.H>

unsigned char count;      //0.5ms次數標識

sbit pwm =P1^0 ;          //PWM信號輸出

sbit jia =P2^4;           //角度增加按鍵檢測IO口

sbit jian =P2^5;           //角度減少按鍵檢測IO口

unsigned char jd;         //角度標識



sbit pwm1 =P0^0 ;          //PWM信號輸出給示波器,檢測PWM波用

void delay(unsigned char i)//延時
{

  unsigned char j,k;

  for(j=i;j>0;j--)

    for(k=125;k>0;k--);

}

void Time0_Init()          //定時器0初始化
{


  TH0  = 0xfc;        //定時器0裝初值 定時0.5ms進入中斷

  TL0  = 0x03;


  TMOD = 0x01;       //定時器0工作在方式1   

  IE = 0x82;              //IE=0x82=1000 0010 等價于 EA=1 開總中斷  ET0=1 開定時器0中斷

  TR0=1;             //開定時器0
       
  CKCON = 0x04;      //定時器0使用系統時鐘22.1184mhz
}

void Time0_Int() interrupt 1         //中斷程序
{

     //重裝初值

  TH0  = 0xfc;
  TL0  = 0x03;

    if(count<jd)

      {

                        pwm=1;                  //確實小于,PWM輸出高電平
                        pwm1=pwm;              //接示波器用的io口,觀測PWM波形用            }        //判斷0.5ms次數是否小于角度標識
       //pwm=1;                  //確實小于,PWM輸出高電平
                       
                }
    else

                {

                        pwm=0;                  //大于則輸出低電平

                        pwm1=pwm;             //接示波器用的io口,觀測PWM波形用        }

                        //  pwm=0;                  //大于則輸出低電平

                        count=(count+1);          //0.5ms次數加1

                        count=count%40;     //次數始終保持為40 即保持周期為20ms

                }
}


//此注銷掉部分為通過按鍵控制舵機轉動的程序,功能為通過jia按鍵控制正轉,

//通過jian按鍵控制反轉

/*void keyscan()              //按鍵掃描
{
   if(jia==0)               //角度增加按鍵是否按下
  {
    delay(10);              //按下延時,消抖
    if(jia==0)              //確實按下
     {
      jd++;                 //角度標識加1
      count=0;              //按鍵按下 則20ms周期從新開始
      if(jd==6)
        jd=5;               //已經是180度,則保持
      while(jia==0);        //等待按鍵放開
     }
  }
  if(jian==0)                //角度減小按鍵是否按下
  {
    delay(10);
    if(jian==0)
     {
      jd--;                 //角度標識減1
      count=0;
      if(jd==0)
        jd=1;               //已經是0度,則保持
      while(jan==0);
     }
  }
}*/


void Port_IO_Init()
{
    P1SKIP    = 0x0F;
    XBR0      = 0x08;
    XBR1      = 0x50;
}

void Oscillator_Init()
{
    OSCICN    = 0x87;
}
void Init_Device(void)
{
         PCA0MD    &= ~0x40;
    PCA0MD    = 0x00;
    Port_IO_Init();
    Oscillator_Init();
}



void main()

{

//上電,舵機自動正反轉   

//應注意每次步進是延時函數delay參數的設置,此處延時函數參數設置的并不理想   
  Init_Device();
       
while(1)

{

  for(jd=1;jd<6;jd++)
                 
                {
                 
                        count=0;
                       
                        Time0_Init();
                 
                        delay(50000000);
                 
                }

                delay(50000000);

        for(jd=6;jd>0;jd--)
         
                {
                 
                        count=0;
                         
                        Time0_Init();
                         
                        delay(50000000);
                 
                }
        }
}
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表