配置完成这些自然就能产生相应的PWM了 但是我们如何改变占空比呢 其实比较简单 只需要我们按键改变一下CCR1或者CCR2里面的值皆就可以了
下面附上一段代码 仅供参考 按键接P1.3和P1.4 P1.2产生PWM 在示波器上可以明显看到用按键控制波形的变化
代码如下:
#include
long int flag=10;//决定PWM占空比的变量
/****************************************************************************
函数名称 :delay
函数功能:延时 延时的长短由tmp的数值决定
函数参数:无
函数返回值:无
*****************************************************************************/
void delay(void)
{
unsigned int tmp;
for(tmp = 120;tmp > 0;tmp--);
}
/*****************************************************************************
函数名称 :Key
函数功能 :检测按键 用来改变flag的值 进而改变PWM的占空比 目前PWM的精确度为1%
函数参数:无
函数返回值:无
*****************************************************************************/
void Key()
{
P1DIR&=~(BIT3+BIT3);//设置IO为输入模式
P1REN|=BIT3+BIT4;//启用上拉/下拉模式
P1OUT|=BIT3+BIT4;//设置为上拉模式
{
if((P1IN&BIT3)==0)//按键按下
{
delay(); //延时用来消除按键的抖动
while(!(P1IN&BIT3)); //等待按键松手
flag+=1; //flag+1 用来改变占空比
if(flag>100) //占空比到100 清零
flag=0;
}
if((P1IN&BIT4)==0)//同上注释
{
delay();
while(!(P1IN&BIT4));
flag-=1;
if(flag>100)
flag=0;
}
}
}
/**************************************************************************
函数名称: PWM_Init
函数功能:初始化PWM
函数参数:无
函数返回值:无
***************************************************************************/
void PWM_Init()
{
P1DIR |= BIT2; // 设置P1.2为输出
P1SEL |= BIT2; // 选择P1.2的PWM功能
P1SEL2 = 0; //选择默认引脚功能
CCR0 = 100; // 设定PWM 周期
CCTL1 = OUTMOD_7;
TACTL = TASSEL_2 + MC_1; // SMCLK时钟 增计数模式
}
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
PWM_Init();
for (;;)
{
Key();
CCR1 = flag;
}
}