一个LED的N种玩法 (二)---渐变
Author: chenzhufly
Email: chenzhufly@126.com
2010-4-28
在第一篇中我已经能够上LED闪烁起来了,还可以怎么玩呢?想到网络上曾经讨论过LED亮度渐变的程序,实现的方式很多,我这里挑个最简单的—用延时的方式来实现LED亮度的渐变。说干就干……
接着前一篇的程序继续修改,如下:
int delay(int count)
{
while(count--);
return 0;
}
int main(void) {
GPIOInit();
GPIOSetDir(LED_PORT, LED_BIT, 1);
while (1)
{
for(i=10;i<10000;i+=10) //由亮变暗
{
GPIOSetValue(LED_PORT, LED_BIT, LED_OFF );
delay(i);
GPIOSetValue(LED_PORT, LED_BIT, LED_ON );
delay(10000-i);
}
for(i=10;i<10000;i+=10)//由暗变亮
{
GPIOSetValue(LED_PORT, LED_BIT, LED_ON );
delay(i);
GPIOSetValue(LED_PORT, LED_BIT, LED_OFF );
delay(10000-i);
}
}
}
改变LED亮度的本质是改变流过LED的电流大小,有两种方法:
1. 改变和LED串联的电阻,这样流过LED的电流就能够得到改变,从而改变亮度,但是我们板子上的电阻是固定的,不方便改动,所以此法行不通。
2. 改变0和1的占空比,这样通过led的电压均值就会产生变化,从而导致流过LED的电流产生变化,达到LED亮度调节的目的。这里采用的是这种方式。
实现占空比可变的方法很多,我这里采用的还是延时的方式,实现的关键是上面的for循环,由于我手头没有示波器,没有精确的测量,只是凭经验不断地尝试得到的一个经验值。
程序简单,就不做分析了,谁有兴趣可以跑跑看,是不是有渐变的效果,:)
更多精彩 稍后继续
一个LED的N种玩法_二_----渐变.pdf
(99.09 KB, 下载次数: 276)