单片机交流
直播中

李桂英

7年用户 1342经验值
私信 关注
[问答]

如何自制DIY-32心形流水灯?

如何自制DIY-32心形流水灯?

回帖(1)

周克涛

2021-10-13 15:14:25
昨天后台有人给我留言说,惹女朋友生气了,买东西哄太没有新意,所以想亲自用个单片机小程序来博得美人原谅,但是自己单片机学的又不怎么样,所以程序还不能太复杂,我思来想去觉得也只有这个DIY心型流水灯适合他了,所以就借用PROTEUS来做了一个,效果还不错,希望他女朋友可以原谅他。
因为程序比较简单,我以前也分享过类似的程序,所以在这里就放两个仿真图和参考源代码,有兴趣的小伙伴可以试一下,老鸟就飘过吧!
废话不多说先上图





次醒能任意设定方向和频率点亮,大家还可以换上不同颜色的灯
参考源代码如下:
/******第一个参数为次数n,第二个为时间t(ms)
qbsszgl 全部顺时逐个亮; qbsszgm 全部顺时逐个灭;
lbtbls(n,t)两边同步流水;
ygnsls 一个逆时流水;
ygssls 一个顺时流水;
tbnsls 同步逆时流水
tbssls 同步顺时流水;
tbsszgl 同步顺时逐个亮;
tbnszgl 同步逆时逐个亮;
tbsszgm 同步顺时逐个灭;
tbnszgm 同步逆时逐个灭;
yslbtbzgl 由上两边同步逐个亮;
yslbtbzgm 由上两边同步逐个灭;
lbtbdj 两边同步叠加;
bgssls 八个顺时流水;
bgnsls 八个逆时流水;
llbgssls 两路八个顺时流水;
zjxlbwf 中间向两边往返;
zxytbzg 左向右同步逐个;
zsyxzgl 左上右下逐个亮;
zxyszgl 左下右上逐个亮;
xiaolian 笑脸;
*********************************************************************/
下面是叠加效果的代码,大家可以看看是不是不一样;
void lbtbdj(uchar n,uint t)两边同步叠加;
{
uchar j,a,i,z=0,z1=0,k=8;
for(j=0;j {
while(k!=0)
{
i=0;
for(a=0;a<8;a++)
{
led1=led4=ni[a];
delay((t-j
20));
}
led1=led4=0xff;
delay(t);
do
{
led2=~(0x01<
led3=~(0x80>>i);
switch(k)
{
case 8:z=0x00;z1=0x00;break;
case 7:z=0x01;z1=0x80;break;
case 6:z=0x03;z1=0xc0;break;
case 5:z=0x07;z1=0xe0;break;
case 4:z=0x0f;z1=0xf0;break;
case 3:z=0x1f;z1=0xf8;break;
case 2:z=0x3f;z1=0xfc;break;
case 1:z=0x7f;z1=0xfe;break;
case 0:z=0xff;z1=0xff;break;
}
led2=~((0x01<
led3=~((0x80>>i)|z);
i++;
delay(t);
}
while(i
k–;
}
i=0;z=0;z1=0;k=8;
while(k!=0)
{
i=0;
do
{
led1=led4=~(0x80>>i++);
switch(k)
{
case 8:z=0x00;break;
case 7:z=0x01;break;
case 6:z=0x03;break;
case 5:z=0x07;break;
case 4:z=0x0f;break;
case 3:z=0x1f;break;
case 2:z=0x3f;break;
case 1:z=0x7f;break;
case 0:z=0xff;break;
}
led1=led4=(led1+z);
delay(t);
}
while(i
k–;
}
k=8;
led1=led2=led3=led4=0xff;
}
}
好了,鉴于时间原因就写到这里了,如果有意见或者不同的看法,欢迎留言或者私信,如果你感兴趣还可以加入我们的单片机技术交流群和我们一起学习。
举报

更多回帖

×
20
完善资料,
赚取积分