新闻资讯

详解led数码管的接口编程时间

来源:波音国际日期:2019/11/27 浏览:

  如图4.10 所示是由2 个共阳极的LN3161BS 组成的LED 数码管电路,R1~R8 为限流电阻,c1 和c2在内部并联连接。如果将段选端a~dp 与位选端com0、com1 连接到AM824-Core 的PIO0_8~PIO0_15 与PIO0_17、PIO0_23,则通过程序即可控制笔段的亮灭。由于数码管的8 个段选端全部都要经过com 口才能得到供电,因此需要增加三极管提高com 口的驱动电流,以弥补LPC824 GPIO 驱动电流的不足。当com 为低电平时三极管导通,则数码管的c1、c2 为高电平,即选通数码管。此时只要数码管的任一段选端为低电平,则点亮数码管相应的笔段。

  “日”形数字显示除了能够显示10 进制数字0~9,有时也用于显示16 进制字母AbCdEF 或其它一些非常简单的符号。按照二进制的计算方法,8 段显示有256 种组合,去掉“点(dp)”的显示,其笔段的组合为128 种(27),而数字0~9 只有10 个符号,因此要想得到我们希望的显示符就必须对显示段进行编码。显然,如果要想点亮数码管的某一个笔段,则只需将对应的笔段置0就可以了。即输出低电平至com0 端,同时输出低电平至b、c 段,点亮LED 得到字符“1”。由此可见,按照数字的笔画排列,则很容易得到10 个数字0~9 共10 个显示字符,七段共阳数码管10 个数字段码表详见表4.2。

  如果以8 位数值表示段码,当其相应位为0 时,则表示对应的段点亮。bit7~0 分别与dp~a 对应,假设bit0 为0,即点亮a。为了方便访问,不妨将段码存放到一个数组中。即:

  AMetal 软件包提供了熄灭所有数码管的板级初始化函数、段码传送函数、位码传送函数和数字显示扫描函数,其函数接口详见程序清单4.10。

  其中,code 为待显示数字0~9 所对应的段码,pos 为com0 或com1 对应的数字下标(0~1),num 为待显示的数字0~9。当后续调用这些函数时,则只需要“#include digitron0.h”就可以了。比如,在com0 数码管上显示数字1,详见程序清单4.11。

  如果让单个数码管循环显示0~9,且循环的时间为1s,显然显示时间也是1s,那么这就是一个简单的秒计数器,详见程序清单4.12。

  当你看到程序清单4.12(9)中的“i = (i + 1) % 10;”代码时,是否有一种似曾相识的感觉呢?这行代码是从LED 流水灯实验中提炼出来的。如果需要倒计时呢?则将其修改为“i= ((i 1) + 10) % 10;”。如果要从9 开始倒计数呢?那就将i 的初始值修改为9。至此已经实现了0~9 的循环显示,能否循环显示0~99 呢?这就是下面将要介绍的数码管动态扫描显示。

  如果要显示多位数字,则需将多个数码管并接在一起使用。此时将会出现一大堆段选端的问题,比如,两位数码管需要2×8=16 个段选信号,而LPC824 一共才16 个I/O,无法满足需求,同时管脚使用越多,连线也会变得越复杂。所以为避免使用过多的管脚而造成资源浪费和连线复杂,人们发明了一种动态扫描方式来实现多个数码管的显示。

  由于数码管的段码是连接在一起的,那么同一时刻两个数码管的段码必然是相同的,如果简单地使2 个公共端(com)均有效来实现2 个数码管的显示,那么必然都会显示相同的内容。怎么办?分时显示,即一段时间数码管0 正常显示(com0 有效,com1 无效,段码为数码管0 需要显示的图形),另外一段时间数码管1 正常显示(com1 有效,com0 无效,段码为数码管1 需要显示的图形)。如要显示一个数值12?即在com0 显示1,在com1 管显示2,详见程序清单4.13。

  虽然在实际的操作过程中数字是轮流显示的,但只要轮流操作的速度达到一定的范围,那么在人眼看起来就能达到和整体显示的效果一样,就像我们经常看的电影技术一样。

  再细心观察一下实验现象可以发现,虽然显示的数字是12,但是数码管显示的1 和2 都会有另外一个数字的影子。com0 显示的是1,但也能看到2 的影子。

  digitron_disp_num()就是digitron_com_sel ()和digitron_segcode_set()的一个简单组合。其显示过程是先传送位码、后传送段码,于是在传送位码和传送段码之间就产生了时间间隙。当新的com 端有效时,仍然还在使用此前的段码,所以出现了短暂的错误现象。怎么办?可以在这段时间内熄灭所有的数码管,避免错误显示。即:

  那如何循环显示0 ~ 59 呢?即将要显示的数值加1,详见程序清单4.14。

  程序还可以继续优化吗?现在的问题是,为了显示一个数据,即便数据没有改变,也必须动态扫描数码管,否则无法显示。首先将待显示的数据存放到缓冲区(存储单元。

首页
电话
短信
联系