找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机控制MG996R舵机源程序

  [复制链接]
跳转到指定楼层
楼主
ID:580450 发表于 2019-7-20 20:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
记得要用变压器不然  供电会有问题

单片机源程序如下:
  1. #include "reg52.h"
  2. unsigned char count;      //0.5ms次数标识
  3. sbit pwm =P2^7 ;          //PWM信号输出
  4. sbit jia =P3^4;           //角度增加按键检测IO口
  5. sbit jan =P3^5;           //角度减少按键检测IO口
  6. unsigned char jd;         //角度标识
  7. sbit led=P1^4;
  8. void delay(unsigned char i)//延时
  9. {
  10.   unsigned char j,k;
  11.   for(j=i;j>0;j--)
  12.     for(k=125;k>0;k--);
  13. }
  14. void Time0_Init()          //定时器初始化
  15. {
  16. TMOD = 0x01;           //定时器0工作在方式1   
  17. IE   = 0x82;
  18. TH0  = 0xfe;
  19. TL0  = 0x33;     //11.0592MZ晶振,0.5ms
  20.     TR0=1;                 //定时器开始
  21. }
  22. void Time0_Int() interrupt 1 //中断程序
  23. {
  24. TH0  = 0xfe;             //重新赋值
  25. TL0  = 0x33;
  26.     if(count< jd)              //判断0.5ms次数是否小于角度标识
  27.       pwm=1;                  //确实小于,PWM输出高电平
  28.     else
  29.       pwm=0;                  //大于则输出低电平
  30.     count=(count+1);          //0.5ms次数加1
  31.     count=count%40;     //次数始终保持为40 即保持周期为20ms
  32. }

  33. void keyscan()              //按键扫描
  34. {
  35.    if(jia==0)               //角度增加按键是否按下
  36.   {        led=0;
  37.     delay(10);              //按下延时,消抖
  38.     if(jia==0)              //确实按下
  39.      {
  40.       jd++;                 //角度标识加1
  41.       count=0;              //按键按下 则20ms周期从新开始
  42.       if(jd==6)
  43.         jd=5;               //已经是180度,则保持
  44.       while(jia==0);        //等待按键放开
  45.      }
  46.   }
  47.   if(jan==0)                //角度减小按键是否按下
  48.   {
  49.     delay(10);
  50.     if(jan==0)
  51.      {
  52.       jd--;                 //角度标识减1
  53.       count=0;
  54.       if(jd==0)
  55.         jd=1;               //已经是0度,则保持
  56.       while(jan==0);
  57.      }
  58.   }
  59. }
  60. void main()
  61. {
  62. jd=1;
  63. count=0;
  64. Time0_Init();              
  65. while(1)
  66. {
  67.   keyscan();               //按键扫描
  68.    
  69. }
  70. }
复制代码

所有资料51hei提供下载:
舵机.zip (21.49 KB, 下载次数: 124)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:601248 发表于 2019-8-18 10:22
你好  我看到了你发的关于51单片机控制mg996r舵机的帖子  我有一些问题 想请教你  如果方便的话   请加我qq  2963648058  或者微信 13832122352 拜托了  

板凳
ID:638524 发表于 2019-11-29 15:09 | 只看该作者
我觉得应该要要计时器更短一点,然后就可以精准一点,比如说,我上面的代码是0.5ms的,我其余不变,把定时器改成0.25ms一次,jd的数字就可以改成两倍,原来的1和2对应现在的2和4,之间就多一个可以保持的角度了,多了个半角。就比原来多几个角度可以控制,当周期越来越小,最后就会越来越准确
回复

使用道具 举报

地板
ID:348676 发表于 2019-12-11 16:29 | 只看该作者
谢谢正在学习很有用
回复

使用道具 举报

5#
ID:479765 发表于 2020-1-5 20:37 来自手机 | 只看该作者
mg996r舵机 需要初始化程序吗 楼主大大
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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