立即注册 登录
返回首页

uid:82083的个人空间

日志

再说多位数码管的驱动与考虑

热度 1已有 2009 次阅读2015-6-5 13:13 | 数码管

许多时候,数码管与单片机几乎是形影不离的!
当需要驱动的数码管超过 2 位(个) 时,大部分情况下都会使用扫描方式进行分时驱动.
我们这里示例一个需要驱动 8 位数码管时的考虑,比较,以期可以举一反三,更好取舍!(示例使用共阳极数码管).
图 1 就是最普通的驱动方案----使用 8 次分时显示完成一轮显示:

图 2 也是是最普通的驱动方案----使用 4 次分时显示完成一轮显示:

图 1 图 2 对单片机而言,要求是有区别的:
区别又分别 2 种情况: 直接使用端口做笔段驱动还是通过串行到并行芯片来驱动笔段.(例如HC595,HC164等.)
端口直接驱动笔段:
图 1 使用 8SEG + 8 COM =16 个端口.图 2 使用 2*8SEG + 4 COM =20 个端口.
--------图 2 用 4 个端口换来了省 4 个三极管和扫描一轮时间快一倍! -----推荐使用 图 2 !
通过串行到并行芯片来驱动笔段:
这种方案又有不同区别:
图 3 是让 2 个 HC164 自身也连接为串联状态,单片机仅仅提供 2 根连接线就可以了.-----但是,需要连续发送 16 位二进制数据,才完成一次 2 位数码管显示.

图 4 是让 2 个 HC164 自身不连接为串联状态,而是时钟线公共使用,数据线分别使用,单片机需要提供 3  根连接线才行.-----但是,这种方式仅仅需要连续发送 8 位二进制数据,就完成一次 2 位数码管显示.(每次分别 2 个 HC164 各同时发送 1 位!)

很明显,图 4 的速度比图 3 的速度要快差不多一倍!-----因此,推荐使用图 4 是有利的!
;=============================================
示例程序:
; 2 个 HC164 三线制驱动子程序----温湿度显示
B_TLED164:;写数据到HC164
        
                  MOV_          JS164,#8;移位计数8次
@@:
        B0BCLR  PWDA_A  ;温度显示数据 P
        BTS0        WDATA.7 ;温度
        B0BSET  PWDA_A
        
        B0BCLR  PSDA_B  ;湿度显示数据 P
        BTS0        SDATA.7 ;湿度
        B0BSET  PSDA_B

        B0BSET  SCL164  ;时钟 P
        JMP        $+1
        B0BCLR  SCL164;送时钟
        RLCM         SDATA ;2只HC164并联使用.
        RLCM         WDATA
        DECMS         JS164;输出计数
        JMP        @B
        RET
;======================================================
以上推荐是因为:当选择单片机引脚数量时,多几个引脚并不会明显增加开支,但是多使用单片机引脚可以带来节省外部硬件或提高运行速率!因此是符合节省又高效的原则的.
此外,还有利用锁存器(或触发器)的并行驱动方式,使用端口数量比串行/到并行驱动要多,但是其 8 线并行口可以分时无限制复用!却不适合那些具有特定任务的端口---例如控制输出等!
仅仅几个数码管,实际做起驱动来,还是很多考虑的.------限于篇幅不要过长,这里就打住吧!

路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (1 个评论)

回复 海狼 2015-6-9 12:21
开始认认真真学习单片机

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部