|
【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++;
else brightness--;
}
// 占空比增大还是减少判断
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
By qinkaiabc
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。
|