目录
- 背景
- 硬件驱动器
- 软件驱动器
-
- 像航障灯那样闪烁
- 想怎么闪就怎么闪
背景
我随手拿了一块普中的51单片机的开发板,上面恰好有很多led灯,我想让其中一个按我想象的方式闪烁起来。
硬件驱动器
虽然开发板上已经有了硬件驱动,我并不需要走这一段路,但对于旅行来说,更引人入胜的或许是沿途的一簇花草,一片树叶,终点也只不过是下一段旅途的起点。
先来瞧一瞧开发板上的LED驱动器罢。8个LED被接成了共阳极的形式,LED的阴极接了470R的排阻,另一端引到单片机的IO口。
红色发光二极管的正向导通压降一般是1.8-2.2V,工作电流一般是5-20mA,用于指示灯的话一般10mA就比较亮了。
回过头来看这个电路,当VCC=5V,b点的电位为0V的时候,主干线上的电流与a点的电位是像下面这样子的。实际分析的电路设计参数与 上的描述有所差异,但看起来感觉应该可以,实际效果好与不好就在实际中大锤八十小锤一百地验证看看。
发光二极管压降(自变量) | Va(因变量) | 主干线电流(因变量) |
---|---|---|
1.8V | 3.2V | 6.8mA |
2.2V | 2.8V | 5.9mA |
针对这个感觉可以就可以的二极管驱动器,不讨论单片机的噪声容限,不讨论能让led亮起来的电压范围,我们对控制电压进行数字抽象,想让二极管亮起来的时候就在b点送入逻辑0,想让二极管熄灭的时候就在b点送入逻辑1。
软件驱动器
控制LED灯的单片机端口是P2.0端口。要点亮LED灯就往P2.0端口寄存器写0,要熄灭就写1。这是一个非常简单的操作,但也值得去摸一摸。
灯亮了,现在可以顺手看一下硬件驱动器部分的分析与实际情况的对比。使用万用表简单测量一下VCC,a点和b点的电位,下面的图是b点的电位,图太多会影响观感,就用表格看看好了。
像航障灯那样闪烁
我想让它像高楼大厦楼顶的航空障碍灯那样闪烁,粗略地查了一下,我觉得40闪/分比较好看。40闪/分意味着每1.5S发光管要切换一次状态,那么LED的控制信 应该是下面这样子的,1和0每次的保持时间为1.5s。
想怎么闪就怎么闪
冲一杯茶,歇一歇,收拾收拾心情,我不知道是从哪架飞机翅膀上看见的,它那个灯隔段时间闪一下,也有隔段时间闪两下的,我觉得隔段时间闪两下的灯比较漂亮,就这么决定了。
我们构造一个趁手的工具–虚拟定时器virtualTimer,它由一个递减计数器,重载时间和重载标志组成,如果定时器的重载标志为1,那么它就是一个周期定时器,反之它是一个单次定时器。
虚拟定时器由一个硬件定时器驱动,硬件定时每滴答作响一次,虚拟定时器的递减计数器就减一个数,所以我们需要精心地设计硬件定时器的滴答时间和虚拟定时器的重载值来配置实际时间。
在虚拟定时器的递减计数器倒计时的过程中,我们通过指定在不同的计数区间led的不同状态来实现亮灭的随意操控,也就是想怎么闪就怎么闪。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!