新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MSP430G2553測試程序(呼吸燈)

        MSP430G2553測試程序(呼吸燈)

        作者: 時間:2016-11-28 來源:網絡 收藏
        //******************************************************************************

        //修改者http://jiwm.blog.163.com
        //MSP430G2553 呼吸燈演示程序 - 使用Timer_A,Up Mode, DCO SMCLK
        //
        //介紹: 該程序利用TIMER A 的 UP模式 在P1.6腳產生PWM輸出
        //將CCR0設置為1500來定義PWM的周期,利用循環不斷改變CCR1的值,
        //實現利用改變PWM的占空比來改變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下編譯測試通過
        //******************************************************************************

        本文引用地址:http://www.104case.com/article/201611/322872.htm

        #include "msp430g2553.h"


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

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

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

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



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 龙海市| 永州市| 杨浦区| 彩票| 汝南县| 寿光市| 望谟县| 闵行区| 长乐市| 五莲县| 义马市| 莱西市| 全南县| 闵行区| 肥乡县| 玛沁县| 彝良县| 仙桃市| 文成县| 维西| 墨竹工卡县| 肥西县| 中宁县| 濮阳县| 邮箱| 卫辉市| 班戈县| 昌图县| 四会市| 图们市| 福泉市| 兴隆县| 宣城市| 富顺县| 乌兰县| 唐海县| 景宁| 高碑店市| 景洪市| 湄潭县| 桂平市|