haijin0829 发表于 2012-8-25 14:25:01

怎么样控制多个LED从灭到亮渐变

怎么样控制多个LED从灭到亮渐变?
求支招……

aheadlead 发表于 2012-8-25 14:36:18

51的话用PWM...
记得以前玩RTX51的时候 教程就是多路流水灯

zgxcom123 发表于 2012-8-25 14:50:42

模拟pwm,一个累加器加n个比较值。如果直接采用能输出多路pwm的芯片,就方便许多了。

akion78 发表于 2012-8-25 14:51:28

PWM~~~~~~~~

wye11083 发表于 2012-8-25 14:55:18

PWM,PWM,PWM,PWM,PWM,PWM,

chengwanshan 发表于 2012-8-25 16:35:46

只能用PWM控制亮度

1054933077 发表于 2012-8-25 16:49:14

unifax001 发表于 2012-8-25 20:25:23

的确是PWM 只有PWM!

wu0909 发表于 2012-8-25 20:51:13

方法很多。PWM可以,用一个可调的DC-DC电源芯片也可以,三极管放大状态也可以

wu0909 发表于 2012-8-25 20:52:18

方法很多。PWM可以,用一个可调的DC-DC电源芯片也可以,三极管放大状态也可以(要D/A转换)

stm8s 发表于 2012-8-25 21:09:03

呼吸灯-》我的思路是 单片机PWM   +数组+时间触发

yjk282 发表于 2012-8-25 22:30:26

可以用扫描吗?控制扫描次数来控制亮度。其实还是用PWM,嘿嘿。。。

haijin0829 发表于 2012-8-26 09:31:42

stm8s 发表于 2012-8-25 21:09 static/image/common/back.gif
呼吸灯-》我的思路是 单片机PWM   +数组+时间触发

时间触发式什么啊?

stm8s 发表于 2012-8-26 11:15:06

数组里存放的是PWM 占空比的值(用数组的好处是LED亮度变化无穷啊)
//=============================================
时间触发   就是用定时/计数器   在中断里对N个变量计数,如A变量记数到了就操作A变量计数到了的相应的 操作
//===============================================
做呼吸灯-》看你是不是除了呼吸灯还要不要作其它的事了,不用做其它事用软件延时移动数组下标就能实现 呼吸灯吧!

如还要作其它事,就用定时器中断在中断里移动数组下标!

如要做很多事,就用时间触发!

stm8s 发表于 2012-8-26 11:25:26

可能我讲的复杂了,这个呼吸灯应该有不少人做过的,你搜找一下现成的,我想这样最快了!

lbblsws 发表于 2012-8-26 12:48:01

用CPLD做PWM,N路……

overagain122 发表于 2012-8-26 20:43:47

也可以用DA控制输出电压

Tliang 发表于 2012-8-26 22:46:26

#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:54

经过测试没问题

haijin0829 发表于 2012-8-26 22:51:11

Tliang 发表于 2012-8-26 22:46 static/image/common/back.gif
经过测试没问题

谢啦
~~~~
页: [1]
查看完整版本: 怎么样控制多个LED从灭到亮渐变