嵌入式硬件入门——LED数码管(工作原理+静态驱动)_led数码管控制原理-程序员宅基地

技术标签: # 51单片机入门  # 硬件知识  嵌入式硬件  单片机  

LED数码管是一种半导体发光器件,其基本单元是发光二极管(LED)

数码管介绍

led数码管(LED Segment Displays)由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。 ——百度百科

LED数码管在生活中随处可见,洗衣机、电饭煲、热水器、微波炉、冰箱、这些最基本的家用电器上基本都用到了这种7段LED数码管(为LED灯的个数)。

下图为某洗衣机控制主板:
在这里插入图片描述

1.数码管的分类

  1. 按显示段数分:分为七段八段九段十四段十六段
    七段:七段数码管由7个LED构成
    在这里插入图片描述
    八段:八段数码管比七段多了一个小数点
    在这里插入图片描述
    九段:九段数码管由9个LED构成
    在这里插入图片描述
    十四段:十四段数码管由14个LED构成在这里插入图片描述
    十六段:十六段数码管由16个LED构成在这里插入图片描述

  2. 按显示位数分:分为1位2位3位多位数码管(大于1位)
    在这里插入图片描述

  3. 按内部发光二极管单元的连接方式分:分为共阳极共阴极
    共阳极数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。(内部构造见下节内容)
    在这里插入图片描述

  4. 按显示颜色分:分为红色、橙色、黄色、绿色和蓝色等等

2.数码管内部构造及原理

内部构造

下图是数码管的引脚定义内部构造,可以看到其实数码管内部只有LED一种元件,图(a)中的COM就是数码管的公共端,数码管只能是共阳极(公共端为VCC)和共阴极(公共端接地)中的一种。

在这里插入图片描述

显示原理

从上面的内容我们可以得知LED数码管其实就是由多个LED组成的,那它是如何显示数字的呢?

原来数码管的8个LED都已经被命好名了:它们分别叫a,b,c,d,e,f,g,dp,只要点亮这8个LED中的其中几个,就能达到显示数字的目的,那我们怎么知道显示的数字LED编号之间的对应关系呢?

这个其实也很简单,不用我们死记硬背,可以直接查表,下图是共阴极数码管显示0-F对应的编码:

在这里插入图片描述

如果是共阳极数码管,只需将上图对应的编码按位取反即可。

下表同样为数码管显示字段对照表:

显示的数字 点亮的LED 十六进制 (共阳极) 十六进制 (共阴极)
0 abcdef 0xC0 0x3F
1 bc 0xF9 0x06
2 abdeg 0xA4 0x5B
3 abcdg 0xb0 0x4F
4 bcfg 0x99 0x66
5 acdfg 0x92 0x6D
6 acdefg 0x82 0x7D
7 abc 0xF8 0x07
8 abcdefg 0x80 0x7F
9 abcdfg 0x90 0x6F
A abcefg 0x88 0x77
B cdefg 0x83 0x7C
C adef 0xC6 0x39
D bcdeg 0xA1 0x5E
E adefg 0x86 0x79
F aefg 0x8E 0x71

数码管硬件知识

1.数码管电压与电流

  • 同样型号下,不同颜色的LED数码管
    红色的LED数码管电压一般在1.7~2.5Ⅴ左右,绿色的LED数码管电压一般在2.0~2.4Ⅴ左右,黄色的LED数码管电压一般在1.9~2.4Ⅴ左右,蓝/白色的LED数码管电压一般在3.0~3.8v左右。
  • 同样颜色,不同功率的LED数码管
    1/6W的LED数码管的电压2.5V~3.5V之间,电流是0.02A左右;1/2W的LED数码管的电压2.5V~3.77V之间,电流是0.15A左右;1W的LED数码管的电压2.79V~3.99V之间,电流是0.35A左右;3W的LED数码管的电压3.05V~4.47V之间,电流是0.7A左右;5W的LED数码管的电压3.16V~4.88V之间,电流是1A左右。
  • 来源——http://www.dg8.com.cn/jishu/13458.html

由于LED数码管由LED组成,所以以上参数其实和LED的电压和电流参数相同,这些内容也在我之前的发光二极管介绍篇里有所提及。

2.数码管典型电路

由于不同规格型号的LED数码管对应的正向导通电压和额定电流不同,所以我这里以Proteus器件库的数码管默认参数作为参考,如下图所示,即现在我们要使用的数码管正向导通电压1.5V额定电流10mA

在这里插入图片描述
单片机的VCC通常为3.3V或5V,它们都达到了数码管的1.5V正向导通电压(电压超过一点没关系,主要是电流不能太大)。

假如我们现在用单片机控制数码管,由于单片机的IO电流一般为10mA~20mA,驱动单个LED是足够的,但是如果有多个数码管并联(多位数码管),单片机的IO电流就不足以驱动所有的数码管,这时就会出现数码管亮度变暗或不亮的现象。
所以,在用单片机控制多位数码管时(动态驱动数码管),我们需要使用驱动电路。

