找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1224|回复: 0
打印 上一主题 下一主题
收起左侧

单片机舵机控制程序

[复制链接]
跳转到指定楼层
楼主
ID:825404 发表于 2020-10-9 09:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <reg52.h>      
  2. typedef unsigned char u8;
  3. typedef unsigned int u16;
  4. sbit PWM_OUT=P0^0;                                        //PWM输出口
  5. u16 PWM_Value;                                                //定义pwm值
  6. u8 order=0;  
  7. void Delay(unsigned int s);              //延时函数声明
  8. u8 flag;
  9.                                                         //舵机按键标志
  10. void Delay(unsigned int s)
  11. {
  12. unsigned int i;
  13. for(i=0; i<s; i++);
  14. for(i=0; i<s; i++);
  15. }

  16. /*定时器初始化*/
  17. void Init_Timer0()         
  18. {
  19. TMOD=0x11;
  20. TH1=(65536-1500)/256;
  21. TL1=(65536-1500)%256;
  22. EA = 1;
  23. ET1= 1;
  24. TR1 = 1;
  25. PT1=1;

  26. }



  27. /*主函数*/
  28. void main(void)
  29. {
  30.          
  31.         Delay(6000);
  32.         PWM_Value =101;
  33.                                                 //pwm初值为1500
  34.         Init_Timer0();         
  35.         while(1)
  36.         {
  37.                 PWM_Value += 10;       
  38.                 Delay(1000);
  39.                                                                                                                                
  40.                 //PWM_Value -= 1;       
  41.                 //Delay(1000);                                                                                                       
  42.         }
  43. }

  44.    /*****中断程序*******/
  45. void timer0(void) interrupt 3
  46. {        
  47.        
  48.         if(PWM_Value>=2500)                                                                                //如果pwm的值大于2500
  49.         PWM_Value = 2500;                                                                                                //则保持在2500
  50.         if(PWM_Value<=100)                                                                                        //如果pwm的值小于500
  51.         PWM_Value=500;                                                                                                        //则保持在500          
  52.         switch(order)         
  53.         {
  54.                 case 1:PWM_OUT=1;
  55.                            TH1=(65536-PWM_Value)>>8;  
  56.                            TL1=(u8)(65536-PWM_Value);
  57.                            break;                                   
  58.                 case 2:PWM_OUT=0;         
  59.                            TH1=(65536-(5000-PWM_Value))>>8;             
  60.                            TL1=(u8)(65536-(5000-PWM_Value));         
  61.                            break;                                         
  62.                 case 3:         
  63.                            TH1=60536>>8;            
  64.                            TL1=(u8)60536;         
  65.                            break;         
  66.                 case 4:         
  67.                            TH1=60536>>8;            
  68.                            TL1=(u8)60536;         
  69.                            order=0;         
  70.                            break;         
  71.         default: order=0;          
  72.                            break;         
  73.         }

  74.           order++;
  75. }
复制代码


舵机.zip

30.78 KB, 下载次数: 16, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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