求一个stc15w202s单片机的呼吸灯程序 要边呼吸边移动(波浪状), 就是相当于呼吸灯流水灯结合。

求一个stc15w202s单片机的呼吸灯程序 要边呼吸边移动(波浪状), 就是相当于呼吸灯流水灯结合。,第1张

你可以了解一下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)

}

直接用按钮触发外部中断嫌如的,一个加速,一个减速。

用的光敏电阻和继电器做的光电开关。

电路我用proteus 8画和仿真的。你参裂者颂考吧。

#include <reg52.h>

#define uint unsigned int

void delay(uint time)

void flicker(uint led)//呼吸

void init()

uint t1=80//闪烁频率

uint light=0

sbit k1=P3^2

sbit k2=P3^3

sbit led1=P1^6

sbit led2=P1^7

void main()

{

uint led1=0xFE,led2=0xFD,led3=0xFB

init()

while(1)

{

flicker(led1)

flicker(led2)

flicker(led3)

}

}

void init()

{

IT0=0

IT1=0

EX0=1

EX1=1

EA=1

}

void delay(uint t)//延时程序

{

uint i,j

for(i=ti>0i--)

for(j=110j>0j--)

}

void flicker(uint led)//呼吸灯   flag==1逐渐变亮 flag==0逐渐变暗

{

uint flag=1

while(1)

{

P1=led

delay(light)

P1=0xFF

delay(t1-light)

if(flag==1)

light++

else

light--

if(light==t1 &&flag==1)

flag=0

else if(light==0 &肆郑&flag==0)

break

}

}

void click1()interrupt 0  //加速

{

delay(10)

if(k1==0)

{

while(k1==0)

if(t1-1>light)

t1--

else

{

t1--

light=t1-1

}

}

}

void click2()interrupt 2   //减速

{

delay(10)

if(k2==0)

{

while(k2==0)

if(t1<80)

t1++

}

}

做8个流水灯加一个呼吸灯比较容易,P1口接8个流水灯,察侍物8个LED负极接P1口,则P1口输出低电平有效。P3.7脚接一个开关作切换。谈念仿真图如下败液所示。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存