数码管常见驱动方法·动态扫描输出

一、两位数码管

        每位数码管都是由7个LED(图中的A-G)组成的,如果加上小数点,就是八个LED。这些LED共阴极或阳极。数码管其实就是一堆LED按照特定的接线方式接在一起。

         这是两位数码管共阴极的接法:所有数码管的阳极A、B···G、DP(小数点)分别连接在一起,然后每位数码管所有LED的阴极共同接在一起。如果我想显示8.,那就把所有的阳极置高电平,5脚置低电平(DIG.2亮),10脚置高电平(DIG.1不亮)。

        共阳极道理一样。

        “不共”的引脚决定了八个LED中哪些亮,也就是显示什么内容; “共”的引脚决定了哪一位亮或不亮。你可以把它抽象成一个矩阵或坐标系,每一个LED灯都有唯一的坐标(x,y),这2*8个LED灯尽在掌控之下。下面这个LED点阵,显示区域是32*32,数码管plus。

        这有个明显的问题:既然所有的数码管的A、B···G、DP接在一起,那它们同一时刻显示的内容只能相同,无非通过“共”引脚决定哪一位亮不亮而已。如何显示不一样的数字,比如12?

        方法是快速切换显示。(状态1):控制引脚使DIG.2显示2、DIG.1不显示(状态2):控制引脚使DIG.2不显示,DIG.1显示1。两种状态来回切换,足够快时就能骗过人眼,看起来就像它们一起亮了。但有时在相机下可以发现猫腻。

        现在,我们需要同时控制8个“不共”的引脚——段选信号(如果有小数点的话)和2个“共”的引脚——位选信号。

二、驱动方案

2.1 3-8 译码器驱动

        在2进制中表示8个不同的数字,至少需要3位:000,001,010,011,100,101,110,111。也就是说,用3根线就能表示8个不同的信号。3-8译码器74LS138或74HC138的使用方法很容易搜索到,不再赘述。三线接在单片机口,八线接在段选信号。问题来了:同一时间只能输出一个段选信号,也就是只能亮A、B···G、DP中的某一段LED,而最简单的数字1也至少要B、C两端数码管。

        同样,段选信号也用扫描输出,把眼睛骗过去。采取这种扫描方法:位选信号快速选中一位,然后段选信号更快速地扫描一遍。这种控制方法最方便、最符合直觉。

        比如,要显示18。根据上面的原理图,位选信号选中DIG.2,I/O依次输出000、(001是小数点,跳过)、010、011、100、101、110、111,当速度足够快时,看起来显示8。I/O输出这八个状态的顺序无所谓,只要保证输出了这个状态——在这个短时间内,灯亮过就行。紧接着,位选信号选中DIG.1,I/O依次输出110、111。在输出8时,如果I/O输出一个状态的时间是t,那位选信号就要等到至少7t时切换,才能保证正确显示。在输出1时,位选信号最少只需要2t,7t也可以,只要这个7t时间足够短,就可以骗过眼睛。

        如果你希望控制程序尽可能简单,考虑到小数点,位选信号的频率应该是段选信号的1/8,才能保证所有内容都正确显示。也就是说,固定段选信号的时间为t,位选信号时间为8t。在8t的时间里,3-8译码器在把该亮的灯(段选信号)点亮。如果循环,数字8.的每个灯在8t内只被点亮一次,而数字1会被点亮四次,看起来会更亮。如果不循环,在位选信号切换过程中,会出现没有任何LED亮的情况,虽然不同数字亮度一样,但这种频闪对人眼的刺激也更大。

       解决方法有二:切换频率调到足够高,或减少欺骗次数。前者可以通过单片机I/O设置实现,后者则需要我们巧妙地设计程序。比如,设置好段选信号的时间t和位选信号的时间8t。当显示8.时,位选信号的时间不作改动,而显示1时,将位选信号的时间降为2t。

        现在,我们只需同时控制5个信号。代价是更多的频闪。

2.2 移位寄存器驱动

        以SNx4HC595系列芯片为例,常用的74HC595位列其中。下面说明这块芯片如何使用。

2.2.1 SNx4HC595系列芯片概览

        首先附上芯片手册链接。

SNx4HC595系列芯片技术规格书_德州仪器https://www.ti.com/cn/lit/gpn/sn74hc595

        尺寸信息:

左:SN74HC595N芯片  右:SNx4HC595系列芯片封装和尺寸,来自TI

        管脚定义

