八位流水灯的verilog代码_Arduino入门 第七节-"彗星灯" 呼吸流水灯

在前面的课程中,我们学习了流水灯、呼吸灯的实现方法,本期课程我们将把呼吸灯和流水灯"组合"到一起,做一个"呼吸流水灯"的效果。呼吸流水灯,实际上就是"流星灯",看上去就像一个"拖着尾巴"的彗星(或流星),头部最亮,越往尾部越暗。在实现这个效果的过程中,我们将应用到"流水灯"及"呼吸灯"的一些控制方法,因此给它取名为"呼吸流水灯"。

呼吸流水灯,本质上就是让几个亮度递减的LED在做流水灯一样的流动。在流水灯中"流动"的是LED的"开/关"状态,而在呼吸流水灯中"流动"的则是LED的"亮度"状态,也就是PWM的占空比,因此,LED的控制引脚必须全部具备PWM(DA)的输出能力,本次课程使用了MEGA2560板,它的2-13引脚都具备PWM功能,可以做一个12位的呼吸流水灯。而UNO或NANO板则只有3,5,6,9,10,11这六个PWM输出引脚,则只能做到6位呼吸流水灯。本次课程使用了NANO摇摇棒电路及MEGA2560mini型板,将MEGA2560板的D2-D13依次连接到NANO摇摇棒电路的D1-D12,并且将摇摇棒电路与MEGA2560mini板“共地”,如下图:

c7efe215246f94d8adacfd4ed612abc6.png
eac40749c46e4b2433a4a1b225435008.png

下图为呼吸流水灯的效果示意图:

373287b37a398d90ba2a16c1d4c4d137.png

图中的一行代表LED的一组状态,黑色的为熄灭的LED,红色深色的代表高亮度的LED,浅色的代表低亮度的LED。这样的一行,包括了12个LED,我们可以把"一行"看作一个可视的"视界",视界内是我们可以看到的12个LED,视界外我们假设还有一些"看不到"的LED。因此我们可以在5个"亮度"组成的"彗星"的左右两端各加上12个黑点组成一条"亮度分布带",然后我们在"亮度分布带"上滑动12个LED长度的可视"视界",就可以看到如上面图中所示的每一行不同的画面,也就是"彗星"飞过的效果。下面是原理图:

69b5e31ec767a1f686cd846dca35fa75.png

以上的"亮度分布带",实际上就是一系列PWM的值,把这些PWM的值放在一个总长度的29的数组中,然后再以一个长度为12的数组作为"视界","滑动"着在PWM数组中取12个值,每取完一次则将12个PWM状态写入对应的12个LED中,这样即完成了一个方向的"彗星"飞过。为了让"彗星"也能反向飞过,我们可以再建立一个"反向"分布的"亮度分布带",然后"视界"从右往左滑动,即实现了"彗星"的反向飞过。下面是示例代码:

c386363f3191d899d1d0604ac130a1e6.png

实现"彗星灯"-呼吸流水灯的方法有很多种,以上是比较直观的一种。其他实现方法欢迎各位读者在评论区留言讨论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值