彩色灯光控制系统
一、概述
现代LED制造技术的发展大大促进了照明和显示行业,采用RGB三基色调光的系统应用广泛,本系统使用STC89C52RC+三基色LED初步实现调光功能。
二、基本要求
1.实现七彩灯光,分别为红、绿、蓝、黄(红+绿)、青(绿+蓝)、紫(红+蓝)、白(红+绿+蓝),使用按键控制灯光颜色循环切换;
2.实现可设置间隔时间的七彩灯光自动切换,并在数码管显示倒计时,时间设置范围为1~9秒;
3.在要求1的基础上实现每种颜色8级亮度可调,并在数码管显示当前亮度(0为不亮,7为最大亮度)。
三、扩展要求
1.实现RGB调光,要求红绿蓝分别16级亮度可调并同时输出,每级亮度变化明显且无明显闪烁,并在数码管显示当前调整颜色的亮度(0~15);
2.实现呼吸灯效果,要求七彩颜色和亮度平滑渐变(颜色顺序自由发挥,不需要按照前面说的顺序);
3.实现光控,要求环境光照较强时关闭灯光和显示,尽量减小整个系统电流,并在光照减弱后能自动恢复工作(响应时间小于1秒);
4.其它扩展功能,允许自行添加元器件。
#include <reg52.h>
sbit LED_R=P2^0;
sbit LED_G=P2^1;
sbit LED_B=P2^2;
unsigned char v_R,v_G,v_B;
unsigned char cnt_PWM,cnt_S,flg_S;
unsigned char Tab_7C[][3]=
{
{16,0,0},
{0,16,0},
{0,0,16},
{16,16,0},
{0,16,16},
{16,0,16},
{16,16,16}
};
void main(void)
{
unsigned char MOD_Color;
TMOD=0x01;//定时器T0,工作方式1
TH0=(65536-1000)/256;//T0高八位装定时初值
TL0=(65536-1000)%256;// T0低八位装定时初值
EA=1;//开总中断
ET0=1;//开T0中断
TR0=1;//开定时器T0
while(1)//循环
{
if(flg_S>=2) //每2秒钟更换一种颜色
{
flg_S=0;
MOD_Color++;
}
if(MOD_Color>=7) MOD_Color=0;
//
v_R=Tab_7C[MOD_Color][0];
v_G=Tab_7C[MOD_Color][1];
v_B=Tab_7C[MOD_Color][2];
}
}
/*……………中断函数……………*/
void timer0_intp() interrupt 1//中断号为1
{
TH0=(65536-1000)/256;//重装高八位初值
TL0=(65536-1000)%256;//重装低八位初值
cnt_PWM++;//中断次数计数变量,每1ms发生一次中断加1
cnt_S++;
if(cnt_S>=100) {cnt_S=0; flg_S++;}
if(cnt_PWM>=16) cnt_PWM=0;
if(cnt_PWM<v_R)
LED_R=0;//LED_R点亮
else
LED_R=1;//LED_R 熄灭
if(cnt_PWM<v_G)
LED_G=0;//LED_G点亮
else
LED_G=1;//LED_G 熄灭
if(cnt_PWM<v_R)
LED_B=0;//LED_B点亮
else
LED_B=1;//LED_B 熄灭
}
评论