找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1789|回复: 0
打印 上一主题 下一主题
收起左侧

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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表