×
单片机 > 单片机程序设计 > 详情

ARM7单片机(学习ing)—(七)、脉宽调制PWM—02

发布时间:2020-07-08 发布时间:
|

好了,这个实验也是比较简单的~~

通过按键来调整PWM的输出(这里周期不变,只是改变占空比)~~

七、脉宽调制(PWM)

七—(02)、可调整的PWM输出(后面的程序有一般的操作步骤,我没有进行双边沿的控制模式的实验,可以参照datasheet~~自己做做~~)





MDK7_1.c(貌似按键不起作用~~(*^__^*) 嘻嘻……等下回碰上我再试试吧~~)

//------------------------------------------------------------------------------
//可以调整的PWM输出
//首先呢,还是先介绍一下操作步骤:
//1)连接PWM功能引脚,设置相应位(PINSEL0、PINSEL1)
//2)设置PWM定时器的时钟分频器(PWMPR),得到所要的定时器时钟
//3)设置比较匹配控制(PWMMCR),并设置相应的比较值(PWMMRx)
//4)设置PWM输出方式,并允许PWM输出(PWMPCR)及锁存使能控制(PWMLER)
//5)设置PWMTCR,启动定时器,使能PWM
//6)运行过程中要更改比较值时,更改之后要设置锁存使能(PWMLER)
//------------------------------------------------------------------------------
//可以调整的PWM输出
//------------------------------------------------------------------------------
#include"lpc210x.h"
#include"macroandconst.h"
//------------------------------------------------------------------------------
#define KEY 0x00004000         //P0.14引脚连接KEY
//------------------------------------------------------------------------------
//key_scan()
//等待检测按键函数
void key_scan()
{
 uint32 i;
 while(1)
 {
  while((IOPIN&KEY)!=0);       //等待按键按下
  for(i=0;i<50;i++);        //延时消抖
  if(IOPIN&KEY==0)
   break;
 }
 while(IOPIN&KEY==0);        //等待按键松手
}
//------------------------------------------------------------------------------
//pwm_init()
//PWM初始化函数
void pwm_init()
{
 PWMPR=0X00;           //不分频,技术频率为Fpclk
 PWMMCR=0X02;          //设置PWMMR0匹配时复位PWMTC
 PWMMR0=2765;          //设置PWM周期
 PWMMR6=1382;          //设置PWM占空比
 PWMLER=0X41;          //PWMMR0PWMMR6锁存
 PWMPCR=0X4000;          //允许PWM6输出,单边PWM
 PWMTCR=0X09;          //启动定时器,PWM使能
}
//------------------------------------------------------------------------------
//main()
int main()
{
 uint32 pwm_data;         //定义PWM占空比控制变量
 PINSEL0=0X00080000;         //设置PWM6连接到P0.9引脚
 PINSEL1=0X00000000;         //其它引脚设置为GPIO
 IODIR=0;           //设置所有引脚为输入

 pwm_init();

 pwm_data=1382;
 while(1)
 {
  PWMMR0=2765;         //设置PWM周期
  PWMMR6=pwm_data;        //设置PWM占空比
  PWMLER=0X41;         //PWMMR0、PWMMR6锁存,更新PWM占空比

  key_scan();
  pwm_data+=100;
  if(pwm_data>=2764)
   pwm_data=0;
 }
}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项