|
#include <msp430f5529.h>
void delay_1ms(void)
{
{
unsigned int k;
for(k=0;k<195;k++);
}
}
void delay_nms(unsigned int n )
{
unsigned int j;
for(j=0;j<n;j++)
{
delay_1ms();
}
}
int main( void )
{
unsigned const PWMPeriod = 1500; //設(shè)置PWM周期參數(shù),const聲明此值不允許改變.該數(shù)值太大,會(huì)導(dǎo)致LED閃爍
volatile unsigned int i; //聲明變量i是隨時(shí)可變的,系統(tǒng)不要去優(yōu)化這個(gè)值
WDTCTL = WDTPW + WDTHOLD; // 關(guān)閉看門狗
P2DIR |= BIT1;
P2SEL |= BIT1; // 設(shè)置 p2.1為TA1.2輸出
TA1CCR0 = PWMPeriod; // 設(shè)置PWM 周期
TA1CCTL2 = OUTMOD_7; // 設(shè)置PWM 輸出模式為:7 - PWM復(fù)位/置位模式,
// 即輸出電平在TAR的值等于CCR2時(shí)復(fù)位為0,當(dāng)TAR的值等于CCR0時(shí)置位為1,改變CCR2,從而產(chǎn)生PWM。其實(shí)模式2也可以
TA1CTL= TASSEL_2 +MC_1; // 設(shè)置TIMERA的時(shí)鐘源為SMCLK, 計(jì)數(shù)模式為up,到CCR0再自動(dòng)從0開始計(jì)數(shù)
while(1)
{
TA1CCR2=0;//確保最開始是暗的
//漸亮過程:不斷設(shè)置TA0CCR2的值,使翻轉(zhuǎn)的時(shí)間變長,改變PWM的占空比
for(i=0;i<PWMPeriod;i+=1)
{
TA1CCR2=i;
delay_nms(4-(i/500)); //占空比變化的延時(shí),調(diào)整延遲時(shí)間可改變呼吸燈變暗的速度
//在暗的時(shí)候延長delay時(shí)間,可增強(qiáng)效果
}
//漸暗過程:不斷設(shè)置TA0CCR2的值,使翻轉(zhuǎn)的時(shí)間變短,改變PWM的占空比
for(i=PWMPeriod;i>0;i-=1)
{
TA1CCR2=i;
delay_nms(4-(i/500)); //占空比變化的延時(shí),調(diào)整延遲時(shí)間可改變呼吸燈變暗的速度
//在暗的時(shí)候延長delay時(shí)間,可增強(qiáng)效果
}
TA1CCR2=0; //確保燈暗
delay_nms(250); //時(shí)間長一點(diǎn),增強(qiáng)視覺效果
}
|
|