标题: 51单片机舵机程序 [打印本页]

作者: sun136    时间: 2018-5-29 17:32
标题: 51单片机舵机程序
#include<reg52.h>

sbit key1 = P3^0;  
sbit key2 = P3^1;  
sbit pwm1= P2^7;  //引脚位定义

unsigned int target =6,percent = 0;  //声明target 目标 = 6,percent 百分百 = 0

void Timer0Initial();  //定时器0 TH0 TL0初始赋值函数
void initial_Timer();  //定时器0初始化配置函数
void delay(unsigned int x);  //1ms延时函数
void keyscan();                                                   //按键函数
void initial();  //系统初始化函数
void Timer0();//定时器0 中断服务程序

void main()  //主函数
{  
    initial();  //系统初始化
    while(1)  
    {  
        keyscan();  //按键处理函数
    }  
}

void keyscan()  //按键处理函数
{  
    if(key1 == 0)  //按键1是否按下
    {  
    delay(3);                  //延时3ms
    if(key1 == 0)  
    {  
        if(target >= 7)  //target 是否大于等于 7
        {  
            target -= 1;  //target - 1
        }  
        while(key1 == 0)  //按键1按下
        {P1 = 0x00;}                 
    }  
    P1 = 0xFF;  
    }  

    if(key2 == 0)  
    {  
        delay(3);  
        if(key2 == 0)  
        {  
            if(target <= 26)  //target 是否小于等于 26
            {  
                target += 1;  //target + 1
            }  
            while(key2 == 0)  
            {P1 = 0x00;}  
        }  
        P1 = 0xFF;  
    }  
}  

void initial()  //系统初始化函数
{  
    key1 = 1;  
    key2 = 1;  
    P1 = 0xff;  
    initial_Timer();  //定时器0 初始化
}  

/*使用11.0592mhz晶振
92次计时为100us
void Timer0Initial()  //定时器0 高八位 低八位  初始赋值
{  
    TH0 = (65536-92)/256;  
    TL0 = (65536-92)%256;  
}  //该初值使每0.1ms产生一次中断
void initial_Timer()  //定时器中断0 初始化
{  
    EA = 1;        
    ET0 = 1;      
    TMOD = 0x01;      
    Timer0Initial();      
    TR0 = 1;              
}  

void delay(unsigned int x)  //1ms延时函数
{  
    unsigned int i,j;  
    for(i = 0;i< x; ++i)  
        for(j = 120; j >0 ; --j)  
            ;  
}  

void Timer0() interrupt 1 using 0  //定时器0 中断服务程序
{  
    percent += 1;   //per + 1
    if(percent == 200)  //per 是否等于 200
    {  
        percent = 0;  //per = 0
        pwm1 = 1;                 //信号线输出高电平
    }  
    if(percent == target)  //par 是否等于 tar
    {  
        pwm1 = 0;  //信号线输出低电平
    }  
    Timer0Initial();  //定时器0 初始赋值

}  

QQ截图20180529173147.png (167.9 KB, 下载次数: 15)

QQ截图20180529173147.png

QQ截图20180529173156.png (123.54 KB, 下载次数: 28)

QQ截图20180529173156.png

QQ截图20180529173203.png (117.85 KB, 下载次数: 16)

QQ截图20180529173203.png





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1