怎么样控制多个LED从灭到亮渐变
怎么样控制多个LED从灭到亮渐变?求支招…… 51的话用PWM...
记得以前玩RTX51的时候 教程就是多路流水灯 模拟pwm,一个累加器加n个比较值。如果直接采用能输出多路pwm的芯片,就方便许多了。 PWM~~~~~~~~ PWM,PWM,PWM,PWM,PWM,PWM, 只能用PWM控制亮度 的确是PWM 只有PWM! 方法很多。PWM可以,用一个可调的DC-DC电源芯片也可以,三极管放大状态也可以 方法很多。PWM可以,用一个可调的DC-DC电源芯片也可以,三极管放大状态也可以(要D/A转换) 呼吸灯-》我的思路是 单片机PWM +数组+时间触发 可以用扫描吗?控制扫描次数来控制亮度。其实还是用PWM,嘿嘿。。。 stm8s 发表于 2012-8-25 21:09 static/image/common/back.gif
呼吸灯-》我的思路是 单片机PWM +数组+时间触发
时间触发式什么啊? 数组里存放的是PWM 占空比的值(用数组的好处是LED亮度变化无穷啊)
//=============================================
时间触发 就是用定时/计数器 在中断里对N个变量计数,如A变量记数到了就操作A变量计数到了的相应的 操作
//===============================================
做呼吸灯-》看你是不是除了呼吸灯还要不要作其它的事了,不用做其它事用软件延时移动数组下标就能实现 呼吸灯吧!
如还要作其它事,就用定时器中断在中断里移动数组下标!
如要做很多事,就用时间触发!
可能我讲的复杂了,这个呼吸灯应该有不少人做过的,你搜找一下现成的,我想这样最快了! 用CPLD做PWM,N路…… 也可以用DA控制输出电压 #include <REG51.H>
#define uchar unsigned char
#define uintunsigned int
uchar buf; //16个LED以免出错定义24个数据
void Display(void)
{
uchar temp, i, j; //数据位数,频率,数据调整
static uchar LR = 0; //数据移动
uint LED = 0xffff, delay; //显示数据,显示时间
for(delay = 0;delay < 2;delay++)
{
for(i = 0;i < 255;i += 31) // 255 / 8 = 32
{
for(temp = 0;temp < 16;temp++)
{
if(i < buf)
{
LED &= ~(1 << temp);
}
else
{
LED |= 1 << temp;
}
}
P0 = LED;
P2 = LED >> 8;
}
}
buf = 255;
if((LR - 9) > 24)
{
j = 0;
}
else
{
j = LR - 8;
}
for(temp = (LR - 1);temp >= j && temp < 24;temp--)
{
buf -= 32;
if(buf == 255)
{
buf = 0;
}
}
LR++;
if(LR == 24)
{
LR = 0;
}
}
void main(void)
{
while(1)
{
Display();
}
} 经过测试没问题 Tliang 发表于 2012-8-26 22:46 static/image/common/back.gif
经过测试没问题
谢啦
~~~~
页:
[1]