问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

STC89C52 动态数码管详解

创作时间:
作者:
@小白创作中心

STC89C52 动态数码管详解

引用
CSDN
1.
https://blog.csdn.net/weixin_61125362/article/details/136128708

本文详细介绍了STC89C52单片机驱动数码管的原理和实现方法,包括数码管的基本组成、74HC245和74HC138芯片的使用、硬件设计以及静态和动态数码管的软件编程。适合有一定电子基础的读者学习。

前言

快速介绍数码管的组成细节与动态显示原理,与74HC245 和 74HC138 芯片的使用细节

一.多位数码管组成

1.1位选线和段选线

数码管是一种常用于显示数字和部分字母的电子设备,它通过控制不同的发光段来显示不同的字符。数码管的结构中包括若干个发光二极管,这些二极管被分成七个或八个段,分别标记为a、b、c、d、e、f、g,有时还会有一个额外的小数点段h。在这些段中,七个数据端口对应于七个段(对于七段数码管),而第八个数据端口对应于小数点(对于八段数码管)。

除了这些段对应的端口外,数码管还有一个重要的引脚,即公共端。公共端的作用是选择数码管中的哪一位被点亮。在多位一体的数码管中,每个数码管的公共端是独立的,而所有数码管的段选线是连接在一起的。通过控制公共端的电平,可以决定哪一位数码管显示信息,而段选线则决定了该位数码管显示的具体字符。

总的来说,公共端是数码管显示系统中的一个关键部分,它与数据端口一起,通过控制不同电平的输入,实现对数码管显示内容的精确控制。

1.2共阴级和共阳级

数码管共阴级和共阳级的主要区别在于其内部发光二极管的连接方式不同,这决定了它们在电路中的接线和应用方式有所不同

共阴数码管

  • 是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
  • 在应用时,应将公共极COM接到地线GND上。
  • 当某一字段发光二极管的阳极为高电平时,相应字段就点亮;当某一字段的阳极为低电平时,相应字段就不亮。

共阳数码管

  • 是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
  • 在应用时,应将公共极COM接到+5V。
  • 当某一字段发光二极管的阴极为低电平时,相应字段就点亮;当某一字段的阴极为高电平时,相应字段就不亮。

1.3数码管显示组成

STC89C52单片机具有4个并行输入/输出端口,即P0、P1、P2和P3
这里使用了P0端口,从低位P00到高位P07

1.4数码管表

共阴的数码管表取反为共阳数码管表
它们的数据正好是相互取反的值。比如 共阴数码管数字 0 段码:0x3f,其二进制是:0011 1111,取反后为:1100 0000, 转换成 16 进制即为 0XC0。其他段码依此类推。

①共阴数码管码表
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d,
0 1 2 3 4 5
0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c,
6 7 8 9 A B
0x39, 0x5e, 0x79, 0x71, 0x00,
C D E F 无显示

②共阳数码管码表
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92,
0 1 2 3 4 5
0x82, 0xF8, 0x80, 0x90, 0x88, 0x83,
6 7 8 9 A B
0xC6, 0xA1, 0x86, 0x8E, 0xFF,
C D E F 无显示

二.74HC245 和 74HC138 芯片

2.1 74HC245芯片

D74HC245 是一种三态输出、八路信号收发器,主要应用于大屏显示,以及其它的消费类电子产品中增加驱动,
当使用STC89C52的P0端口作为输出来驱动其他设备时,为了确保端口能够提供稳定的高电平或低电平,通常需要在端口上外接一个上拉电阻。这样可以将高阻态转换为稳定的高电平,这里没有上拉电阻,所以使用74HC245芯片驱动。

2.2 74HC138 芯片

