新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MSP430G2553測(cè)試程序(呼吸燈)

MSP430G2553測(cè)試程序(呼吸燈)

作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏
//******************************************************************************

//修改者h(yuǎn)ttp://jiwm.blog.163.com
//MSP430G2553 呼吸燈演示程序 - 使用Timer_A,Up Mode, DCO SMCLK
//
//介紹: 該程序利用TIMER A 的 UP模式 在P1.6腳產(chǎn)生PWM輸出
//將CCR0設(shè)置為1500來(lái)定義PWM的周期,利用循環(huán)不斷改變CCR1的值,
//實(shí)現(xiàn)利用改變PWM的占空比來(lái)改變LED亮度.
//ACLK = na, SMCLK = MCLK = TACLK = default DCO
//
//MSP430G2553
//-----------------
///||XIN|-
//| ||
//--|RSTXOUT|-
//||
//|P1.6/TA1|--> CCR1 - PWM
//
//使用 MSP430 LaunchPad , MSP430G2553芯片
//在IAR Embedded Workbench for MSP430 5.40下編譯測(cè)試通過(guò)
//******************************************************************************

本文引用地址:http://2s4d.com/article/201611/322872.htm

#include "msp430g2553.h"


// *************************************************************
// 延時(shí)函數(shù),對(duì)于1M主頻,約延時(shí)1ms
// *************************************************************
void delay_1ms(void)
{
unsigned int k;
for (k=0;k<195;k++);
}

// *************************************************************
// 延時(shí)函數(shù),延時(shí)n*ms
// *************************************************************
void delay_nms(unsigned int n)
{
unsigned int j;
for (j=0;j
{
delay_1ms();
}
}

// *************************************************************
// 主程序
// *************************************************************
void main(void)
{
unsigned const PWMPeriod = 1500; //設(shè)置PWMPeriod參數(shù)
volatile unsigned int i;//變量
WDTCTL = WDTPW + WDTHOLD;// 關(guān)閉看門狗
BCSCTL1= CALBC1_1MHZ;//1M內(nèi)部時(shí)鐘,其他也可以
DCOCTL = CALDCO_1MHZ;
P1DIR |=BIT6;// 設(shè)置 P1.6為輸出
P1SEL |=BIT6;// 設(shè)置 P1.6為TA0.1輸出
TACCR0 = PWMPeriod;// 設(shè)置PWM 周期
TACCTL1 = OUTMOD_7;// 設(shè)置PWM 輸出模式為:7 - PWM復(fù)位/置位模式,
// 即輸出電平在TAR的值等于CCR1時(shí)復(fù)位為0,當(dāng)TAR的值等于CCR0時(shí)置位為1,改變CCR1,從而產(chǎn)生PWM。其實(shí)模式2也可以
TACTL =TASSEL_2 +MC_1;// 設(shè)置TIMERA的時(shí)鐘源為SMCLK, 計(jì)數(shù)模式為up,到CCR0再自動(dòng)從0開始計(jì)數(shù)
while(1)
{
CCR1=0;//確保開始是暗的
//漸亮過(guò)程:不斷設(shè)置CCR1的值,使翻轉(zhuǎn)的時(shí)間變長(zhǎng),改變PWM的占空比
//由于只有1個(gè)定時(shí)器,編程有些你困難,故仍引入delay函數(shù)

for(i=0;i
{
CCR1=i;
delay_nms(4-(i/500));//占空比變化的延時(shí),調(diào)整延遲時(shí)間可改變呼吸燈變暗的速度
//在暗的時(shí)候延長(zhǎng)delay時(shí)間,可增強(qiáng)效果
}
//漸暗過(guò)程:不斷設(shè)置CCR1的值,使翻轉(zhuǎn)的時(shí)間變短,改變PWM的占空比
for(i=PWMPeriod;i>0;i-=1)
{
CCR1=i;
delay_nms(4-(i/500));//占空比變化的延時(shí),調(diào)整延遲時(shí)間可改變呼吸燈變暗的速度
//在暗的時(shí)候延長(zhǎng)delay時(shí)間,可增強(qiáng)效果
}
CCR1=0;//確保燈暗
delay_nms(600); //暗0.6S增強(qiáng)效果
}
}



評(píng)論


技術(shù)專區(qū)

關(guān)閉