#includereg52.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;pwmset;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
电流大小取的适中就行了,再计算要串联的电阻值
你最起码要做一个恒流源,给LED供电。D/A转换模块。控制电流的大小。然后调节个个灯的电流变化就可以了,应该有那种调光IC卖的,让单片机直接控制调光IC就可以了。
调光IC自带恒流输出,这样就省事了。
分别按不同的序列组合点亮就可以显示出:红(R亮)、黄(RG亮)、绿(G亮)、青(GB亮)、蓝(B亮)、紫(BR亮)、白(RGB都亮)、黑(RGB都不亮)。 (黑不算,次序为由暖到冷)
看你的RGB灯是什么灯 ,如果RGB灯带WS2812那你的单片机是控制不了的,因为51单片机的运算不够块,用STM32可以。如果你的RGB灯是普通的共阳或共阴极的灯 51是可以控制的 。RGB三个管脚分别控制就好啊。
RGB灯珠可以理解为R/G/B三个灯珠封装在一起,一个一个点亮就行了
rbg51单片机的介绍到此就结束了,感谢您耐心阅读,谢谢。
本文标签:rbg51单片机