迪文科技论坛

 找回密码
 立即注册
搜索
查看: 146|回复: 0

【分享】2021级简浩琳赵云: LEDRGB氛围灯

[复制链接]

1

主题

0

回帖

32

积分

新手上路

Rank: 1

积分
32
发表于 2024-9-10 17:34:02 | 显示全部楼层 |阅读模式
一、引言
日常生活中的氛围灯可以变化不同的色彩,利用的就是RGB全色LED灯。
二、功能介绍
RGBLED灯是一种由红色、绿色和蓝色三种基本颜色组成的LED灯,通过混合这三种颜色可以产生多种不同的颜色效果。每个RGBLED灯有三个引脚,分别控制红、绿、蓝三色LED的亮度,通过PWM(脉冲宽度调制)技术可以调节每种颜色的亮度,从而实现丰富的颜色变化。
RGBLED灯具有以下功能特点:
1. 多色显示:通过控制不同颜色LED的亮度和混合,可以创造出丰富多彩的光效。
2. 亮度调节:每个灯光具有255级亮度调节能力,可以通过PWM占空比来实现对亮度的精细控制。
3. 稳定性高RGBLED灯的光衰较慢,寿命较长,响应时间快,适用于各种动态光照场景。
4. 环保安全RGBLED灯不含有害金属汞,采用低压电源,更加安全环保。
此外,RGBLED灯还可以通过编程实现更复杂的效果。实现了通过编写代码来控制RGBLED灯的颜色变化、闪烁模式等
三、硬件介绍
系统由EKT043E开发板、T5L芯片、RGB灯驱动、线材等组成。
四、界面设计
基于迪文软件DGUS进行页面开发,设计开屏动画、颜色选择、功能说明等界面

五、代码设计
#include "sys.h"
#define T0_PERIOD_1MS                0xFF54                //设置10us的定时周期
void timer0_init(){
        TMOD &= 0xFC;
        TMOD |= 0x01;
        TH0 = (u8)(T0_PERIOD_1MS >> 8);
        TL0 = (u8)T0_PERIOD_1MS;
        ET0 = 1;//使能定时器0中断
        EA = 1;//使能总中断
        TR0 = 1;//启动定时器0
}
u16 r, g, b, count1, count2, count3,MOD,num,temp;
sbit RED = P2 ^ 0;//红光控制端,0点亮
sbit GREEN = P2 ^ 1;//绿光控制端,0点亮
sbit BLUE = P2 ^ 2;//蓝光控制端,0点亮
void io_init(){
        PORTDRV = 0x02;  //输出电流为16mA
        P2MDOUT |= 0x07; //设置IOP1.0P1.1P1.2为输出
}
void RGB(u8 R, u8 G, u8 B){
        if (count1 < R)
        {
                RED = 1;
        }
        else RED = 0;
        if (count2 < G)
        {
                GREEN = 1;
        }
        else GREEN = 0;
        if (count3 < B)
        {
                BLUE = 1;
        }
        else BLUE = 0;
}
void fun_read(u16 *r, u16 *g, u16 *b) {
        sys_read_vp(0x4100, (u8*)r, 1);//读出变量地址上的值赋给RGB()函数,点亮灯
        sys_read_vp(0x4200, (u8*)g, 1);//
        sys_read_vp(0x4300, (u8*)b, 1);//
}
void fun_write(u16 r, u16 g, u16 b) {
        sys_write_vp(0x4100, (u8*)&r, 1);
        sys_write_vp(0x4200, (u8*)&g, 1);
        sys_write_vp(0x4300, (u8*)&b, 1);
}
void init() {
        sys_init();//系统初始化
        io_init();
        timer0_init();
        r = 0;
        g = 0;
        b = 0;
        count1 = 0; count2 = 0; count3 = 0;
        num = 0;
}
void set(u16 a1, u16 a2, u16 a3) {
        r = a1;
        g = a2;
        b = a3;
}
void fun(u16 x) {
        switch (x){
        case 1:set(0x0078, 0x003c, 0x0078); break;
        case 2:set(0x000c, 0x001e, 0x001a); break;
        case 3:set(0x0066, 0x0066, 0x0066); break;
        case 4:set(0x0058, 0x0008, 0x0008); break;
        case 5:set(0x00f0, 0x003c, 0x001e); break;
        case 6:set(0x003c, 0x001e, 0x00f0); break;
        case 7:set(0x001e, 0x003c, 0x00f0); break;
        case 8:set(0x005a, 0x0078, 0x003c); break;
        case 9:set(0x00b4, 0x0078, 0x003c); break;
        case 10:set(0x00b4, 0x0078, 0x001e); break;
        case 11:set(0x003c, 0x0096, 0x0028); break;
        case 12:set(0x0096, 0x0064, 0x0032); break;
        case 13:set(0x0032, 0x0064, 0x00fa); break;
        case 14:set(0x0064, 0x0032, 0x00fa); break;
        case 15:set(0x00c8, 0x000a, 0x0032); break;
        case 16:set(0x000a, 0x00c8, 0x0032); break;
        default:set(0x0006, 0x0006, 0x0006);break;
        }
}
void main(void)
{
        init();
        while (1)   {
                sys_read_vp(0x1000, (u8*)&MOD, 1);
                sys_read_vp(0x2000, (u8*)&num, 1);
                switch (MOD)
                {
                case 5://闪烁
                        sys_delay_ms(100);
                        break;
                case 7:
                        fun(num);
                        fun_write(r, g, b);
                        RGB(r,g,b);        
                        break;
                default:
                        break;
                }
                fun_read(&r, &g, &b);
                RGB(r, g, b);}
}
void timer0_isr()        interrupt 1 {
        TH0 = (u8)(T0_PERIOD_1MS >> 8);
        TL0 = (u8)T0_PERIOD_1MS;
        count1++;
        count2++;
        count3++;
        if (count1 == 255)count1 = 0;
        if (count2 == 255)count2 = 0;
        if (count3 == 255)count3 = 0;
}
六、接口连接
P2.0,P2.1,P2.2三个引脚分别连接R G B,另外一个引脚接地。
七、系统实现与测试
在程序中设定好了几种固定配色,可以通过色盘直接调节,通过软件控制方式实现闪烁及呼吸灯效。通过RGB值改变电压,从而改变红绿蓝三个灯的亮度,进而起到整体改变颜色的效果





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-11-23 06:22 , Processed in 0.057347 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表