虫虫首页|资源下载|资源专辑|精品软件|心愿单
m 登录|注册

51单片机控制舵机PWM程序

源代码在线查看: pwm.lst

软件大小: 29 K 下载次数: 2
上传用户: ryan_li17
关键词: PWM 51单片机 控制 舵机
下载地址: 电信下载 网通下载 移动下载 联通下载 VIP VIP

相关代码

					C51 COMPILER V9.00   PWM                                                                   08/26/2011 14:26:26 PAGE 1   
					
					
					C51 COMPILER V9.00, COMPILATION OF MODULE PWM
					OBJECT MODULE PLACED IN pwm.OBJ
					COMPILER INVOKED BY: K:\keil uVision4\C51\BIN\C51.EXE pwm.c BROWSE DEBUG OBJECTEXTEND
					
					line level    source
					
					   1          #include "PWM.h"
					   2          
					   3          uchar baseTimeCounter = 0;              // 定时器0的基本定时时间
					   4          uchar steeringEngineAngle = STEERING_ENGINE_ANGLE;      //角度标识
					   5          
					   6          /******************************************************************
					   7           - 功能描述:1ms精度的延迟函数
					   8           - 参数说明:  
					   9           - 返回说明:
					  10           - 示例:  
					  11           - 修改记录:
					  12           - 注意事项:适用于11.0592M的晶振频率。
					  13          ******************************************************************/
					  14          void Delay_1ms(uint ms)//延时
					  15          {
					  16   1              uint i, j;
					  17   1      
					  18   1              for (i=0; i					  19   1              {
					  20   2                      for (j=0; j					  21   2              }
					  22   1      }
					  23          
					  24          /******************************************************************
					  25           - 功能描述:设定定时器0的定时时间为0.5ms
					  26           - 参数说明:  
					  27           - 返回说明:
					  28           - 示例:  
					  29           - 修改记录:
					  30           - 注意事项:适用于11.0592M的晶振频率。
					  31          ******************************************************************/
					  32          void Init_Timer0(void)  //定时器初始化
					  33          {       
					  34   1              // 设定定时器0工作在方式1(16位定时器模式)
					  35   1              TMOD = 0x01;    
					  36   1              // 设定定时器0的定时时间
					  37   1              TH0 = (65535-460)/256;
					  38   1              TL0 = (65535-460)%256;  //11.0592MZ晶振,0.5ms
					  39   1              // 开中断
					  40   1              ET0 = 1;
					  41   1              EA = 1;
					  42   1              // 开启定时器
					  43   1              TR0 = 1;
					  44   1      }
					  45          
					  46          /******************************************************************
					  47           - 功能描述:产生所需要的PWM波
					  48           - 参数说明:  
					  49           - 返回说明:
					  50           - 示例:  
					  51           - 修改记录:
					  52           - 注意事项:适用于11.0592M的晶振频率。
					  53          ******************************************************************/
					  54          void Timer0_Interrupt() interrupt 1 //中断程序
					  55          {        
					C51 COMPILER V9.00   PWM                                                                   08/26/2011 14:26:26 PAGE 2   
					
					  56   1              // 重载定时器0
					  57   1              TH0 = (65535-460)/256;  
					  58   1              TL0 = (65535-460)%256;
					  59   1      
					  60   1              if (baseTimeCounter < steeringEngineAngle)      //判断0.5ms次数是否小于角度标识
					  61   1              {
					  62   2                      PWM0 = 1;                  //确实小于,PWM输出高电平
					  63   2              }
					  64   1              else
					  65   1              {
					  66   2                      PWM0 = 0;                  //大于则输出低电平
					  67   2              }
					  68   1      
					  69   1              baseTimeCounter += 1;          //0.5ms次数加1
					  70   1              if (baseTimeCounter == 40)
					  71   1              {
					  72   2                      baseTimeCounter = 0;
					  73   2              }
					  74   1      }
					  75          
					  76          /******************************************************************
					  77           - 功能描述:通过按键调整PWM波的占空比->舵机的角度
					  78           - 参数说明:  
					  79           - 返回说明:
					  80           - 示例:  
					  81           - 修改记录:
					  82           - 注意事项:每次增加/减少的角度为45°
					  83          ******************************************************************/
					  84          void KeyScan(void)              //按键扫描
					  85          {       
					  86   1              #if (ADJUST_STEERING_ENGINE_MODE == KEY_SET_POINT)
					  87   1              {
					  88   2                      // 增加角度
					  89   2                      if (KEY1 == 0)                          // 角度增加按键是否按下
					  90   2                      {
					  91   3                              Delay_1ms(10);                                  // 延时消抖
					  92   3                              if (KEY1 == 0)                          // 确实按下
					  93   3                              {       
					  94   4                                      baseTimeCounter = 0;                            // 按键按下 则20ms周期从新开始
					  95   4              
					  96   4                                      steeringEngineAngle++;                  // 高电平时间增加0.5ms->角度增加45°                    
					  97   4                                      if(steeringEngineAngle == 12)
					  98   4                                      {
					  99   5                                              steeringEngineAngle = 11;       // 已经是180度,则保持
					 100   5                                      }
					 101   4              
					 102   4                                      while (KEY1 == 0);      // 等待按键放开
					 103   4                              }
					 104   3                      }
					 105   2                      // 减少角度
					 106   2                      if (KEY2 == 0)                          // 角度减小按键是否按下
					 107   2                      {
					 108   3                              Delay_1ms(10);                                  // 延时消抖
					 109   3                              if (KEY2 == 0)
					 110   3                              {       
					 111   4                                      baseTimeCounter = 0;
					 112   4              
					 113   4                                      steeringEngineAngle--;          // 角度标识减1                  
					 114   4                                      if(steeringEngineAngle==0)
					 115   4                                      {
					 116   5                                              steeringEngineAngle=1;          // 已经是0度,则保持
					 117   5                                      }
					C51 COMPILER V9.00   PWM                                                                   08/26/2011 14:26:26 PAGE 3   
					
					 118   4              
					 119   4                                      while (KEY2 == 0);              // 等待按键放开
					 120   4                              }
					 121   3                      }
					 122   2              }
					 123   1              #endif
					 124   1      }
					
					
					MODULE INFORMATION:   STATIC OVERLAYABLE
					   CODE SIZE        =    141    ----
					   CONSTANT SIZE    =   ----    ----
					   XDATA SIZE       =   ----    ----
					   PDATA SIZE       =   ----    ----
					   DATA SIZE        =      2    ----
					   IDATA SIZE       =   ----    ----
					   BIT SIZE         =   ----    ----
					END OF MODULE INFORMATION.
					
					
					C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)
									

相关资源