(原创)STC12C5A60S2 51单片机舵机控制器 不用PWM!

2021-06-147717
AI 快速预览详细 收起
本文介绍了如何使用STC12C5A60S2 51单片机通过控制高电平时间来控制舵机,而不需要使用PWM。文章提供了详细的代码示例和烧写步骤,适合初学者和爱好者。通过控制高电平时间(0.5~2.5ms),可以实现对舵机角度的精确控制。


舵机一个周期是20ms
一个周期中有0.5~2.5ms高电平
(原创)STC12C5A60S2 51单片机舵机控制器 不用PWM!图1
所以我们可以控制高电平的时间来控制舵机

程序用keil编译
(原创)STC12C5A60S2 51单片机舵机控制器 不用PWM!图2
hex文件在“ABC”里 用STC-isp烧写进51单片机
  1. #include <STC12C5A60S2.h>
  2. /*******************************************************************************************************************************************************
  3. 编写人:一只小学生
  4. 舵机控制器:舵机接P0.0    按键1接P2.0     按键2接P2.1     12M晶振
  5. *******************************************************************************************************************************************************/
  6. sbit dj=P0^0;
  7. void Dela (unsigned int a){                  //0.1ms延迟函数
  8.         unsigned int i;
  9.         while( --a != 0){
  10.                 for(i = 0; i < 60; i++);
  11.         }
  12. }
  13. void Delay (unsigned int ad){             //1ms延迟函数
  14.         unsigned int i;
  15.         while( --ad != 0){
  16.                 for(i = 0; i < 600; i++);
  17.         }
  18. }
  19. void DJ(unsigned int q){               //舵机函数(需配合0.1ms延迟函数)
  20.       dj = 1;
  21.       Dela (q);
  22.           dj = 0;
  23.           Dela (200-q);
  24.          
  25. }
  26. void main (void){
  27.   unsigned int a = 15;
  28.   P2M0 = 0xff;
  29.   P2M1 = 0xff;
  30.   while(1){
  31.     DJ (a);
  32.     if (P2 ^ 1 == 1){
  33.       Delay (20);
  34.       if (P2 ^ 1 == 1){
  35.                   if (a !=5){
  36.                     if(a != 25){
  37.             a--;
  38.                          }
  39.                   }
  40.       }
  41.     }
  42.     if (P2 ^ 0 == 1){
  43.       Delay (20);
  44.       if (P2 ^ 0 == 1){
  45.         if (a != 5){
  46.                     if(a != 25){
  47.             a++;
  48.                          }
  49.                   }
  50.       }
  51.     }
  52.     if (a == 5){
  53.            a++;
  54.          }
  55.          if (a == 25){
  56.            a--;
  57.          }
  58.   }
  59. }
复制代码
下载附件51单片机舵机.zip

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(4)
一只小学生
一只小学生
作者
单片机tx接USB-TTL的rx
单片机rx接USB-TTL的tx
ZJHER
ZJHER
您好我想问一下STC12C5A60S2程序烧录不了咋办
我是用USB-TTL的一个下载器连接单片机
但用stc-isp下载程序的时候一直在找单片机
一只小学生
一只小学生
作者
回复ZJHER
1.tx rx插的对不对
2.单片机是不是上回下载的时候没有使用内部晶振 如果是那么接一个外部晶振
3.把P1.0P1.1接地
一只小学生
一只小学生
作者
下周末再来(周三周四升学考)
一只小学生
一只小学生
作者
呀!板块放错了
- 没有更多了 -