首先让我看看动态数码管的电路原理图,可以看到8个数码管的8个引脚是和单片机IO并联的,如果8个数码管同时亮或者快速扫描时(扫描的意思是多个数码管片选,即在一个较短的时间内单片机只操作一个数码管,然后不断循环切换数码管进行显示),单片机的IO驱动能力不足以维持数码管的正常显示,所以我们需要在单片机IO和多位数码管之间增加驱动电路
在这里插入图片描述

通常可以使用三极管实现驱动功能,这里的三极管起到开关作用。当IO端(电阻R3左侧)为低电平时,三极管不导通,4个LED不亮;当IO端为高电平时,三极管导通,4个LED被点亮。这时单片机就是起到控制作用(控制三极管的集电极和发射极是否导通),而不是驱动作用。

在这里插入图片描述


除了用三极管,我们还可以使用一些驱动芯片,比如74HC245,74HC245是一种三态输出、八路信号收发器,主要应用于大屏显示,以及其它的消费类电子产品中增加驱动。

其内部构造如下图所示,里面相当于有8个开关电路,正好数码管也有8个信号引脚。此外,74HC245支持三态输出(输入、输出、高阻),也就是说它能反向驱动,即驱动共阳极数码管,可以说用74HC245来驱动数码管堪称完美(纯个人观点——我见识短)。
在这里插入图片描述

  • 用74HC245驱动单个共阴极数码管

在这里插入图片描述

  • 用74HC245驱动单个共阳极数码管

在这里插入图片描述


据说还有一种数码管译码器74LS47,它能将BCD码(用4位二进制数来表示1位十进制数中的0~9这10个数码)转换成数码管对应的数字的显示信号,这个芯片我在学单片机之前用过,不过现在忘了。

74LS47是 BCD-7段数码管译码器驱动器,74LS47的功能用于将BCD码转化成数码块中的数字,通过它来进行解码,可以直接把数字转换为数码管的数字,从而简化了程序,节约了单片机的IO开销。因此是一个非常好的芯片!但是由于目前从节约成本的角度考虑,此类芯片已经少用,大部分情况下都是用动态扫描数码管的形式来实现数码管显示。

在这里插入图片描述

.

由于BCD码只能表示0~9,所以它也只能翻译0~9对应的数码管显示信号。具体使用这里就不作介绍了。

下面展示百度百科的图:(当然,如果用单片机,我们就没必要用BCD码编码器)
在这里插入图片描述

数码管的应用

使用51单片机控制数码管

这里仅介绍单个数码管的操作(1位数码管),又称静态驱动数码管显示

静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
.
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
——百度百科

直接上代码,实现功能:让数码管循环显示0-F

#include <reg52.h>   //此文件中定义了单片机的一些特殊功能寄存器