德州仪器SNx4HC595系列芯片的引脚定义

2.2.2 引脚功能 

        下面结合技术规格书中给出的内部结构和时序图,说明各个引脚的功能。还请耐心。

左:功能方框图,右:示例时序图
  •  OE'(Output enable),输出使能引脚。上面的横线(这里加'代替)表示输入低电平有效。即,输入为低电平0时允许输出。见时序图红线标示处,当OE'引脚输入1时,输出为高阻态。下图是一个三态门的内部结构,EN'引脚相当于OE'引脚。当EN'输出高电平时,两个MOS管截止,外部看起来是一个很大的电阻。
三态门结构
  • SRCLR'(SR clear),低电平复位引脚,或称MR'引脚。它清除的是移位寄存器中的数据
  • SRCLK(SR clock),移位寄存器时钟引脚,或称SHCP(Shift register clock pulse)。
  • RCLK(R clock),存储寄存器时钟引脚,或称STCP(Storage register clock pulse)。
  • SER(Serial input),串行数据输入引脚,或称DS引脚。有输入就会有输出,QH'引脚用作串行输出;QA - QH用作并行输出。

        SNx4HC595系列芯片由四部分组成:输入、移位寄存器、存储寄存器、输出。输入有五条线,使能、复位、数据、两个时钟。

        见时序图示例。当芯片开始上电工作时,首先复位,确保所有移位寄存器都是空的、待写入的状态,避免被上次运行时的数据干扰。数据源源不断地从SER进入,从第一个移位寄存器逐步移入第八个(此时移动了七次),第八次移动从QH'输出,如同桶里的水装满溢出一样。移动的速度由时钟SRCLK控制。所以,QH'的输出输入数据后的第八个SRCLK上升沿开始(之前都是复位后的空数据0),速度完全由SRCLK控制。

        从方框图中可以看到(蓝色箭头标示) ,当数据随着SRCLK上升沿触发移位时,不仅移入下一个移位寄存器,同时被移入存储器。这八个存储寄存器都阉割了移位和复位功能,而且由一条时钟线——RCLK控制输出。也就是说,QA - QH是随着RCLK的上升沿一起输出的,速度完全由RCLK控制。 

2.2.3 并行输出驱动数码管

        注意,存储寄存器的数据输入、输出速度是由两个不同的时钟控制的!如果这两个速度不同,可能会出现这样的情况:

  1. RCLK的频率是SRCLK的8倍:移位一次,输出八次。输出比移位快。
  2. RCLK的频率是SRCLK的0.125倍:移位八次,输出一次。输出比移位慢。
  3. 两个时钟频率相同,移位一次,输出一次。

        我们根据数据的位数和长度来调整这两个时钟频率。假设并行输出的是八位数据,并且全部要输出不遗漏,那么SRCLK的频率应该设为输入数据频率的两倍,RCLK的频率设为SRCLK的0.125倍。否则将差之毫厘,谬以千里——如下图,八位数据01010101的频率只比原来快了1/25(时钟频率不再是数据传输频率的两倍),但第二个数据就变成了01011010。必须保证每个上升沿传输正确的数据。可以看到,在配置正确的情况下,数据允许稍稍有偏移,不超过1/2个数据传输时间。

为什么时钟频率要是数据传输频率的两倍

        所以,我们用这个移位寄存器芯片也可以实现三根线控制八个输出。它把八个鸡蛋一个一个装到筐里,而且每次会固定装八个(相当于位选信号固定8t,程序方便控制),全部装好后再一起给你,不仅没有频闪,而且方便控制。 两个I/O口接两个时钟,设置PWM输出;一个I/O口接数据引脚,编写程序显示。OE'接地始终使能,SRCLR'处设计RC电路,实现上电复位。QA-QH接八个段选信号引脚。

        串行输出口QH'是最后一个移位寄存器移位溢出的数据,你可以从这里检测输出的数据,也可以连接下一个移位寄存器芯片的数据输入端组成级联。

2.3 LED专用驱动电路

        这类芯片集成度更高,有更多的功能,例如调节显示的亮度等。与上面的芯片有很大差别,它的内部集成了MCU,编好了程序,我们不再直接操控数码管的段选、位选引脚电平高低,而是与芯片通信,根据它封装好的程序来写程序。例如TM1637芯片:

ESP32驱动四脚四位数码管模块(TM1637)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值