点亮led灯的个数_运用至简设计法进行呼吸灯设计

本文为鱼丸粗面原创文章,转载请注明出处!

呼吸灯是指灯光在微电脑的控制之下完成由亮到暗的逐渐变化,感觉好像是人在呼吸。其广泛应用于手机、电脑等电子产品之上,并成为各大品牌新款手机的卖点之一,起到一个通知提醒的作用。每个人都应该使用过带有呼吸灯的手机,看着灯光由暗淡逐渐一点点变亮,继而在最亮的时刻开始逐渐变暗、熄灭最后归于虚无,是否就像酣睡中随着人的呼吸而起伏的胸膛。每当看到手机屏幕上的呼吸灯闪烁时,你是否想过,如何自己设计一个呼吸灯,让它伴随着你的呼吸变亮变暗。没有做过呼吸灯的同学不要紧,我将会为大家展示一个使用清晰整洁的代码设计出来的呼吸灯。认真看完这篇文章,我可以保证你能够真正了解呼吸灯是使用怎样的原理设计的,并且可以自己独立设计出自己的呼吸灯。快去点亮它吧!

首先介绍一下呼吸灯设计的基本原理:呼吸灯是通过控制led灯闪烁的频率来控制其亮度的。什么是闪烁的频率?比如我们让led灯在1s内持续为亮,那么这个led灯将会一直以最大的亮度闪亮,亮的频率就是1;当我们让led灯在1s内持续为暗,那么led灯将会一直熄灭,亮的频率就是0;若是我们让led灯在1s中前0.5s内为亮、后0.5s内为灭,那么led灯将会一直一闪一灭,持续下去...那么,我们大胆的想象一下,如果我们能够控制led灯在1s内一开始亮的频率为0,然后一点一点的增大亮的频率直至为1,那么led灯是否就可以由暗慢慢变到最亮。道理已经说清楚了,那么我们要怎样控制led灯亮的频率?通过控制led灯亮的时间长度。怎样控制灯亮的时间?通过计数FPGA的时钟个数。该怎样计数FPGA的时钟个数?下面讲一下本设计的基本思想:

我们让led灯在1s内由暗慢慢点亮,那么我们不妨将1s先分成1000等份,每一等份就是1ms,用一个计数ms个数的计数器cnt_ms来计数。1ms分成1000等份,每一等份就是1us,用计数器cnt_us来标示。由于MP801开发板的FPGA时钟频率是20ns,那么我们就将1us分成50份,每一份就是20ns,即一个时钟周期。通过计数时钟周期的个数,计数到第50个时,就到达了1us,计数器cnt_us就开始加一;cnt_us计数到1000个时,就到达了1ms,接着计数到1s...时间已经划分好了,那么我们该怎么控制led灯亮的时间?

通过PWM原理来控制led亮灭。不了解PWM原理不重要,只要能读懂下面一句话即可:

在0-1S内:让led灯在第0-1ms之间亮的时间为0us;在第1-2ms内亮1us,在第2-3ms内亮2us...在第999-1000Ms内亮999us。

思路已经很清晰了,接下来我们就可以进行电路设计。

信号列表:

1df2bac0ee649391cea542749adb0a7d.png

计数us信号:

b7273e3285b49ea5b0fe340f576f61d4.png

计数ms信号:

0e328e721512a649a9fb20f596db13de.png

控制led亮的指示信号:

按照我上面的设计思想,在100ms内,控制亮的时间不大于100us;在200ms内,控制亮的时间不大于200us。

7aafc4a7bbe71bdfb0620c5f3ac07aaf.png

led输出信号:

在亮的时间区域内led给低电平,led亮;其他时间给led高电平,led灭。

2677191638537015d855c766e157db3e.png

OK,将工程综合编译,分配好管脚,烧录到MP801开发板中,即可观察到属于你自己的呼吸灯。

可以看出,使用至简设计法设计出的代码,思路清晰,代码简洁干净、有迹可循,只要设计的思路清晰,设计出的代码也同样是易读易懂,每个信号都有其特定的功能。因此FPGA设计的核心是设计思路,而不是设计代码,代码只是用来告诉编译器我们的设计思路,再由编译器综合成硬件电路。使用一种规范简洁的代码设计方法可以帮助我们更好的表现出我们的设计思路,这在我们进行FPGA设计过程中可以极大提高我们的设计效率。

bb236035ed1db0658e1b155e99436a96.png

9fe62e1f61952ca1d5cc68da7837da0d.png

如有不明白的地方可以在下面留言,期待与大家一起学习进步!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值