51单片机学习笔记6 数码管显示 您所在的位置:网站首页 8位数码管动态显示0到9什么意思 51单片机学习笔记6 数码管显示

51单片机学习笔记6 数码管显示

2024-07-13 03:35| 来源: 网络整理| 查看: 265

51单片机学习笔记5 数码管显示 一、动态数码管1. 动态数码管工作原理2. 工作过程3. 原理图(1)数码管及74HC245(2)74HC138译码器 4. 74HC245介绍(1)**功能**(2)**引脚**(3)**工作原理**(4)真值表 5. D74HC138 介绍(1)**功能**(2)**引脚**(3)**工作原理**(4)真值表 6. 代码实现

在这里插入图片描述

一、动态数码管 1. 动态数码管工作原理

动态数码管是一种常见的数字显示设备,通常由七段LED组成。每个数码管都有七段LED分别表示数字的不同部分,通过控制这些LED的亮灭,可以显示数字0到9以及一些字母。

在动态数码管中,每个数码管的七段LED是依次被控制的,通过快速地依次使每个数码管的七段LED亮起,可以形成多位数字的连续显示效果。

单片机通过扫描技术和适时的输出控制信号,使得数码管的各个段依次显示所需的数字或字母。

动态数码管特点:

动态数码管具有显示效果清晰、功耗低、寿命长、驱动电路简单等特点,广泛应用于计时器、电子表、计数器等设备中。 由于动态数码管需要单片机不断地扫描和控制,因此需要一定的处理能力和时间,适合用于单片机控制的场合。

我使用的普中开发板,使用 74HC245 作为动态数码管的驱动器,使用 D74HC138 作为译码器。

2. 工作过程 首先,单片机输出控制信号,选择要显示的数码管。然后,单片机根据要显示的数字或字母,通过输出控制信号,通过D74HC138,连接 74HC245,控制对应的七段LED灯亮起或熄灭。单片机通过不断地切换显示的数码管,并控制每个数码管的七段LED灯,实现多位数字或字母的连续显示效果。 3. 原理图 (1)数码管及74HC245

在这里插入图片描述

(2)74HC138译码器

在这里插入图片描述

4. 74HC245介绍

74HC245是一款常用的8位双向电平转换器,也被称为总线驱动器。它常用于数字系统中的数据总线扩展、电平转换以及信号缓冲等应用,其主要特点:

高速:74HC245具有较高的数据传输速率,适用于高速数字系统。低功耗:它的静态功耗较低,适用于功耗要求较低的应用。低电平输出:74HC245的输出端口可以提供低电平输出,适用于5V和3.3V系统之间的电平转换。

其管脚定义: 在这里插入图片描述

(1)功能 74HC245具有8位双向数据传输功能,可以将数据从一个总线转移到另一个总线,并在两个方向上进行数据传输。它还具有电平转换功能,可以将高电平信号转换为低电平信号,反之亦然。74HC245还具有输出使能功能,可以通过控制输入引脚来控制数据的传输使能。 (2)引脚

74HC245具有16个引脚,分为两组,每组包含8个数据引脚和一个使能引脚。

数据引脚用于连接输入或输出数据总线。

使能引脚用于控制数据传输的使能。

OE 是输出使能引脚,L 表示输出使能,H 表示输出禁用。

DIR 是方向控制引脚,L 表示数据从A端到B端传输,H 表示数据从B端到A端传输。

(3)工作原理 74HC245的工作原理基于双向缓冲器的原理。当使能引脚为高电平时,数据可以从A端传输到B端,并且数据也可以从B端传输到A端。当使能引脚为低电平时,输入和输出端口之间的连接被切断,此时输入数据不会传输到输出端口,输出端口也不会对输入数据进行响应。 (4)真值表

在这里插入图片描述

5. D74HC138 介绍

D74HC138是一种八线三至八译码器,也被称为3-8译码器。它通常用于数字系统中的地址译码、片选信号生成等应用,用于将三位二进制地址转换为八个输出端口中的一个低电平输出。它具有快速响应、低功耗、高阻抗输入端口等特点。 管脚定义: 在这里插入图片描述

(1)功能 D74HC138具有八个输入端口(A0-A2),可以接受三位二进制地址输入。它有八个输出端口(Y0-Y7),每个输出端口对应一个使能输入端口(G1、G2A、G2B),输出对应的输出端口为低电平。D74HC138将三位输入地址转换为八个输出端口中的一个为低电平,其余输出端口为高电平。 (2)引脚 A0-A2:三位地址输入端口,接受二进制地址输入。Y0-Y7:八个输出端口,其中一个为低电平,其余为高电平。G1、G2A、G2B:使能输入端口,通过这些端口控制输出的使能状态。 (3)工作原理 当输入地址的二进制值与译码器的某个输出对应时,该输出端口将产生低电平输出,其余输出端口为高电平。通过使能端口G1、G2A、G2B来控制译码器的工作状态,使能信号为高电平时,译码器处于工作状态,可以根据输入地址产生对应的输出信号。 (4)真值表

在这里插入图片描述

6. 代码实现

下面代码实现的功能,每1秒在一个数码管上显示当前的数值,即第一个数码管显示0,第二个数码管显示1,以此类推 。

下面定义的gsmg_code中的含义,以0x3f为例,换算成二进制: 00111111,根据电路原理图: 在这里插入图片描述

可以看出赋值情况:

a 引脚 P00=1b 引脚 P01=1c 引脚 P02=1d 引脚 P03=1e 引脚 P04=1f 引脚 P05=1g 引脚 P06=0dp 引脚 P07=0 最终在数码管上就会显示数值 0。 #include "segment_display_utils.h" #include "types.h" #include "common_utils.h" #define SMG_A_DP_PORT P0 // 3-8译码器控制端口 sbit LSA = P2^2; sbit LSB = P2^3; sbit LSC = P2^4; u8 gsmg_code[17] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00}; void segment_display() { u8 i=0; for(i=0;i case 0: // 选择第一位数码管,即数码管1, 通过3-8译码器,转换为二进制码111,即7,即选中LED8 LSA = 1; LSB = 1; LSC = 1; break; case 1: LSA = 0; LSB = 1; LSC = 1; break; case 2: LSA = 1; LSB = 0; LSC = 1; break; case 3: LSA = 0; LSB = 0; LSC = 1; break; case 4: LSA = 1; LSB = 1; LSC = 0; break; case 5: LSA = 0; LSB = 1; LSC = 0; break; case 6: LSA = 1; LSB = 0; LSC = 0; break; case 7: LSA = 0; LSB = 0; LSC = 0; break; } SMG_A_DP_PORT = gsmg_code[i]; delay_ms(1000); } }

本文代码开源地址: https://gitee.com/xundh/learn51



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有