数码管

数码管显示的原理就是依靠点亮发光二极管来发光的。
数码管内部电路图如下

数码管一共8段,即内部一共8个发光二极管,显示一个数字需要7个小段,外加一个点。不过生产商为了
商为了封装统一,单位数码管都封装10个引脚,其中第3和第8引脚连在一起。公共端又可分为共阴极和共
阳极
对于共阴极,即所有数码管的阴极连在一起,而阳极是相互独立的,通常在设计电路时一般把阴极接地。
当我们给数码管的任一个阳极加一个高电平时,相对应的电路就会通,发光二级管就被点亮了
如果要显示一个8字,并且把右下角的小数点也点亮的话,可以给8个阳极全部送高电平,如果想显示出一
个0字,可以除了给第“g,dp”这两位送低电平外,其余引脚全送高电平。同理,要显示几,就给相对应的
发光二极管送高电平,高电平有效
共阳极数码管内部8个发光二级管的阳极全部连接在一起,电路连接时,公共端接高电平,我们要点亮的那个
发光二级管要给阴极送低电平,此时显示数字的编码与共阴极编码是相反的关系,数码管内部发光二极管点
亮时也需要5mA以上的电流,而电流不可过大,否则会烧毁发光二级管。由于单片机的I/O口送不出如此大的
电流,所以数码管与单片机连接时需要加驱动电路,可以用上拉电阻的方法或使用专门的数码管驱动芯片,
TX-1C实验板上使用的是74HC573锁存器,其输出电流较大,电路接口简单
负责显示什么数字的段线是连接在一起的,独立的公共端可以可以控制多位一体中的哪位数码管点亮,而连接
在一起的段线可以控制这个能点亮数码管什么数字,公共端叫做“位选线”,连接在一起的段线叫做“段选
线”,通过单片机及外部驱动电路就可以控制任意数码管显示任意数字
一般单位数码管由10个引脚,二位数码管也是10个引脚,四位数码管12个引脚。
数码管的显示分为静态显示和动态显示
静态显示:当多位数码管用于某一系统时,它们的“位选”是可独立控制的,而“段选”是连接在一起的,
我们可以通过位选信号控制那几个数码管亮,而在同一时刻,位选选通的所有数码管上显示的数字始终都是
一样的,因为它们的段选是连接在一起的,所以所有数码管的段选信号都是相同的,即显示的数字是一样的
数码管与单片机的练接图如下:

我的板子上的图:


原理图中标号相同的点在实际电路中时物理上相连的。为了使原理图看上去简洁整齐,我们在绘制原理图时
通常都是用相同的标号表示电气连接。
上面两图都是为共阴极连接
数码管中WE1,WE2,WE3,WE4,WE5,WE6都为位选端,a,b,c,d,e,f,g,h都为段选端,且一共6个
数码管的段选端与位选端又都与锁存器相连,并且锁存器的输入端D0,D1,D2,D3,D4,D5,D6,D7与单
片机的P0.0~P0.7口相连
P0口(39-32脚)双向8位三态I/O口,每个口可独立控制。51单片机P0内部没有上拉电阻,为高阻状态,所以不
能正常的输出高低电平,因此此I/O口在使用时要外接上拉电阻,一般选择10K的上拉电阻
锁存器:

当锁存使能为高时,这些器件的锁存对于数据是透明的(即输出同步)。当锁存使能为低时,符合建立时间和保
持时间的数据会被锁存
由功能表知,当输出使能(第1引脚)为低电平,锁存使能(第11管脚)为高电平时,输出端随着输入端的电平的
变化而变化,而当锁存使能为低电平时,输出端不随输入端的改变而改变。由此达到了暂时存储的目的
为了使数码管正常工作,输出使能端要始终为低电平,所以第一引脚接地,而通过第11引脚的高低电平来对数码管
中哪一个点亮,点亮什么数字进行控制
我的这个板子中有两个锁存器,对6个数码管进行控制
两个锁存器的第一引脚始终接地,输入端DN都与单片机的P0口相连接
DULA和WELA分别接两个锁存器的锁存端,即第11引脚,并且WELA和DULA与单片机的P2.7口和P2.6口连接
共阴极数码管编码表(段控制)

unsigned char code table[]={
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71
        };
位控制:
11111111(ff)关闭所有数码管
11111110  (fe)   打开第一个数码管
11111101(fd)打开第二个数码管
同理打开那个数码管,只需要将其位选段置零,即变为低电平即可-------低电平有效
下面通过程序更进一步的熟悉数码管
#include<reg52.h>               //52系列头文件
sbit dula=P2^6;               // 声明段锁存器的锁存端
sbit wela=P2^7;           // 声明段位存器的锁存端
                           
void main(){
    wela=1;               //打开位锁存器
    P0=0xFE;               // 送入数据
    wela=0;               //关闭位锁存器

    dula=1;                //打开段锁存器
    P0=0xFF;                // 送入数据
    dula=0;                //关闭段锁存器


    while(1);                //使数码管始终工作
    
}
由此,第一个数码管中所有的发光二级管就开始工作了(即显示一个8字和一个点)

原文地址:https://www.cnblogs.com/tuteng/p/2943315.html