74HC138是一款3线到8线的高速CMOS译码器芯片
该芯片具有以下特点:

  • 低功耗:作为CMOS器件,74HC138在电源管理方面表现优异,特别适合需要低功耗的应用。
  • 高速性能:74HC138能够快速响应输入信号的变化,这对于要求快速数据处理的系统来说非常重要。
  • 二进制地址输入:它接受3位二进制加权地址输入(A0, A1和A2),这意味着可以对八个不同的输入组合进行解码。
  • 低有效输出:74HC138提供8个互斥的低有效输出(Y0至Y7)。也就是说,在任何给定的时间,只有一个输出是低电平,而其他所有输出都是高电平状态。
  • 使能控制:它还拥有使能端,允许用户控制译码器的启用或禁用,这为电路设计提供了更大的灵活性。
    74HC138通常用于诸如微处理器地址解码、内存映射和I/O端口选择等应用中。它的这些特性使其在各种数字逻辑系统和电子工程项目中得到广泛应用。


三.硬件设计

3.1硬件资源

电路使用的是 2 个四位一体的共阴数码管组成,即 8 位数码管的段选数 据 a-dp 全部并联一起引出,每位数码管的位选即公共端引出。数码管的段选 a-dp 连接在 74HC245 驱动芯片输出口,由 P0 端口控制。由 P2.2、P2.3、P2.4 管脚控 制 74HC138 译码器输入从而控制数码管位选。

3.2硬件链接方式

验使用到硬件资源,这里链接的方式为:

四.软件代码

4.1静态数码管代码

P00到P07各占一位,一共8位:
假设表示数字0(共阴极数码管):二进制为:0011 1111;十六进制为:0x3f
所以需要这八个IO口进行输入

#include "reg52.h"
typedef unsigned int u16;	//对系统默认数据类型进行重定义
typedef unsigned char u8;
#define SMG_A_DP_PORT	P0	//使用宏定义数码管段码口
//共阴极数码管显示0~F的段码数据
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void main()
{	
    SMG_A_DP_PORT=gsmg_code[0];//将数组第1个数据赋值给数码管段选口
    while(1)
    {
       	
    }		
}  

4.2静态数码管结果

4.3动态数码管代码

注意:这里的 SMG_A_DP_PORT=0x00;//消延
如果不进行消延,之前所定义的段码数据会保留,虽然也可以显示出来,但是不清晰。所以在每次循环切换不同位选线路前需要消延。
//定义数码管位选信号控制脚

注意:
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
//74HC138译码器的3个信号控制脚,默认连接到P22,P23,P24
注意:这里的74HC245默认连接P00到P07,所以直接可以驱动

  
#include "reg52.h"
typedef unsigned int u16;//对系统默认数据类型进行重定义
typedef unsigned char u8;
#define SMG_A_DP_PORT P0 //使用宏定义数码管段码口
//定义数码管位选信号控制脚
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
//共阴极数码管显示 0~F 的段码数据
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay_10us(u16 ten_us)
{
    while(ten_us--);
}
void smg_display(void)
{
    u8 i=0;
    for(i=0;i<8;i++)
    {
        switch(i)//位选
        {
            case 0: LSC=1;LSB=1;LSA=1;break;
            case 1: LSC=1;LSB=1;LSA=0;break;
            case 2: LSC=1;LSB=0;LSA=1;break;
            case 3: LSC=1;LSB=0;LSA=0;break;
            case 4: LSC=0;LSB=1;LSA=1;break;
            case 5: LSC=0;LSB=1;LSA=0;break;
            case 6: LSC=0;LSB=0;LSA=1;break;
            case 7: LSC=0;LSB=0;LSA=0;break;
        }
        SMG_A_DP_PORT=gsmg_code[i];//传送段选数据
        delay_10us(100);//延时一段时间,等待显示稳定
        SMG_A_DP_PORT=0x00;//消延
    }
}
void main()
{
    while(1)
    {
    smg_display();
    }
}  

4.4动态数码管运行结果

以上就是本期补齐的内容,欢迎参考指正,如有不懂,欢迎评论或私信出下期!!!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号