unsigned char code coding[16]={
    0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0-F的值

#define LED_TUBE  P2 //P2的8个IO端口对应数码管的8个信号引脚

/******************************************************************************
 * @ 函数名  : Delay_10us
 * @ 功  能  : 10us粗略延时
 * @ 参  数  : 延时时间--单位10us
 * @ 返回值  : 无
 ******************************************************************************/
void Delay_10us(unsigned int time)
{
    
	while(time--);
}
 

/******************************************************************************
 * @ 函数名  : main
 * @ 功  能  : 主函数
 * @ 参  数  : 无
 * @ 返回值  : 无
 ******************************************************************************/

int main()
{
    	
	unsigned char i = 0;
	while(1)
	{
    
		/* 显示0-F */
		for(i = 0; i < 16; i++)
		{
    
			LED_TUBE = coding[i]; //设置8个IO的电平
			Delay_10us(50000);    //延时约500ms
		}	
	}
}

Proteus仿真:

实现功能:让数码管循环显示0-F
下图中串联电阻阻值为470欧姆

请添加图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43772810/article/details/120645023

智能推荐

Qt中如何将QComboBox中的选项StringItem与数值内联binding_qt combobox显示数值和实际值怎么绑定-程序员宅基地

文章浏览阅读501次。Qt中如何将QComboBox中的选项StringItem与数值内联binding开发文档中有两种方法第一种:第二种:这里介绍第二种(我认为更简单的一种)就用我目前做的一个小项目来说吧我的combo box中有各种各样的运动,每种运动自动内联着它所对应的一个小时所消耗的卡路里(int)consume::consume(QWidget *parent) : QDialog(parent), ui(new Ui::consume){ ui->setupUi(_qt combobox显示数值和实际值怎么绑定

最新大猿人中控充值系统 免授权学习版 支持公众号H5、分销等功能_猿人充值系统 3.2 漏洞-程序员宅基地

文章浏览阅读1.5k次。简介:最新大猿人中控充值系统 免授权破解版 支持公众号H5、分销等功能功能简介:大猿人中控系统目前是市面上用的最多的电话费充值中控系统,支持代理分销、公众号H5、API接口对接等功能,也是目前最完善的一款中控系统,前端全开源,已破解免授权!配置环境:php7.3 + Redis搭建教程:1、首先吧大猿人中控系统压缩包上传到服务器内进行解压,然后吧数据库文件导入数据库内2、修改/application/database.php 文件进行配置链接数据库。_猿人充值系统 3.2 漏洞

创建异形窗口[3]-程序员宅基地

文章浏览阅读81次。为什么80%的码农都做不了架构师?>>> ..._gtk3 异形窗口

C语言:验证下列矩阵是否为魔方阵。魔方阵是每一行、每一列、主副对角线上的元素之和都是相等的矩阵。-程序员宅基地

文章浏览阅读2.6k次。#include <stdio.h>#include <string.h>#include <string.h>int main(void){ int a[5][5] = {17,24,1,8,15, 23,5,7,14,16, 4,6,13,20,22, 10,12,19,21,3, 11,18,25._验证下列矩阵是否为魔方阵。魔方阵是每一行、每一列、主副对角线上的元素之和都是

Django疫情返乡人员管理系统-11411,计算机毕业设计开题选题+程序定制+论文书写+答辩ppt书写-原创(题目+编号)的定制程序-程序员宅基地

文章浏览阅读51次。免费领取项目源码,请关注赞收藏并私信博主,谢谢-本课题研究的疫情返乡人员管理系统,主要功能模块包括:防疫须知、疫情用品、返乡报备、用户反馈管理等,主要是主要采取Mysql作为后台数据的主要存储单元,运用软件工程原理和开发方法,采用Python的Django技术构建的,实现了系统的全部功能。本次报告,首先分析了研究的背景、作用、意义,为研究工作的合理性打下了基础。

oracle序列中cache和nocache-程序员宅基地

文章浏览阅读1.1k次。首先我这篇博客的内容是我不知道oracle里的 cache 是什么,结果越查越多。。。“序列的cache通常为 20,但在需要依据序列值判断创建的先后顺序时必须是 NOCACHE”,关于这句话,是公司的数据库规范里提到的一句话,但是我感觉nocache会导致的问题好像还不少,所以我很纠结,但是除了根据序列值判断创建的先后顺序外,还有其他的靠谱的方式来判断先后顺序吗?难道入库时间不可以吗..._数据库中的nocache是什么意思

随便推点

微信小程序云开发-酒店点餐类系统,附带(node.js在widows环境下的配置过程)_云开发可以做扫码类么-程序员宅基地

文章浏览阅读3.2k次,点赞3次,收藏11次。前些日子,帮一个学生做了一个毕业设计,是关于酒店点餐的微信小程序,现在整理一下过程。本款小程序是基于微信云开发的,现在做微信小程序的一大方便是:微信给大家提供了免费空间(云开发),对于不想花钱去租用服务器和域名的小伙伴儿来说,这无疑是一大喜事! 本款小程序非常适合商城类小程序的二次开发或是学习商城类小程序最佳的一个案例。废话不多说,直接上图:小程序..._云开发可以做扫码类么

jq使用ajax报错404,jQuery中ajax错误调试分析-程序员宅基地

文章浏览阅读1.8k次。jQuery中把ajax封装得非常好。但是日常开发中,我偶尔还是会遇到ajax报错。这里简单分析一下ajax报错一般的jQuery用法如下,ajax通过post方式提交"汤姆和老鼠"这段数据到xxx.php文件中。成功后则打印返回的数据,失败则打印错误原因。$.ajax({url:"xxx.php",type:"post",datatype:"json",data:{"cat":"tom","mo..._jquery ajax保存数据到后端flask,出现404not found错误

HDU 1587 Flowers 解题报告_2019 flowers acm-程序员宅基地

文章浏览阅读1.3k次。动态规划 完全背包_2019 flowers acm

沉云架路,边缘先锋—中国联通5G边缘先锋团队2020年交付纪实-程序员宅基地

文章浏览阅读956次。前言 2020年5G MEC由探索走向商用,作为运营商中部署MEC的先行者,中国联通实现了MEC从示范项目到商业化落地的转变,全国MEC节点建设已初具规模,云网一体化转型效果显著。..._成立5g虚拟支撑团队

Web性能优化:图片优化-程序员宅基地

文章浏览阅读71次。HTTP Archieve有个统计,图片内容已经占到了互联网内容总量的62%,也就是说超过一半的流量和时间都用来下载图片。从性能优化的角度看,图片也绝对是优化的热点和重点之一,Google PageSpeed或者Yahoo的14条性能优化规则无不把图片优化作为重要的优化手段,本文覆盖了Web图片优化的方方面面,从基本的图片格式选择、到尚未被广泛支持的响应式图片均有所提及。Google Web ..._jpegoptim optipng pngquant gifsicle

openGauss 向量化引擎-程序员宅基地

文章浏览阅读249次,点赞4次,收藏4次。openGauss提供向量化引擎,通常用在OLAP数据仓库类系统。主要是因为分析型系统通常是数据处理密集型,基本上都是采用顺序方式来访问表中大部分的数据,然后再进行计算,最后将计算结果输出给用户。