找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机舵机控制系统 驱动设计完整版 带仿真和程序

  [复制链接]
跳转到指定楼层
楼主
分享点我自己的51单片机控制舵机的资料give大家,带原理图程序proteus仿真

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


舵机程序设计的流程图(附件中可下载清晰版):


单片机驱动舵机源程序如下:
  1. /*******************************************************
  2. *****************************************************
  3. StC80C51 控制舵机驱动程序
  4. ******************************************************/


  5. #include <REG52.h> //STC80C51 单片机头文件

  6. sbit LED_0=P2^0; //0度指示灯
  7. sbit LED_45=P2^1; //45度指示灯
  8. sbit LED_90=P2^2; //90度指示灯
  9. sbit LED_135=P2^3; //135度指示灯
  10. sbit LED_180=P2^4; //180度指示灯

  11. sbit PWM_JIA=P3^6; //角度加按键
  12. sbit PWM_JIAN=P3^7; //角度减按键

  13. sbit MOTOR_IN=P1^7; //舵机信号输入角

  14. unsigned char count; //定时器中断次数
  15. unsigned char jiaodu;//角度参数


  16. /************************************
  17. *********毫秒延时函数************
  18. ************************************/
  19. void Delay(unsigned char xms)
  20. {
  21.         unsigned char i,j;
  22.         for(i=xms;i>0;i--)
  23.                 for(j=125;j>0;j--);
  24. }

  25. /************************************
  26. *********定时器0初始化函数***********
  27. ************************************/
  28. void Time0_init()
  29. {
  30.   TMOD=0X01; //定时器工作在方式1
  31.   IE=0X82;
  32.   TH0=0XFE;
  33.   TL0=0X33; //定时0.5毫秒中断一次
  34.   TR0=1;  //打开定时器
  35. }

  36. /************************************
  37. *********按键扫描函数***********
  38. ************************************/
  39. void KeyScan()
  40. {
  41.   if(PWM_JIA==0)  //角度增加按键是否按下
  42.   {
  43.       Delay(10);  //延时10毫秒消抖

  44.           if(PWM_JIA==0) //确定按键按下
  45.           {
  46.               jiaodu++;
  47.                   count=0;
  48.                   if(jiaodu ==6) //如果角度参数为6

  49.                    jiaodu =5; //如果角度参数复位为5

  50.          while(PWM_JIA==0); //等待按键松开
  51.           }
  52.    
  53.   }

  54.     if(PWM_JIAN==0)//角度减少按键是否按下
  55.           {
  56.       Delay(10); //延时10毫秒消抖

  57.           if(PWM_JIAN==0)//确定按键按下
  58.           {
  59.               jiaodu--;
  60.                   count=0;
  61.                   if(jiaodu ==0)//如果角度参数为0

  62.                    jiaodu =1;//如果角度参数复位为1

  63.          while(PWM_JIAN==0);//等待按键松开
  64.           }
  65.    
  66.   }
  67. }
  68. /************************************
  69. *********LED显示函数***********
  70. ************************************/
  71. void Display()
  72. {
  73. switch(jiaodu)
  74. {
  75.     case 1:            //如果角度参数为1,LED1亮
  76.          P2=0XFF;
  77.                  LED_0=0;
  78.                  break;

  79.     case 2:           //如果角度参数为2,LED2亮
  80.          P2=0XFF;
  81.                  LED_45=0;
  82.                  break;

  83.     case 3:           //如果角度参数为3,LED3亮
  84.          P2=0XFF;
  85.                  LED_90=0;
  86.                  break;

  87.         case 4:           //如果角度参数为4,LED4亮
  88.          P2=0XFF;
  89.                  LED_135=0;
  90.                  break;

  91.         case 5:           //如果角度参数为5,LED5亮
  92.          P2=0XFF;
  93.                  LED_180=0;
  94.                  break;

  95. }
  96. }
  97. /************************************
  98. *********主函数***********
  99. ************************************/
  100. void main()
  101. {
  102. jiaodu=1;  //初始化角度参数为1
  103. count=0; //初始化定时器中断次数为0
  104. Time0_init(); //调用定时器0初始化函数
  105. while(1)
  106. {
  107.             KeyScan(); //调用按键扫描函数
  108.           Display(); //调用LED显示函数
  109. }
  110. }
  111. /************************************
  112. *********定时器0中断服务函数***********
  113. ************************************/
  114. ……………………

  115. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
舵机驱动设计完整版.rar (323.58 KB, 下载次数: 1077)



评分

参与人数 6黑币 +73 收起 理由
kevin666999 + 6 很给力!
zqy181818 + 5 赞一个!
xuning0000 + 2 绝世好帖!
a782127162 + 5 很给力!
。。。ww + 5 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:1 发表于 2017-5-24 01:36 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

板凳
ID:266277 发表于 2018-1-11 00:24 | 只看该作者

谢谢你,刚好是我想要的,51黑有你更精彩!!!
回复

使用道具 举报

地板
ID:277572 发表于 2018-1-18 23:05 | 只看该作者
大佬,51只能控制舵机以这几个角度转吗?能不能调成自己想要的任意角
回复

使用道具 举报

5#
ID:277572 发表于 2018-1-18 23:07 | 只看该作者
51能不能控制舵机以任意角度转,还是只能转这几个角度
回复

使用道具 举报

6#
ID:271220 发表于 2018-1-31 19:08 | 只看该作者
15379996356 发表于 2018-1-18 23:07
51能不能控制舵机以任意角度转,还是只能转这几个角度

