当前位置:   article > 正文

使用51单片机控制sg90舵机来回旋转_sg90舵机51单片机程序

sg90舵机51单片机程序

使用STC89C51单片机控制SG90舵机来回旋转

main.c

  1. #include "control.h"
  2. void main() {
  3. Timer1_Init();
  4. while(1){
  5. control ();
  6. }
  7. }

 control.c

  1. #include <reg52.h>
  2. #include <intrins.h>
  3. sbit PWM = P1^0; // 舵机信号输入点位
  4. unsigned char counter, angle; // 计数值和旋转方向, angle范围 (1-5);
  5. // @11.0592MHZ
  6. void Delay500ms(){
  7. unsigned char i, j, k;
  8. _nop_();
  9. i = 4;
  10. j = 129;
  11. k = 119;
  12. do
  13. {
  14. do
  15. {
  16. while(--k);
  17. } while(--j);
  18. } while(--i);
  19. }
  20. // 500微秒@11.0592MHZ
  21. void Timer1_Init(){
  22. TMOD = 0x10; // 设置定时器模式
  23. TL1 = 0x33; // 设置定时初始值
  24. TH1 = 0xFE; // 设置定时初始值
  25. TF1 = 0; // 清除TF1标志
  26. TR1 = 1; // 定时器1开始计时
  27. ET1 = 1; // 定时器1的中断允许开关
  28. EA = 1; // 定时器总开关
  29. PT1 = 1; // 设置定时器为高低控制优先级
  30. }
  31. // 中断函数
  32. void Timer1_Routine() interrupt 3
  33. {
  34. TL1 = 0x33; // 设置定时初始值
  35. TH1 = 0xFE; // 设置定时初始值
  36. counter++;
  37. if (counter >= 40) {
  38. counter = 0;
  39. }
  40. if (counter < angle) {
  41. PWM = 1;
  42. } else {
  43. PWM = 0;
  44. }
  45. }
  46. void control(){
  47. counter = 0;
  48. angle = 2; // -45度位置
  49. Delay500ms();
  50. counter = 0;
  51. angle = 4; // +45度位置
  52. Delay500ms();
  53. counter = 0;
  54. angle = 3; // 0度位置(归中)
  55. Delay500ms();
  56. Delay500ms();
  57. }

 control.h

  1. #ifndef __CONTROL_H_
  2. #define __CONTROL_H_
  3. Timer1_Init();
  4. void control ();
  5. #endif

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/408660
推荐阅读
相关标签
  

闽ICP备14008679号