欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

玩转51单片机:教你如何实现数字管的静态显示,理解并运用锁存器技巧

最编程 2024-07-28 09:21:48
...

八段数码管显示原理

八段数码管由8颗LED组成,根据LED的接法,数码管可分为共阴极共阳极

共阴极是指每一颗LED的阴极都接在低电平0V上
共阳极是指每一颗LED的阳极都接在高电平5V上

对于共阴极数码管,单片机“控制”LED的阳极。想要谋颗LED亮,单片机就应该给对应LED的支路送高电平。

对于共阳极数码管,单片机“控制”LED的阴极。想要谋颗LED亮,单片机就应该给对应LED的支路送低电平。

锁存器的使用

为什么要用锁存器?你想,一个数码管就对应8个IO口。但是如果要用好多个数码管呢?单片机的引脚根本不够用。
先放上原理图(相同的标号代表是连在一起的,即电位相同。如红色圈中的D0电位都是相同的)

P27高电位,锁存器的“锁”打开,新数据传进去

P27低电位,锁存器的“锁”锁住,新数据传不进去,依然输出旧的数据


下面的芯片使用方法相同


位选,段选

比如要第三个数码管的a段亮起来
位选WE3=0,段选A=1,就能形成如图回路

如果位选WE3=1,WE4=0,段选A=1,就能形成如图回路


#include <reg52.h>

sbit DU = P2^6;  //数码管段选
sbit WE = P2^7;  //数码管位选

void delay(unsigned int z)
{
    unsigned int x, y;
    for(x = z; x > 0; x--)
        for(y = 114; y >0; y--);
}

//第一个数码管显示1
void main()
{
    P0 = 0xff;  //1111 1111不选择任何一个数码管
    WE = 1;  //打开位选
    P0 = 0XFE;  //1111 1110 即WE1 = 0
    WE = 0;  //锁住位选数据,即保持1111 1110
    //这样之后单片机P0数据的改变不会影响位选数据
    
    DU = 1;  //打开段选
    P0 = 0x06;  //这里虽然改变了P0,但不影响位选,因为位选关闭了。
    DU = 0;  //锁住段选数据
    delay(5);  //别切换太快了
}