用定时器做个呼吸灯,实现亮度由亮到暗逐渐变化过程
在单片机中定时器的工作还是挺大的,可以利用定时器功能精准对外设延时,可以利用这一点做个万年历,精确度还是比较乐观的,我之前也做过,如果大家喜欢的话,我非常愿意分享制作方法,今天分享一个特别有意思的制作——呼吸灯。
呼吸灯制作图
呼吸灯制作起来挺有意思的,原理很简单,只要在短时间内,比如在0.05s内,让LED灯亮0.01s,灭0.04s,由于时间较短LED灯还没来得及灭掉,又再次亮起,效果就是比正常亮时要暗,如果亮的时间占不亮的时间越长,根据能量守恒可知LED会越亮,我们在短时间内不断调整这个占空比,让LED灯由不亮逐渐变为全亮,再由全亮变为部分亮,这就形成了呼吸灯。
呼吸灯效果
由于呼吸灯需要在短时内进行亮灭,时间一般都是毫秒级的,所以对我们人来说是不可能达到这种速度的,所以我们只能用单片机来实现,我们所用的就是单片机定时器功能,由于定时器计时较准,再加上定时器运行不占用CPU,大大提高了运行效率,在控制方面我们选用算法为PWM算法,其原理就是我所说的上一段,PWM结合定时器,可以把呼吸灯功能完美实现。
在硬件方面我们选用51单片机再加上LED,LED接在P1口,主要在程序上,我们通过写程序,打开单片机定时器功能,利用定时器产生一个PWM,从P1口输出,这就完成了呼吸灯的制作。
所选单片机及成果图片
这次我们使用的单片机功能来实现的这个功能,其实我们也可以不用单片机来做,可以选用自带定时功能的NE555定时器来制作,这对没学过单片机的来说是个福音,其实原理是一样的。
在电子领域会有很多有趣的小制作,结合单片机就会更多了,但是单片机必须得有编程基础,由于程序较长,我们也不可能每次把程序展示给大家,只能给予一个原理说明,以及一个方向指导,对感兴趣的同学引导一个道路,我也希望你们会越走越远。
51单片机你学到的不只是点灯
很多人接触51单片机,网上的大部分教程都是从点亮你的第一个的led小灯开始,有人说很简单,也有人说很难。为啥呢?是因为很多单片机爱好者都有自己的一块小板子,此刻附上自己的爱板图一张
别看它小功能还是很强大。好啦废话不多说,为啥说现在点亮led小灯麻烦啦呢。现在的51开发板在设计功能上增加啦一些芯片,像蓝桥杯单片机的板子芯片还是有些复杂的,有兴趣的同学可以试试。
我们首先先赖看一下开发板的原理图
由图可以看出所谓led小灯就是发光二极管组成,如何使它亮起来呢呢学过模电第一章都会清楚只要让它产生压降就会是灯亮起来,而电阻使它产生管压降,所以我们将单片机给其管脚一个低电平让它形成一条回路,自然它就亮起来啦。我直接弄个花式点灯,用左移与右移函数让它进行跑马灯实验 代码如下图所示,在这里作者想给读者一个问题,如何使led小灯产生呼吸灯的现象,希望刚入门单片机的爱好者可以好好思考。只要你花式点灯会啦,那么证明你学习51已经入门啦。如果对代码一些含义不懂得话就好好补充自己学习的知识,可以参考别人的例程或者查阅相关的资料。
51点灯不仅仅是教会你点亮一个小灯,更注重的是对你不同学科之间知识的相互融合,在学习单片机的工程中你也可以补充对c语言知识的理解与运用,也会加强对模电数电知识的巩固。开发板只是起点不是终点。希望大家在学习的过程中体会到其中的乐趣
相关问答
RGBLED模块能不能做 呼吸灯 效果?可以做呼吸灯效果。要用单片机进行控制,可以RGB轮流亮起,间隔时间可调。可以做呼吸灯效果。要用单片机进行控制,可以RGB轮流亮起,间隔时间可调。
怎样用STM32点亮LED灯?怎样用STM32让LED闪烁?对于单片机编程而言,点亮LED是单片机编程的入门操作。对于STM32,本人习惯使用寄存器操作,所以本文将以KEIL4.12作为开发环境,以寄存器操作试验为编程思路讲...