|
#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ù)值太大,會導(dǎo)致LED閃爍
volatile unsigned int i; //聲明變量i是隨時可變的,系統(tǒng)不要去優(yōu)化這個值
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時復(fù)位為0,當(dāng)TAR的值等于CCR0時置位為1,改變CCR2,從而產(chǎn)生PWM。其實模式2也可以
TA1CTL= TASSEL_2 +MC_1; // 設(shè)置TIMERA的時鐘源為SMCLK, 計數(shù)模式為up,到CCR0再自動從0開始計數(shù)
while(1)
{
TA1CCR2=0;//確保最開始是暗的
//漸亮過程:不斷設(shè)置TA0CCR2的值,使翻轉(zhuǎn)的時間變長,改變PWM的占空比
for(i=0;i<PWMPeriod;i+=1)
{
TA1CCR2=i;
delay_nms(4-(i/500)); //占空比變化的延時,調(diào)整延遲時間可改變呼吸燈變暗的速度
//在暗的時候延長delay時間,可增強效果
}
//漸暗過程:不斷設(shè)置TA0CCR2的值,使翻轉(zhuǎn)的時間變短,改變PWM的占空比
for(i=PWMPeriod;i>0;i-=1)
{
TA1CCR2=i;
delay_nms(4-(i/500)); //占空比變化的延時,調(diào)整延遲時間可改變呼吸燈變暗的速度
//在暗的時候延長delay時間,可增強效果
}
TA1CCR2=0; //確保燈暗
delay_nms(250); //時間長一點,增強視覺效果
}
|
|