彩色灯光控制系统 一、概述 现代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 熄灭 }

评论