打印

呼吸灯

[复制链接]
961|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Thor9|  楼主 | 2016-2-28 21:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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|-
//         | |                 |
//         --|RST          XOUT|-
//           |                 |
//           |         P1.6/TA1|--> CCR1 - PWM
//
//  使用 MSP430 LaunchPad , MSP430G2553芯片
//  在IAR Embedded Workbench for MSP430 5.40下编译测试通过
//******************************************************************************

#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<n;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<PWMPeriod;i+=1)
    {
      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增强效果
  }
}

相关帖子

沙发
i1mcu| | 2016-2-28 23:04 | 只看该作者
这个可以通过ADC驱动

使用特权

评论回复
板凳
i1mcu| | 2016-2-28 23:05 | 只看该作者
前端做一个控制电路

使用特权

评论回复
地板
可可球| | 2016-2-29 19:39 | 只看该作者
这个可以通过ADC驱动

用ADC怎么驱动,能详细说说吗

使用特权

评论回复
5
wahahaheihei| | 2016-2-29 23:30 | 只看该作者
PWM通常用于这类显示的,还可以控制电机的转速。

使用特权

评论回复
6
20153177| | 2016-6-11 15:26 | 只看该作者
请问这个呼吸灯程序应该怎么做呢,希望能给详细解答,谢谢
在G2板上利用p1.6(PWM输出口)驱动LED来实现呼吸灯。呼吸灯就是亮度渐变的LED灯,普通LED可以用TA输出PWM来控制亮度,通过WDT定时中断来改变亮度,从而实现呼吸灯效果。
1、通过按键来控制呼吸灯的呼吸频率,即亮度渐变的快慢。
控制方式:按扩展板上KEY1键,呼吸加快一档,连续按2下,呼吸加快一档,连续按3下,呼吸又加快一档......;按KEY3键,呼吸减慢一档,连续按2下,呼吸减慢一档,连续按3下,呼吸又减慢一档......。
2、在液晶屏上显示呼吸灯呼吸频率的相关信息。
   

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

108

主题

843

帖子

2

粉丝