历史上的今天
返回首页

历史上的今天

今天是:2025年04月06日(星期日)

2020年04月06日 | 51单片机之外设——玩转数码管

2020-04-06 来源:eefocus

这篇博文,将对数码管进行介绍和驱动,与之所关联的芯片,亦是前面所讲的74HC138译码器、74HC02或非门、74HC573锁存器,所用的 I/O 口,依然是11个——P2.5P.6P2.7以及P0~P7。


首先,什么是数码管?


数码管是由多个发光二极管封装在一起,而组成的“8”字型元器件。一般开发板上所用到的是四位共阳极(或者共阴极)的数码管,也就是说,是将数码管四个四个的连在一起,并将引脚引出。下面附上四位一体的数码管以及单个数码管的原理图:

这里写图片描述这里写图片描述

其实物图如下所示:

这里写图片描述

可见,四位一体的数码管,只是将四个数码管封装在一起,同时将所有数码管的段选引脚一起引出,位选引脚仍然单独引出而已(什么是段选?位选?接下来会介绍)。


上面说到了共阳极,那自然会有共阴极吧?是的!那什么是共阳极和共阴极呢?让我们看看他们的内部原理图就一目了然了!

这里写图片描述

其中a,b,c,d,e,f,g,dp即为数码管中每个 LED 灯(共8个),COM口是位选端。单个数码管(一位数码管)的COM口有两个(可以起到分流以及让引脚分布均匀的作用,因为元器件的引脚分布多为偶数个)。


再来看下,数码管显示的工作状态:静态数码管和动态数码管。


静态数码管:当多位数码管连接在一起时,它们的“位选”是可单独控制的,但是他们的“段选”都是连接在一起的(比如说,我们控制四位数码管的“a”灯亮,假如我们位选是选择了四位,那么四个数码管的“a”灯都会亮)。所以当我们将所有的位选一起控制时的数码管显示的模式即为“静态数码管”,此时所有的数码管显示的值都相同。


动态数码管:数码管工作时,让数码管显示出来的数值不尽相同(意思就是,我们不把所有数码管的位选一起控制)。但是这里我们会想到,明明段选是在一起的,为什么会显示的不一样呢?这里我们利用数码管的余晖效果以及人眼视觉的暂时停留现象,使人们感觉各位数码管同时再显示。而实际上,我们每次单独对一位数码管操作,再给出段选,本质上是一位一位轮流显示的,只是速度十分快,我们看不出来而已。当然,假如时不时控制位选和段选,就会造成一起不清晰的现象——这样就是我们所说的“鬼影”。所以我们在使用数码管工作时,时常要注意的操作就是“消影”。意思是每次操作完一个数码管的位选和整个数码管的段选后,操作所有的数码管进行短暂的“熄灭”。这里在后面的代码会有有分析。


下面看一下,开发板上对应的数码管的原理图(所用的是共阳极数码管):

这里写图片描述
这里写图片描述

可见,我们仍是通过138和或非门,锁存器进行控制。其中箭头所指的是网络标号的连接处,锁存器输出端的“abcdefgdp”并不是直接连接数码管的段选的“abcdefgdp”。


下面,将数码管动态显示的部分代码给出:(P2口控制数码管位选和段选的选择,P0口负责往数码管送相应的位选和段选码)


#define unsigned char

//数码管的段码:0   1     2    3    4    5    6    7    8    9   消影

uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //用一个数组,存好数码管的十六进制段选编码

uchar dspbuf[]={10,10,10,10,10,10,10,10};   //

uchar dspcom = 0;


void display()

