51单片机功能模块学习笔记 — 数码管

本文介绍了共阳和共阴数码管的基本连接方式及其显示原理,并通过实例展示了如何使用锁存器实现多位数码管的控制。同时提供了具体的实验程序代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 共阳数码管的基本连接方式

这里写图片描述

如上图所示,当数码管的公共段连接到电源时,就被称为共阳数码管。那么,相应的共阴数码管就是公共段连接到地的一类数码管。

2.数码管的显示原理

根据数码管的显示原理:可分为共阴数码管和共阳数码管这里写图片描述

如上图所示,左图所有的二极管的公共段都被连接到地,如果我们想要在a-dp上有所显示,就应该在对应端口送“1”。同理,如果我们想要使得共阳数码管上显示某些特定的字符,就应该在对应位送“0”。

根据这个原理,我们可以算出0-F对应的共阴数码管和共阳数码管显示的十六进制字符。我们可以将所有字符放在一个数组里面,以便查询。

下列是共阴极数码管和共阳数码管段码的常用码表总结:

unsigned char code distab[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71} //共阴数码管段选码表,无小数点

unsigned char code distab[16]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1} //共阴数码管段选码表,有小数点

unsigned char code distab[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}  //共阳数码管段选码表,无小数点

unsigned char code distab[16]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e} //共阳数码管段选码表,有小数点

3.共阳数码管实验程序


/*利用共阳极数码管显示0-F*/

#define SEGPORT P0      

unsigned char code TableCA[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
                                0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};  //共阳极数码管码表


/*** 共阳数码管显示0-F  ***/
void ShowSegCA()
{
    unsigned char i;

    //查表显示
    for(i = 0;i < 16;i++)
    {
        SEGPORT = TableCA[i];
        delay_ms(100);
    }

}

4.八位共阴数码管模块连接方式

这里写图片描述

如上图所示,两个74HC573锁存器分别连接到数码管的段码和位码端,分别进行位琐存控制和段琐存控制。那么,锁存器到底是干什么的呢?

4.1锁存器的电路原理图
这里写图片描述

锁存器百度百科:

锁存器(Latch)是一种对脉冲电平敏感的存储单元电路,它们可以在特定输入脉冲电平作用下改变状态。锁存,就是把信号暂存以维持某种电平状态。锁存器的最主要作用是缓存,其次完成高速的控制器与慢速的外设的不同步问题,再其次是解决驱动的问题,最后是解决一个 I/O 口既能输出也能输入的问题。

以下是我个人对于锁存器的理解:

    锁存器就像是一道门,平时的时候门并不打开。当锁存器的琐存使能有效时,这道们才打开。就举上面八位共阴极数码管的例子来说,我现在想要实现在第一位数码管上显示数字“0”。
    那我应该如何利用锁存器来工作呢?第一步,先选中第一个数码管。
    首先,将选中第一位数码管的数据发送到位锁存器,这时候位琐存的门还没有开;接着,使能位琐存,门开了,数据送到数码管,根据数据选中第一位数码管;最后,关闭门。(为什么一定要关闭门呢?因为段琐存的数据输入端口和位琐存数据的数据输入端口都是连接到同一个P0的。我们必须要让数码管区分到底是发送的是位选数据还是段选数据,所以一个位数据发送完,我们必须把门再关上。)第二部,发送段选信号。即将“0”的十六进制数据发送到段锁存器,段锁存器默认情况下数据是不会变化的。接下来的操作过程和位锁存器一样。完成这两步,即可以使得第一位数码管上显示数字“0”。

5.八位共阴极数码管实验程序

/*使得八位共阴极数码管上依次显示数字0-7 */

#include "bsp.h"

#define SEGPORT P0      
sbit Wei_LATCH = P2^0;   //位琐存信号
sbit Duan_LATCH = P2^1;  //段琐存信号


unsigned char code TableCA[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
                                0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};  //共阳极数码管码表