可以任意
回复

使用道具 举报

7#
ID:239855 发表于 2018-2-11 01:05 来自手机 | 只看该作者
学习学习学习
回复

使用道具 举报

8#
ID:285282 发表于 2018-2-24 20:44 | 只看该作者
只能转这几个角度
回复

使用道具 举报

9#
ID:243748 发表于 2018-3-30 20:43 来自手机 | 只看该作者
非常好的资料,谢谢
回复

使用道具 举报

10#
ID:307421 发表于 2018-4-13 17:30 | 只看该作者
为什么仿真不了呢,2个错误,电源怎么加呢
回复

使用道具 举报

11#
ID:308986 发表于 2018-4-16 09:22 | 只看该作者
谢谢~
回复

使用道具 举报

12#
ID:310267 发表于 2018-4-17 18:00 | 只看该作者
不错,顶
回复

使用道具 举报

13#
ID:196106 发表于 2018-5-2 11:40 | 只看该作者
感谢楼主的分享学习一下
回复

使用道具 举报

14#
ID:321184 发表于 2018-5-3 13:44 | 只看该作者
好资料,烧进去程序试试
回复

使用道具 举报

15#
ID:294554 发表于 2018-5-5 10:17 | 只看该作者
感谢楼主
回复

使用道具 举报

16#
ID:294554 发表于 2018-5-8 16:05 | 只看该作者
多谢楼主,多多学习
回复

使用道具 举报

17#
ID:274077 发表于 2018-5-10 20:43 | 只看该作者
仿真提示5V电源错误,需要改为VCC才可以运行,
但是不知道为什么舵机不管怎么样都动不了
回复

使用道具 举报

18#
ID:326312 发表于 2018-5-11 17:29 | 只看该作者
为什么你的舵机不转
回复

使用道具 举报

19#
ID:158746 发表于 2018-5-21 11:40 | 只看该作者
感谢大佬,非常棒
回复

使用道具 举报

20#
ID:299355 发表于 2018-5-21 21:25 | 只看该作者
步进电机连线好像错了,我把电机1脚接vcc;2脚接P1.7;3脚接GND勉强会转了,而且转的角度有问题
回复

使用道具 举报

21#
ID:335855 发表于 2018-5-22 18:26 | 只看该作者
电路图有问题哦   舵机的中间才是接信号线的吧
回复

使用道具 举报

22#
ID:17521 发表于 2018-6-1 16:49 | 只看该作者
多谢楼主,多多学习
回复

使用道具 举报

23#
ID:343360 发表于 2018-6-2 11:07 | 只看该作者
刚好需要这个舵机的控制程序,很及时
回复

使用道具 举报

24#
ID:343860 发表于 2018-6-7 11:55 | 只看该作者
哎哟,不错啊!
回复

使用道具 举报

25#
ID:346558 发表于 2018-6-8 15:28 | 只看该作者
老哥,如果只控制舵机自动转到一定角度然后回来这样的重复运动改怎么搞
回复

使用道具 举报

26#
ID:343860 发表于 2018-6-11 19:33 | 只看该作者
下载试试看,愁死了,这个舵机
回复

使用道具 举报

27#
ID:343860 发表于 2018-6-11 19:36 | 只看该作者
发现和郭天祥的例程差不多一样啊,我晕哦
回复

使用道具 举报

28#
ID:352124 发表于 2018-6-14 21:00 | 只看该作者
赞一个!
回复

使用道具 举报

29#
ID:372058 发表于 2018-7-17 16:40 | 只看该作者
为什么烧录之后没反应
回复

使用道具 举报

30#
ID:379175 发表于 2018-7-25 22:18 | 只看该作者
有一个地方没看懂,sbit MOTOR_IN=P1^7; //舵机信号输入角,整个程序里光定义了,也没用到啊
回复

使用道具 举报

31#
ID:44165 发表于 2018-7-31 23:29 | 只看该作者
学习学习学习
回复

使用道具 举报

32#
ID:379175 发表于 2018-8-3 10:39 | 只看该作者
小玺 发表于 2018-7-25 22:18
有一个地方没看懂,sbit MOTOR_IN=P1^7; //舵机信号输入角,整个程序里光定义了,也没用到啊

求解释
回复

使用道具 举报

33#
ID:379175 发表于 2018-8-3 10:40 | 只看该作者
20090909 发表于 2018-7-17 16:40
为什么烧录之后没反应

有一个地方没看懂,sbit MOTOR_IN=P1^7; //舵机信号输入角,整个程序里光定义了,也没用到啊
回复

使用道具 举报

34#
ID:353228 发表于 2018-8-26 17:16 | 只看该作者
很给力
回复

使用道具 举报

35#
ID:397113 发表于 2018-9-12 18:08 | 只看该作者
不错。。。。。
回复

使用道具 举报

36#
ID:403348 发表于 2018-9-27 20:08 | 只看该作者
厉害
。。。
回复

使用道具 举报

37#
ID:308180 发表于 2018-10-7 23:19 | 只看该作者
支持支持
回复

使用道具 举报

38#
ID:414627 发表于 2018-10-24 14:44 | 只看该作者
谢谢分享
回复

使用道具 举报

39#
ID:414627 发表于 2018-10-24 14:44 | 只看该作者
谢谢分享
回复

使用道具 举报

40#
ID:325230 发表于 2018-11-12 10:42 | 只看该作者
太棒了!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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