qinkaiabc 发表于 2014-1-15 22:17:56

【Energia开发环境】MSP430 LAUNCHPAD学习笔记4--PWM实现简单呼吸灯

【Energia开发环境】MSP430 LAUNCHPAD学习笔记4--PWM实现简单呼吸灯

材料:
MSP430 LAUNCHPAD x 1
发光二极管 x 1

实验目的:通过单片机输出PWM控制占空比,让MSP430 LAUNCHPAD控制发光二极管缓慢熄灭,缓慢变亮。

什么是PWM?占空比?
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,常用于灯光亮度、马达控制...等等。占空比为方波高电平时间跟周期的比例叫占空比,例如1秒高电平1秒低电平的PWM波占空比是50%,下图形象的展示了波形示意图:


下面我们来连线:通过P1.4输出PWM波形来控制发光二极管亮灭程度

源程序:
/******************************************************************
PWM control
【Energia开发环境】MSP430 LAUNCHPAD学习笔记4--简单呼吸灯   
    Autor: qinkaiabc
********************************************************************/

int brightness = 0;//此变量用来表示LED的亮度。
int baseTime = 2000;//定义运行周期
//定义布尔值0-1,用以控制亮或灭,以及占空比
boolean LED_on = HIGH, count_up = false, time_add = false;
void delay_count_fun(boolean );

void setup()
{
// 定义P1.4引脚为输出
pinMode(P1_4, OUTPUT);
}

void loop()
{
    /*brightness 等于 0 或是等于定义的周期时就程序反向运行,
    *意思是原先亮的变成灭,原先占空比增大就变为减小*/
   if(brightness == 0 || brightness == baseTime)
   {
   LED_on = !LED_on;                  // 工作反向 :亮或灭
   count_up = !count_up;                // 计数增还是减
   time_add = !time_add;// 占空比增大还是减少
   }

   digitalWrite(P1_4, !LED_on);
   Duty_Cycle(time_add);//占空比控制
   digitalWrite(P1_4, LED_on);//占空比控制
   Duty_Cycle(!time_add);
   //计数判断
   if(count_up)brightness++;
   elsebrightness--;
}

// 占空比增大还是减少判断
void Duty_Cycle(boolean up)
{
if(up)
    // 占空比增大还是减少
    delayMicroseconds(baseTime - brightness + 1);
else
    delayMicroseconds(brightness + 1);// 占空比增大
}
其中你可以更改baseTime(周期)的值,看看会有什么变化。
delayMicroseconds()

其作用是产生一个延时,计量单位是微秒,1000微秒=1毫秒。

http://player.youku.com/player.php/sid/XNTk5NTYzODY0/v.swf
http://player.youku.com/player.php/sid/XNTk5NTY1MzI0/v.swf



  Byqinkaiabc








页: [1]
查看完整版本: 【Energia开发环境】MSP430 LAUNCHPAD学习笔记4--PWM实现简单呼吸灯