51单片机控制舵机

发布时间:2018-04-25编辑:佚名阅读(2292)

主函数:

// GYZ  
// 1路PWM波形输出,可以控制舵机和电调  
#include<reg52.h>  
//引脚位定义  
sbit key1 = P2^5;  
sbit key2 = P2^4;  //独立按键引脚  
sbit pwm1 = P2^7;  
  
//全局变量定义   
unsigned int target =6,percent = 0;  
  
// 头文件包含  
#include<Timer.h>  
#include<interrupt.h>   
#include<key.h>  
  
//函数声明  
void Timer0Initial();  
void initial_Timer();  
void delay(unsigned int x);  
void keyscan();  
 
void main()  
{  
    initial();  
    while(1)  
    {  
        keyscan();  
    }  
}

独立按键扫描key.h

void keyscan()  
{  
    if(key1 == 0)  
    {  
    delay(3);  
    if(key1 == 0)  
    {  
        if(target >= 7)  
        {  
            target -= 1;  
        }  
        while(key1 == 0)  
        {P1 = 0x00;}  
    }  
    P1 = 0xFF;  
    }  
  
    if(key2 == 0)  
    {  
        delay(3);  
        if(key2 == 0)  
        {  
            if(target <= 26)  
            {  
                target += 1;  
            }  
            while(key2 == 0)  
            {P1 = 0x00;}  
        }  
        P1 = 0xFF;  
    }  
}//按键检测程序  
  
void initial()  
{  
    key1 = 1;  
    key2 = 1;  
    P1 = 0xff;  
    initial_Timer();  
}

定时器程序Timer.h

//Timer Configuration  
//使用12Mhz晶振  
//理论上,12Mhz晶振12分频之后  
//应该是100次计数时间是100us
//选用65次计数产生一次中断  
  
void Timer0Initial()  
{  
    TH0 = (65536-65)/256;  
    TL0 = (65536-65)%256;  
} //该初值使每0.1ms产生一次中断  
  
void initial_Timer()  
{  
    EA = 1;        //开启总中断  
    ET0 = 1;       //允许T0中断  
    TMOD = 0x01;    //定时器模式,T0使用工作方式1  
    Timer0Initial();      //装初值,0.1ms产生一次中断  
    TR0 = 1;              //打开T0定时器  
}  
  
void delay(unsigned int x)  
{  
    unsigned int i,j;  
    for(i = 0;i< x; ++i)  
        for(j = 120; j >0 ; --j)  
            ;  
}

中断的程序interrupt.h

void Timer0() interrupt 1 using 0  
{  
    percent += 1;  
    if(percent == 200)  
    {  
        percent = 0;  
        pwm1 = 1;//拉高电平的引脚,来维持50hz的频率  
    }  
    if(percent == target)  
    {  
        pwm1 = 0;  
    }  
    Timer0Initial();  
  
}


    关键字: 51单片机控制舵机


鼓掌

0

正能量

0

0

呵呵

0


评论区