找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3535|回复: 0
收起左侧

单片机控制舵机扇形摇摆的源码 循环左右摇臂动作 20ms周期

[复制链接]
ID:362221 发表于 2018-6-30 12:22 | 显示全部楼层 |阅读模式
我现在也在做舵机控制,这是控制一个舵机的程序,可以参考!
 改变单片机输出脉冲宽度1ms~2ms,使舵机在-90°~+90°间转动

单片机源程序如下:
  1. /*-----------------------------------------------
  2.   名称:舵机控制       
  3.   编写:shifang
  4.   修改:无
  5.   内容:舵机进行循环左右摇臂动作 20ms周期,高电平时间从0.5ms~2.5ms,最大范围,根据不同舵机调整
  6. ------------------------------------------------*/
  7. #include<reg52.h>
  8. #include "delay.h"

  9. sbit OUT = P0^0;

  10. unsigned char TH_H,TL_H,TH_L,TL_L;//

  11. /*------------------------------------------------
  12.                     定时器初始化子程序
  13. ------------------------------------------------*/
  14. void Init_Timer0(void)
  15. {
  16. TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响        TOMD = TOMD | 0X01             
  17. TH0=0x00;              //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
  18. TL0=0x00;
  19. EA=1;            //总中断打开
  20. ET0=1;           //定时器中断打开
  21. TR0=1;           //定时器开关打开
  22. }
  23. /*------------------------------------------------
  24.                  数据处理
  25. ------------------------------------------------*/
  26. void DataPro(unsigned int temp)
  27. {
  28.          TH_H=(65536-temp)/256;
  29.      TL_H=(65536-temp)%256;
  30.          TH_L=(46536+temp)/256;
  31.          TL_L=(46536+temp)%256;
  32. }
  33. /*------------------------------------------------
  34.                  主程序
  35. ------------------------------------------------*/
  36. main()
  37. {
  38.   unsigned int  temp=1500;
  39.   bit flag=0;
  40.   Init_Timer0();
  41.   DataPro(temp);

  42.   while(1)
  43.      {
  44.      while(!flag){
  45.          if(temp<2300)
  46.         temp+=10;
  47.      else
  48.           flag=1;
  49.          DelayMs(3);
  50.          DataPro(temp);
  51.                   }
  52.          while(flag)
  53.            {
  54.      if(temp>700)
  55.         temp-=10;
  56.      else
  57.         flag=0;
  58.          DelayMs(3);
  59.          DataPro(temp);
  60.                 }
  61.      
  62.          }
  63. }

  64. /*------------------------------------------------
  65.                  定时器中断子程序
  66. ------------------------------------------------*/
  67. void Timer0_isr(void) interrupt 1
  68. {
  69. if(OUT)
  70. {
  71. TH0=TH_L;                  //重新赋值
  72. TL0=TL_L;
  73. }
  74. else
  75. {
  76.   TH0=TH_H;                  //重新赋值
  77.   TL0=TL_H;
  78.   }
  79. OUT=!OUT;
  80. }


复制代码

所有资料51hei提供下载:
127-舵机扇形摇摆.rar (23.41 KB, 下载次数: 40)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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