标题: 求助:一个舵机控制小程序的编写 [打印本页]

作者: slh0721    时间: 2015-7-9 15:21
标题: 求助:一个舵机控制小程序的编写
我有个小项目上需要做一个用来控制舵机左右摆动且持续一分钟后停止的小程序。单片机用的是STC89C52RC,哪位大侠给练练手,帮忙写个C语言的。不胜感激。

作者: xtitxjg    时间: 2015-7-9 19:24
PWM20MS周期,高电平1—2SM 来回变,变一分钟
作者: jiakuo25    时间: 2015-7-10 07:06
这有个我发的舵机控制程序:http://www.51hei.com/bbs/dpj-37116-1.html
作者: slh0721    时间: 2015-7-11 17:27
你这个程序我有点看不太懂啊。
作者: slh0721    时间: 2015-7-15 00:46
有没有人劳驾写个程序啊?我试了好几次,舵机总是不动。

作者: stewart_leung    时间: 2015-8-19 12:27
同求!!!!
作者: 腾飞的龙    时间: 2015-8-23 22:27
你试试这个程序,适当改改。
  1. /****************************************************
  2. 功能:正确的3路舵机控制左,右,归中,程序
  3.         单片机:STC89C52
  4.         晶振:11.0592M
  5.         作者:苏义江
  6.         时间:2014-3-5
  7.         可以通过按键和传感器控制
  8. *****************************************************/
  9. //#include<12c5a.h>
  10. #include<reg52.h>
  11. #define uchar unsigned char
  12. #define uint unsigned int


  13. sbit moto_pwm=P1^0;//PWM输出脚控制舵机
  14. sbit moto_pwm1=P1^1;//PWM输出脚控制舵机
  15. sbit moto_pwm2=P1^2;//PWM输出脚控制舵机

  16. sbit xiaocheting=P1^3;//按键控制
  17. sbit xiaochehouti=P1^4;
  18. sbit xiaocheqianjin=P1^5;

  19. uchar pwm_lefr=0;//定义 定时器自加1变量
  20. uchar pwm_lefr1=0;//定义 定时器自加1变量
  21. uchar pwm_lefr2=0;//定义 定时器自加1变量
  22. uchar duojiguizhong=12;//舵机归中1.5ms
  23. uchar duojiguizhong1=12;//舵机归中1.5ms
  24. uchar duojiguizhong2=12;//舵机归中1.5ms


  25. void pwmmaic()//产生PWM
  26. {
  27.         if(pwm_lefr<=duojiguizhong)
  28.        
  29.                 moto_pwm=1;
  30.                 else
  31.                 moto_pwm=0;
  32.                 if(pwm_lefr>=200)
  33.                 pwm_lefr=0;       
  34. if(pwm_lefr1<=duojiguizhong1)
  35.        
  36.                 moto_pwm1=1;
  37.                 else
  38.                 moto_pwm1=0;
  39.                 if(pwm_lefr1>=200)
  40.                 pwm_lefr1=0;       
  41. if(pwm_lefr2<=duojiguizhong2)
  42.        
  43.                 moto_pwm2=1;
  44.                 else
  45.                 moto_pwm2=0;
  46.                 if(pwm_lefr2>=200)
  47.                 pwm_lefr2=0;       
  48. }
  49. void time1() interrupt 3
  50. {
  51. //        TH1=0XFf;//100us的赋值11.0592M
  52. //        TL1=0XAE;
  53.         TH1=(65536-60)/256;//100us的赋值
  54.         TL1=(65536-60)%256;
  55.         pwm_lefr++;
  56.         pwm_lefr1++;
  57.         pwm_lefr2++;
  58.         pwmmaic();
  59. }
  60. void inttime()
  61. {
  62. //        TMOD=0X10;
  63.         TMOD=0X11;
  64.         TH1=(65536-60)/256;//100us的赋值12M
  65.         TL1=(65536-60)%256;
  66. //        TH1=0XFf;//100us的赋值11.0592M
  67. //        TL1=0XAE;
  68.         ET1=1;
  69.         TR1=1;
  70.         EA=1;
  71. }
  72. void delay(uint z)
  73. {
  74.         uint x,y;
  75.         for(x=z;x>0;x--)
  76.         for(y=240;y>0;y--);
  77. }
  78. void main()
  79. {
  80.         duojiguizhong=12;//舵机归中
  81.         duojiguizhong1=12;//舵机归中
  82.         duojiguizhong2=12;//舵机归中
  83.         inttime();
  84.         while(1)
  85.         {
  86.                 if(xiaocheting==0)       
  87.                 {
  88.                         delay(10);
  89.                         if(xiaocheting==0)       
  90.                         {
  91.                                 duojiguizhong=4;
  92.                                 delay(2000);

  93.                                 duojiguizhong1=6;
  94.                                 delay(1000);

  95.                                 duojiguizhong=14;
  96.                                 delay(2000);

  97.                                 duojiguizhong1=14;
  98.                                 delay(2000);

  99.                                 while(xiaocheting==0);
  100.                                 duojiguizhong=12;//归中
  101.                                 delay(2000);
  102.                          }
  103.                          
  104.                 }
  105.        

  106.         }
  107. }
复制代码

作者: 51code    时间: 2015-9-15 21:38
有点看不懂




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