找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6049|回复: 2
收起左侧

一个stc89c52单片机按键控制舵机程序分享

[复制链接]
ID:236397 发表于 2017-12-4 20:20 | 显示全部楼层 |阅读模式
做了一个stc89c52开发板的按键控制舵机程序
希望对学习舵机的同学有小帮助
0.png
   0.5ms--------------0度;
   1.0ms------------45度;
   1.5ms------------90度;
   2.0ms-----------135度;
   2.5ms-----------180度;

单片机源程序如下:
  1. #include<reg52.h>
  2. #define unchar unsigned char
  3. unsigned char count;      //0.5ms次数标识
  4. unsigned char jd=0;  
  5. sbit pwm1 = P2^1;
  6. unsigned char flag=1;
  7. unsigned char flag1=1;
  8. sbit key1=P3^1;

  9. //void delayms(unsigned int t)
  10. //{
  11. //        int i = 0;
  12. //                for(;t>0;t--);
  13. //        for(i=110;i>0;i--);
  14. //
  15. //}
  16. void Time0_Init()          //定时器初始化
  17. {
  18. TMOD = 0x01;           //定时器0工作在方式1   
  19. TH0  =  (65535-500)/256;
  20. TL0  =  (65535-500)%256;    //12MZ晶振,0.5ms
  21. EA=1;            //总中断打开
  22. ET0=1;           //定时器中断打开
  23. TR0=1;           //定时器开关打开
  24. }

  25. void Time0_Int() interrupt 1
  26. {
  27.    static int t=0;
  28.    t++;
  29.   TH0  = (65535-500)/256;             //重新赋值
  30.    TL0  = (65535-500)%256;   
  31.     if(count< jd)              //判断0.5ms次数是否小于角度标识
  32.      {
  33.           pwm1=1;                  //确实小于,PWM输出高电平
  34.      }
  35.     else
  36.       {
  37.           pwm1=0;                 //大于则输出低电平
  38.       }
  39.     count++;//(count+1);          //0.5ms次数加1
  40.      if(count>=40)
  41.      count=0;
  42.     //count=count%40;     //次数始终保持为40 即保持周期为20ms
  43. //   if(t<2000)
  44. //   {
  45. //           jd=4;
  46. //   }
  47. //   else if(t<4000)
  48. //   {
  49. //     jd=1;
  50. //   }
  51. //         else
  52. //         t=0;

  53.                
  54. }
  55.    unsigned char count;      //0.5ms次数标识

  56. void keyscan()              //按键扫描
  57. {
  58.     if(key1==0&&flag1)
  59.         {
  60.        
  61.            flag=!flag;
  62.            flag1=0;
  63.    }else if(key1) flag1=1;
  64.             
  65. }

  66. void main()
  67. {
  68.       
  69. count=0;
  70. Time0_Init();
  71. while(1)
  72. {
  73.         keyscan();
  74.         if(flag)
  75.                 {
  76.                   jd=4;
  77.                
  78.                 }
  79.                 else
  80.                 jd=1;

  81. }
  82. }

复制代码

所有资料51hei提供下载:
舵机学习.zip (42.78 KB, 下载次数: 100)

评分

参与人数 1黑币 +5 收起 理由
ABCD丁 + 5 很给力!

查看全部评分

回复

使用道具 举报

ID:307651 发表于 2018-6-29 10:44 | 显示全部楼层
支持------
回复

使用道具 举报

ID:336174 发表于 2018-7-4 16:27 | 显示全部楼层
我想问一下那个角度标识是什么作用啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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