unsigned char code TableCC[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
                                0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  //共阴极数码管码表
unsigned char code TableSel[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};  //位选码表

/*** 共阳数码管显示0-F  ***/
void ShowSegCA()
{
    unsigned char i;

    //查表显示
    for(i = 0;i < 16;i++)
    {
        SEGPORT = TableCA[i];
        delay_ms(100);
    }

}

/*** 八位共阴极数码管分别显示0-8  ***/
void ShowSegCC()
{
    unsigned char i;

    for(i = 0;i < 8;i++)
    {
        SEGPORT = TableSel[i];
        Wei_LATCH = 1;
        Wei_LATCH = 0;

        SEGPORT = TableCC[i];
        Duan_LATCH = 1;
        Duan_LATCH = 0;

        delay_ms(200);
    }
}

Ps:若是博客中有问题,欢迎各位提出,大家一起学习,一起进步!
(●’◡’●)

<think>嗯,用户想了解数码管的原理图。首先,我需要回忆一下数码管的基本结构工作原理。数码管通常有共阴极共阳极两种类型,这可能需要在原理图中体现出来。 数码管由多个LED组成,通常是7段,加上小数点就是8段。每个段对应一个LED,所以原理图里应该画出这些LED的连方式。如果是共阴极,那么所有阴极连在一起地,阳极分别通过限流电阻连到控制信号。共阳极则相反,阳极VCC,阴极分别控制。 下来,用户可能需要知道如何驱动数码管。比如,使用单片机或移器来控制各个段。限流电阻的计算也很重要,防止电流过大损坏LED。另外,动态扫描显示的方法,尤其是多数码管的情况,需要分时点亮不同的,这可能在原理图里有多个控制线。 还要考虑原理图中元件的符号是否正确,比如LED的方向,电阻的置,以及共阴或共阳的连点。可能还需要标注引脚对应的段(a到g,dp),方便用户理解线。 用户可能对实际应用中的电路设计有疑问,比如如何减少引脚使用,是否需要译码器,或者如何编程控制。这些在原理图中可能通过移器或IO扩展器来体现。 需要确保解释清晰,分步骤说明,从结构到驱动方法,再到实际连。同时,注意使用正确的术语,比如“段选”、“选”、“动态扫描”等,并用例子说明。最后,可能提供一个简化的原理图示例,帮助用户直观理解。</think>数码管是一种常见的显示器件,其原理图设计基于LED分段组合控制。以下分步介绍其工作原理典型电路设计: 一、基本结构 1. 单个数码管由7个条形LED(a~g段)1个圆形LED(小数点dp)组成 $$ \text{排列形状:} \quad \begin{array}{ccc} & \text{a} & \\ \text{f} & & \text{b} \\ & \text{g} & \\ \text{e} & & \text{c} \\ & \text{d} & \\ \end{array} $$ 2. 按公共端类型分为: - 共阴极:所有LED阴极连至COM端,需阳极驱动 - 共阳极:所有LED阳极连至COM端,需阴极驱动 二、原理图要素 1. LED阵列连: - 共阴极示例: ``` a ---R--- VCC b ---R--- VCC ...(其他段同理) COM ---GND ``` 2. 驱动电路: - 必须串联限流电阻$R = \frac{V_{CC}-V_{LED}}{I_{LED}}$ - 典型值:$V_{LED}=1.8V$, $I_{LED}=5-10mA$,当$V_{CC}=5V$时,$R≈330Ω$ 3. 多数码管(4示例): - 采用动态扫描方式 - 段线并联,选线独立控制 - 电路需包含: - 选驱动电路(三极管或驱动IC) - 段码器(如74HC595) 三、典型应用电路(共阴极) ``` +5V | a b c d e f g dp | | | | | | | | R1 R2 R3 R4 R5 R6 R7 R8 (330Ω each) | | | | | | | | P0-P7 ---->| | | | | | | | | | | | | | | | V V V V V V V V +-----------------------+ | 7-SEGMENT | | COMMON CATHODE | +-----------------------+ | | | | | | 选驱动电路(如ULN2003) | | | | | | P8-P11(控制4数码管的COM端) ``` 四、控制逻辑 1. 段码表(以显示数字"0"为例): - 需要点亮的段:a,b,c,d,e,f - 对应二进制编码(假设高到低为a~dp):$11111100_2$(0xFC) 2. 动态扫描流程: - 依次选中每个 - 输出对应段码 - 刷新频率>60Hz避免闪烁 关键设计要点: 1. 电流计算:总电流=段数×单段电流×同时点亮数 2. 驱动能力:确保MCU端口或驱动IC能承受总电流 3. 消隐处理:切换时需短暂关闭显示避免鬼影 该原理图展示了通过微控制器GPIO控制多数码管的标准实现方式,实际应用中可根据需求选择直驱动、译码器驱动或专用驱动芯片方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值