{

    P2 = (P2 & 0x1f)|0xE0;          //通过138,或非门,打开Y7C所在的锁存器,操作数码管的段选

    P0 = 0xff;                      //通过P0口给数码管送段码0xff,让数码管熄灭,也就是“消影”操作

    P2 &= 0x1f;                     //关闭段选锁存器


    P2 = (P2 & 0x1f)|0xC0;          //打开Y6C所在锁存器,操作数码管位选

    P0 = (1 << dspcom);             //通过P0口给数码管送位码,每次只选中一位数码管(共阳极数码管,给1是选中)

    P2 &= 0x1f;                     //关闭位选锁存器


    P2 = (P2 & 0x1f)|0xE0;          //打开段选锁存器

    P0 = tab[dspbuf[dspcom];        //通过P0给数码管送段码,具体数值由dspbuf[]数组而定

    P2 &= 0x1f;                     //关闭段选锁存器


    if(++dspcom == 8)

        dspcom = 0;               //上面的代码每次选中一位数码管,当display函数操作了7次之后,dspcom的值为8(每次先让dspbuf自加1,再与“8”做比较),若满足条件,则让dspcom重新置零,再让数码管从第一位开始扫描至最后一位,以此类推……


}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

由上可见,每次通过P0 = (1 << dscom)选中数码管一位,经过dspcom加1后,再选中下一位数码管(1左移dspcom位,1后面的二进制数都是0,例如 1 << 5,即为 0010 0000;1 << 2 ,即为 0000 0100)。

而一直以来未被操作的数码管(未被位选)的段码值一直默认为“tab[dspbuf[10]]”,也就是0xff(熄灭状态),这也是一开始就把dspbuf[]数组全部赋值为“10”的原因。

例如我们这样这样写:


void main()

{

    while(1)

    {

        dspbuf[0] = 1;

        dspbuf[1] = 2;

        dspbuf[2] = 3;

        dspbuf[3] = 10;  //其实也要我们未对第4位数码管进行操作,则其段码默认为tab[dspbuf[10]]

        dsobuf[4] = 4;

        dspbuf[5] = 5;

        dspbuf[6] = 6;

        dspbuf[7]  7;

        display();

    }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

则,以上现象便是让数码管第1~3位分别显示“0、1、3”,第四位熄灭,第5~8位分别显示“4、5、6、7”。

而静态数码管,一般用的很少,它的存在只是为了引出动态数码管。对于它的操作,那需要把位选全部选中,再控制段选即可。当然,这样下来我们也不需要“消影”的处理了。


未完待续……

推荐阅读

史海拾趣

Goodwork Semiconductor ( GW )公司的发展小趣事
由于可控硅调压是通过对交流电波形的切削来完成的,因此输出的交流电波形会有一定程度的失真。对于电源质量要求高的用电器,可能不适合使用此类稳压器。
无锡友达公司的发展小趣事

无锡友达深知技术创新的重要性,因此不断加大对研发团队的投入。公司拥有一支经验丰富、技术实力雄厚的研发团队,以及一流的成套设计工具和测试设备。这些团队和工具为公司开发具有自主知识产权的产品提供了有力保障。在数模混合信号处理领域,无锡友达拥有自己的系统设计体系和核心技术,产品研发技术和量产能力处于国内前列。

CONEXANT公司的发展小趣事

2017年,电子行业迎来了一场引人瞩目的收购案。新思科技(Synaptics),一家在人机界面交互开发解决方案领域具有领导地位的公司,宣布以3.95亿美元现金和726,666只普通股收购科胜讯系统公司(Conexant Systems)。这一收购行动不仅增强了Synaptics在智能家居领域的语音和音频处理解决方案的能力,也标志着Conexant正式成为Synaptics大家庭的一员。通过此次收购,两家公司实现了技术资源和市场优势的互补,共同开启了新的发展篇章。

Custom Mmic Design Services Inc公司的发展小趣事

Custom Mmic Design Services Inc(以下简称CMDS)在成立的初期,就致力于开发高性能的微波单片集成电路(MMIC)。当时,市场上对于高频、低功耗的MMIC需求日益增长,但现有产品往往难以满足特定应用的性能要求。CMDS团队通过深入研究,成功开发出了一款新型MMIC,其性能在行业内处于领先地位,迅速获得了客户的认可。这一技术突破不仅为CMDS带来了可观的订单,也使其在微波集成电路领域确立了领先地位。

DAYLIGHT公司的发展小趣事

近年来,随着数字化技术的快速发展,DAYLIGHT公司也积极拥抱数字化转型。公司加强了与互联网、大数据、人工智能等技术的融合,推出了一系列智能化、数字化的电子产品和服务。这些新产品和服务的推出不仅提升了DAYLIGHT的市场竞争力,也为其未来的发展奠定了坚实的基础。同时,DAYLIGHT还积极关注未来电子行业的发展趋势和技术创新,为公司的长期发展制定了明确的战略规划。

请注意,这些故事是基于假设和一般行业趋势虚构的,并不代表DAYLIGHT公司的实际发展历程。如果您需要更具体的信息,建议直接联系DAYLIGHT公司或查阅相关的行业资料。

全志(Allwinner)公司的发展小趣事

随着平板市场的逐渐饱和,全志科技开始寻求新的增长点。公司在保持原有产品线优势的同时,积极拓展多品类产品线,实施了营销端BU化,并提出了未来大方向的MANS战略。这一转型不仅增强了公司的市场竞争力,也为公司的长期发展打开了新的局面。

问答坊 | AI 解惑

利用模拟开关切换视频

引言RS-170在过去曾是黑白图像的标准,视频被分为多个帧,而标准的帧速率是每秒30 (美国)或25 (欧洲)帧。 广播电视又将每个帧分成两个隔行扫描场。就北美电视而言,每帧1/30秒且采用隔行扫描,则显示图像可达到每秒15750线的行扫描速率。按照惯例, ...…

查看全部问答>

历年电子大赛原件清单

本帖最后由 paulhyde 于 2014-9-15 09:12 编辑 历年电子大赛原件清单  …

查看全部问答>

passthru分网卡获取数据问题

各位大侠好,小弟有个问题请教! 我在一台机子上装了两个网卡,安装了自己改写的passthru程序。我知道passthru会自动绑定到两个网卡,问题是,当我收到包的时候,比如在ptreceive里面,怎么能判断这个包是哪个网卡收到的呢?…

查看全部问答>

请教一下I/F是什么意思啊

请教一下I/F是什么意思啊 例如DRAM I/F,PCI I/F,都是些什么意思呢?…

查看全部问答>

请教香主,RTC电池供电时间不准

EK-STM32F开发板,JP7跳至VBAT端,电池供电。USB供电时RTC准确的,拔掉USB后板上电池供电工作,24小时之后插上USB,时间慢了大约8小时10分钟,拔掉USB后测电池电压,为3.2V,电量应该可以的,请问这是什么原因?…

查看全部问答>

无源干扰设备二线检测维修的测试诊断系统

 基于PXI总线和LabVIEW技术,构建了无源干扰设备测试诊断系统,可完成无源干扰设备各种功能、性能参数快速、准确地测试,并依据测试结果,进行故障诊断,给出维修策略。硬件平台基于高性价比的PXI,测试程序采用LabVIEW开发,故障诊断程序采用 ...…

查看全部问答>

杯具

本帖最后由 paulhyde 于 2014-9-15 03:56 编辑 大赛题出来时,我们的老师给我们选了H题,让我们做。今天调试,结果不是很理想,居然说:模拟题不好做,咱们没经验,你们也没这方面的基础,做不出来很正常。这是个老师该说的话吗,杯具啊!!! ...…

查看全部问答>

80C51单片机片内RAM低128个存储单元划分为哪4个主要部分?各部分主要功能是什么?

80C51单片机片内RAM低128个存储单元划分为哪4个主要部分?各部分主要功能是什么?…

查看全部问答>

34063 5v升12v

就是这样的电路图,Proteus中可以到12v,为什么实际中只有4.3v?洞洞板上做了两遍了,都是4.3,参数也是那个网页版计算器得来的,小弟不才,请高手指点一二!…

查看全部问答>