数码管的使用方法

原创 2014年09月03日 18:02:44

数码管是嵌入式开发中比较常用的一个模块,本篇文章根据本人近期查阅的资料以及学习笔记整理成文,尽可能详尽的讲解常用数码管原理和使用方法。有不足和疏忽的地方,请不吝指正。

目录

1.工作 原理

2.电气特性

3.驱动方式

4.开发实例

5.亮度和锁存器

6.使用中注意事项


一、工作原理

         数码管 是一种半导体发光器件,其基本单元是发光二极管。能显示4位数字的叫四位数码管,当然也有多位和只有一位的数码管,他们的电气原理相同。数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。



二、电气特性

       单位数码管有十个管脚,其中有8根是用来点亮a,b,c,d,e,f,dp 共8个发光二极管(原理中有介绍),3,8两个管脚为公共COM脚,它们相连通且作用相同,可接任意一根。为了更清楚介绍,贴图如下



三、驱动方式

      1、静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个呢:),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。

  2、数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。


四、开发实例

下面讲解一下四位数码管的动态驱动显示,首先看一下接线引脚图如下。



接下来用51单片机设计目标:通过编写c语言程序经编译连接后下载到单片机中,使四位数码管依次显示1,2,3,4

#define uchar usigned char
#define uint  usigned int

//位选控制端口
sbit p20=P2^0;
sbit p21=P2^1;
sbit p22=P2^2;
sbit p23=P2^3;

//数码管段选编码数组,分别为显示:1,2,3,4的编码
uchar code BianMa[] ={0x7,0xb,0xd,0xe};

//延时1ms函数(用于数码管动态刷新)
void Delay1ms(int time);

void main()
{
while(1)
{
	p20 =0; //共阴极数码管低位选有效,表示已选中第一位数码管
	P0 =BianMa[0];//通过I/O口P0向数码管送段选编码
	Delay1ms(500);//第一位数码管显示0.5秒,然后换到第二位,依次下去,由于视觉停留和数码管余辉,所以感觉四位都在显示
	p20 =1;
	
	p21 =0;  //第二位亮
	P0 =BianMa[1];
	Delay1ms(500);
	p21 =1;
	
	p22 =0;  //第三位亮
	P0 =BianMa[2];
	Delay1ms(500);
	p22 =1;
	
	p23 =0;  //第四位亮 
	P0 =BianMa[3];
	Delay1ms(500);
	p23 =1;
}

//延时函数体
void Delay1ms(int time
{
	int i,j;
	for(i =time;i>0;i--)
		for(j =110;j>0;j--)
}


五、关于亮度和锁存器

一般来说静态驱动的亮度要高于动态驱动的亮度,但不影响使用。实际使用中为了达到更好的效果,会配合锁存器如74HC573一起使用,可以记忆先前状态数据直到有新数据覆盖。对做51单片机应用开发来说,相对LCD液晶,液晶模块编程更方便,样式更多样,但是其缺点亮度不够。这也恰恰是数码管的优势,如果做简单的计数显示,数码管是最好选择。

六、使用中注意事项

数码管的基本组成是发光二极管,因此其可以通过的电流只有几mA,接5V直流电源做测试的时候一定要串上一个几十K大小的电阻。否则,很容易烧掉,此外用万用表的测电阻档就可将其点亮,足以说明其电流之小。


汇编语言编程实例---串行控制七段数码管

串行控制七段数码管 ORG 00H START: MOV 30H,#1 ; 低位七段数码管DS0显示数据 MOV 31H,#5 ; 高位七段数...
  • yang889999888
  • yang889999888
  • 2017年06月03日 10:52
  • 386

BCD-七段数码管显示译码器

问题及解决 1.要好好看看工作原理。 2.文件名必须与VHDL文件中的设计实体名保持一致。 总结:我个人感觉操作的规范化比较重要,如果操作不规范不仅使操作步骤繁琐,也有可能带来错误。其次是理解代码含义...
  • a1260157543
  • a1260157543
  • 2015年10月18日 14:28
  • 7908

用Python绘制七段数码管

七段数码管( seven-segment indicator)由 7 段数码管拼接而成,每段有亮或不亮两种情况,改进型的七段数码管还包括一个小数点位置 绘制模式: input:输入当前日期的...
  • sinat_38163598
  • sinat_38163598
  • 2017年04月08日 21:40
  • 2880

数字万用表(七段数码管)的图像识别(opencv实现)

最近接触图像处理,要实现数字万用表数据的自动读取。我使用opencv+VC2005环境开发,OpenCV是Intel 开源计算机视觉库,它提供了强大的图像处理函数库。Opencv的介绍在这里太不多说,...
  • xgbing
  • xgbing
  • 2013年07月15日 15:02
  • 12897

7段数码管显示驱动电路参数推导

以三极管驱动的7段数码管驱动电流计算及电阻参数选择
  • electrocrazy
  • electrocrazy
  • 2017年03月04日 14:19
  • 1789

Arduino简单实例十三_四位数码管

1)       说明: 数码管是一种半导体发光器件,其基本单元是发光二极管。因此也需要串联电阻,以防电流过大。每个数字由7条线组成,用a-g控制,同时用A1-A4控制当前设置的四个数字中的哪一个。...
  • xieyan0811
  • xieyan0811
  • 2017年02月20日 13:58
  • 3726

树莓派平台4位共阴数码管Python编程

用Python语言编写代码,实现对四位数码管的动态扫描
  • u011708919
  • u011708919
  • 2014年11月21日 14:20
  • 2783

VerilogHDL实现FPGA的数码管驱动

1、用八位数码管实现静态显示,首先让8位数码管所有位全亮,再全灭,再同时显示0-f的变化(一秒为变化周期)。module shumaguan(mainclk,/*主时钟*/ seg_d...
  • Apollon_krj
  • Apollon_krj
  • 2016年12月04日 23:13
  • 1940

51单片机的数码管和矩阵键盘

使用4*4的矩阵键盘和一个数码管 在4*4的矩阵键盘上编码0-F的字符,和一个数码管显示每个键盘上输入的字符。 //4*4键盘检测程序,按下键后相应的代码显示在数码管上 #include typ...
  • u011046042
  • u011046042
  • 2015年01月22日 16:08
  • 1293

2-3 Verilog 7 段译码器(动态显示)

Verilog 学习过程 7段译码管动态态显示
  • hyhop150
  • hyhop150
  • 2016年04月22日 21:38
  • 928
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数码管的使用方法
举报原因:
原因补充:

(最多只允许输入30个字)