平凡

MSP430学习笔记(3)

0
阅读(1890)

之所以选这么一个东西来练手,是因为我日益感受到做一个“有现象的东西”对于学习的激励作用。

七彩灯原理图

这里用到了一个七彩灯,也就是在一个5mm直径的发光管中封装了红、绿、蓝三色的一个发光二极管。

下面我们分步来完成。
1.分别点亮3个灯

硬件连接:R连接于P2.0,G连接于P2.1,B连接于P2.2,即P2.0~P2.2分别控制红、绿、蓝灯。

那么基于第一个例子,分别控制R、G、B亮或灭的代码如下:

P2&=0xfe;     //点亮红灯

P2|=0x01;       //关闭红灯

//////////////

P2&=0xfd;     //点亮绿灯

P2|=0x02;       //关闭绿灯

//////////////

P2&=0xfb;     //点亮蓝灯

P2|=0x04;       //关闭蓝灯
2.灯的渐亮渐灭

关于灯的渐亮和渐灭的原理,我已在博客里谈过多次,这里就不再重复了。先给段代码吧。这个就是基于博文1(http://blog.ednchina.com/czlyzhj/2108970/message.aspx)修改的。

#include  <msp430x14x.h>

#include  "BoardConfig.h"

 

/****************主函数****************/

void main(void)

{

    WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗

    BoardConfig(0xf0);              //关闭数码管和电平转换,打开流水灯

   

    CCTL0 = CCIE;                   //使能CCR0中断

    CCR0 = 15;                    //设定周期****S (等会计算)

    TACTL = TASSEL_1 + ID_0 + MC_1; //定时器A的时钟源选择ACLK,增计数模式

       //注意前2行已修改。CCR0的值,ID_3变成了ID_0

    P2DIR = 0xff;                   //设置P2口方向为输出

    P2OUT = 0x55;

    _EINT();                        //使能全局中断

    LPM3;                           //CPU进入LPM3模式

}

 

/*******************************************

函数名称:Timer_A

功    能:定时器A的中断服务函数

参    数:无

返回值  :无

********************************************/

uchar PwmTab[]={0,0,1,1,2,3,6,7,9,10,11,12,13,14,15,16,18,19,20,20} ;

#pragma vector = TIMERA0_VECTOR

__interrupt void Timer_A (void)

{  

    static uchar LedOn;

    static uchar CountS,CountL;  //CountS是小周期,最大计到20,CountL是大周期

    static uchar iCount;

    static uchar UpDown=0;

 

    if(++CountS>=20)  //小周期结束

    {     CountS=0;

       iCount++;

       if(iCount==5)

       {   iCount=0;

           if(++CountL>=20)         //大周期计数

           {     UpDown=~UpDown;            //大周期结束上升/下降切换

              CountL=0;

           }

           if(UpDown)

             LedOn=PwmTab[CountL];

           else

             LedOn=PwmTab[19-CountL];

       }

    }

    if(CountS>LedOn)

       P2OUT&=0xfe;

    else

       P2OUT|=0x01;

 

}

将这段代码写进芯片,可以见到接在P2.0上的灯渐亮渐灭了。