设计一个STC51单片机控制的RGB三基色LED灯光模式控制系统。

设计一个STC51单片机控制的RGB三基色LED灯光模式控制系统。,第1张

你最起码要做一个恒流源,给LED供电。D/A转换模块。控制电流的大小。然后调节个个灯的电流变化就可以了,应该有那种调光IC卖的,让单片机直接控制调光IC就可以了。

调光IC自带恒流输出,这样就省事了。

你可以了解一下ws2812,这个会好很多。

想过这种程序,但因为没什么卵用就给我忘了。

pwm要挺高频率才行,不然会闪,试过3灯的rgb,原理上差不多,但是直接程序死循环都难受,不是很流畅,你也可以参考一下。。。

#include "reg52.h"

#include "intrins.h"

sbit r=P1^0

sbit g=P1^1

sbit b=P1^2

void Delay200ms()

void play(char rz1,char gz1,char bz1,int t)

void Delay10us()

//占空比从0到100变化

void main(void)

{

while(1)

{char rz=0,gz=0,bz=0

char x=0,y=0,z=0

r=1

g=1

b=1

Delay200ms() //接线验证,rgb依次亮起

r=0

Delay200ms()

r=1

g=0

Delay200ms()

g=1

b=0

Delay200ms()

b=1

Delay200ms()

for(x=5x>=0x--) //彩色连续变化

{rz=100gz=0bz=0

play(rz,gz,bz,1)

for(gz=0gz<=100gz++)

play(rz,gz,bz,1)

for(rz=100rz>=0rz--)

play(rz,gz,bz,1)

for(bz=0bz<=100bz++)

play(rz,gz,bz,1)

for(gz=100gz>=0gz--)

play(rz,gz,bz,1)

for(rz=0rz<=100rz++)

play(rz,gz,bz,1)

for(bz=100bz>=0bz--)

play(rz,gz,bz,1)

}

}

}

//显示色彩程序,pwm,显示某占空比颜色时间t

void play(char rz1,char gz1,char bz1,int t)

{

char i=rz1,j=gz1,k=bz1,yt

for(t=t*4t>=0--t)

{

i=rz1j=gz1k=bz1

for(yt=100yt>=0yt--)

{

if(i>0)

r=0

else

r=1

if(j>0)

g=0

else

g=1

if(k>0)

b=0

else

b=1

--i

--j

--k

Delay10us()

}

}

r=1g=1b=1

}

//延时程序组

void Delay200ms() //@12.000MHz

{

unsigned char i, j, k

_nop_()

_nop_()

i = 10

j = 31

k = 147

do

{

do

{

while (--k)

} while (--j)

} while (--i)

}

void Delay10us() //@12.000MHz

{

unsigned char i

_nop_()

_nop_()

i = 27

while (--i)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11438565.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存