打印

求教关于RGB LED问题?

[复制链接]
1344|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zyx1992106|  楼主 | 2016-12-22 09:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
df_flying| | 2016-12-22 10:14 | 只看该作者
你的理解都是对的,RGB可以用不同的色度(这里用的就是亮度)组合成不同的颜色,不过LED灯组合的颜色没有像素那么小组合的明显。

使用特权

评论回复
板凳
jjjyufan| | 2016-12-22 10:24 | 只看该作者
PWM和开通 关闭

使用特权

评论回复
地板
皈依| | 2016-12-22 11:35 | 只看该作者
通过调节三路占空比可以组合出不同的颜色
如果要单一色也是控制三路,只不过另外两路占空比为0

使用特权

评论回复
5
zyx1992106|  楼主 | 2016-12-22 13:52 | 只看该作者

不理解,能否解释详细点?

使用特权

评论回复
6
zyx1992106|  楼主 | 2016-12-22 14:04 | 只看该作者
假设RGB灯对应某种颜色时候对应占空比分别为: 30 35 20    如果我想在此颜色调十个亮度,是不是意味着占空比也要改?如果占空比改了是不是也意味着颜色发生了变化?

使用特权

评论回复
7
ningling_21| | 2016-12-22 18:09 | 只看该作者
zyx1992106 发表于 2016-12-22 14:04
假设RGB灯对应某种颜色时候对应占空比分别为: 30 35 20    如果我想在此颜色调十个亮度,是不是意味着占空 ...

占空比改了,颜色肯定变化

如果想改变亮度但不改变当前的颜色,需增加电路和程序控制

使用特权

评论回复
8
teddeng| | 2016-12-23 08:38 | 只看该作者
zyx1992106 发表于 2016-12-22 14:04
假设RGB灯对应某种颜色时候对应占空比分别为: 30 35 20    如果我想在此颜色调十个亮度,是不是意味着占空 ...

一般的应用,在RGB色彩空间标准立方体中指定任意一点,则该点和(0,0,0)的连线、及连线延长线(至连线与rgb立方体面上的交点或顶点)上的渐变颜色,满足颜色不变亮度变的要求。

使用特权

评论回复
9
mcu200689| | 2016-12-23 09:55 | 只看该作者
本帖最后由 mcu200689 于 2016-12-23 10:00 编辑

任何颜色都是通过红绿蓝三原色组成的,这是前提。RGB三路PWM分别控制红绿蓝三种颜色,每种颜色通过调节PWM占空比调节亮度,三种颜色不同占空比组合成不同颜色,不知道这样说你明白吗?
看我头像的三色LED,理论上三色LED可以组成任意颜色。

使用特权

评论回复
10
likun123| | 2016-12-29 11:16 | 只看该作者
不同的颜色,是靠不同的三组占空比调节三个灯的亮度实现的,如果你想让特定颜色亮度改变,那就保证三组占空比的比值不变共同按比例增大减小就好了

使用特权

评论回复
11
chunyang| | 2017-1-1 17:53 | 只看该作者
PWM的占空比决定了亮度,各个LED的亮度决定了混色结果。

使用特权

评论回复
12
509728263| | 2017-3-13 13:14 | 只看该作者
#include<reg52.h>  
//端口定义
sbit RED    =    P2^0;//红光控制端,0点亮
sbit GREEN  =    P2^1;//绿光控制端,0点亮
sbit BLUE   =    P2^2;//蓝光控制端,0点亮
//函数声明
void Delay(unsigned int t);  
void RGB(unsigned char R ,unsigned char G ,unsigned char B);
//主函数
void main (void)
{   
    RED = 1 ; GREEN = 1 ; BLUE = 1 ;
    //开始时先关闭LED,当然由于单片机上电就输出 1 ,所以可不写               
    while (1)         //主循环
    {
        //7色光依次逐渐变亮
        //改变调用顺序可以改变颜色先后次序
        RGB(1,1,0);
        RGB(1,0,1);
        RGB(1,0,0);
        RGB(0,1,1);
        RGB(0,1,0);
        RGB(0,0,1);
        RGB(0,0,0);
    }
}
  
void Delay(unsigned int t)
{
while(--t);
}
//7色光依次逐渐变亮
RGB(unsigned char R ,unsigned char G ,unsigned char B)
{
    unsigned int pwm , set = 500 ;        
    for(pwm=1;pwm<set;pwm++)
    {
             RED    = 1;        //熄灭LED
             GREEN  = 1;
             BLUE   = 1;
             Delay(set-pwm);//延时长度,500次循环中从599减至1
             RED    = R;        
             GREEN  = G;
             BLUE   = B;        
             Delay(pwm);//延时长度,500次循环中从1加至599
    }
}
//改变set可以改变变化快慢
//同理你可以写出7色逐渐变暗的程序
这里的程序只是提供一个思路,你如果直接复制粘贴的话会出现格式错误

把每两行中间的空行删掉一般就可消除格式错误

如果再有什么小问题根据编译信息提示稍作修改就行


串电阻的话一般这样算:

R = [ U - U(LED) ] / I

U是LED和电阻总的电压,U(LED)是LED工作电压,I 是LED工作电流,一般10--20mA

电流大小取的适中就行了,再计算要串联的电阻值

使用特权

评论回复
13
wo21| | 2017-3-13 16:32 | 只看该作者
厉害

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

81

帖子

2

粉丝