3.8 51单片机-M74HC138译码器驱动8位数码管

简介: 3.8 51单片机-M74HC138译码器驱动8位数码管

3.8 采用38译码器驱动8位数码管

3.8.1 原理图

image.png

image.png

开发板连线:JP10(P0)接J12、J21跳线帽接左边、A.P22、B.P23、C.P24


3.8.2 74HC138译码器


M74HC138是一款高速COMS器件,引脚兼容低功耗肖基特TTL(LSTTL)系列。


TM74HC138有三个地址数据输入端(A0、A1、A2)和八个有效译码为低的输出端(Y0 - Y7);


TM74HC138有三个使能控制端(E1 、 E2 、E 3),当E1 、E2为低电平且E3为高电平时,八个译码输出端才有译码输出,否则八个译码输出端将全为高。


TM74HC138通常应用于单个三地址数据输入八译码输出的3-6译码器,也可根据使能信号特点用两个TM74HC138实现四地址数据输入和16 译码输出的 4-16 译码器, 应用中未使用的使能端要处在译码有效输出使能电平状态。

image.png

image.png

image.png

3.8.3 示例代码: 8位数码管静态轮流显示数字

下面代码使用38译码器控制数码管的位选,单片机的P0口控制段选,程序实现在每个数码管上轮流显示数字0~9。

示例代码:

#include <reg51.h>
//共阴极数码管编码(要显示的段就输出1)
//数字0~9
code u8 LED2_Coding[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//定义38译码器的引脚
sbit HC138_A0=P2^2; //A
sbit HC138_A1=P2^3; //B
sbit HC138_A2=P2^4; //C
#define LED P0  //定义LED引脚
/*
静态数码管显示,共阴极数码管
*/
void LED2_StaticDisplay(u8 number,u8 val)
{
    switch(number)   //位选,选择点亮的数码管,
    {
        case 0:
            HC138_A0=0;HC138_A1=0;HC138_A2=0; break;//显示第0位
        case 1:
            HC138_A0=1;HC138_A1=0;HC138_A2=0; break;//显示第1位
        case 2:
            HC138_A0=0;HC138_A1=1;HC138_A2=0; break;//显示第2位
        case 3:
            HC138_A0=1;HC138_A1=1;HC138_A2=0; break;//显示第3位
        case 4:
            HC138_A0=0;HC138_A1=0;HC138_A2=1; break;//显示第4位
        case 5:
            HC138_A0=1;HC138_A1=0;HC138_A2=1; break;//显示第5位
        case 6:
            HC138_A0=0;HC138_A1=1;HC138_A2=1; break;//显示第6位
        case 7:
            HC138_A0=1;HC138_A1=1;HC138_A2=1; break;//显示第7位 
    }
    LED=LED2_Coding[val]; //显示数字: 0~9
}
//动态数码管一共有8个数码管
//数码的控制端接P0端口
//数码管的片选端接138译码器
int main()
{
    u8 i,j;
    while(1)
    {
        for(i=0;i<8;i++)
        {
            for(j=0;j<10;j++)
            {
                LED2_StaticDisplay(i,j);
                DelayMs(500);
            }
        }
    }
}

3.8.4 示例代码: 显示指定的整数

下面代码使用38译码器控制数码管的位选,51单片机的P0口控制段选,程序实现在8位数码管上显示一个指定的整数。

#include <reg51.h>
//共阴极数码管编码(要显示的段就输出1)
//数字0~9
code u8 LED2_Coding[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//定义38译码器的引脚
sbit HC138_A0=P2^2; //A
sbit HC138_A1=P2^3; //B
sbit HC138_A2=P2^4; //C
#define LED P0  //定义LED引脚
//设置数码管显示指定的数字
void LED_DisplayNumber(unsigned long number)
{
    u16 i,j;
    u8 display_data[8];//存放当前数码管显示的数据
    //以下代码将number按十进制位从低到高依次提取并转为数码管显示字符
    display_data[0] = LED2_Coding[number/10000000%10];     
    display_data[1] = LED2_Coding[number/1000000%10];
    display_data[2] = LED2_Coding[number/100000%10];
    display_data[3] = LED2_Coding[number/10000%10];
    display_data[4] = LED2_Coding[number/1000%10];
    display_data[5] = LED2_Coding[number/100%10];
    display_data[6] = LED2_Coding[number/10%10];
    display_data[7] = LED2_Coding[number/1%10];
    for(i=0;i<8;i++)
    {
        switch(i)    //位选,选择点亮的数码管,
        {
            case 0:
                HC138_A0=0;HC138_A1=0;HC138_A2=0; break;//显示第0位
            case 1:
                HC138_A0=1;HC138_A1=0;HC138_A2=0; break;//显示第1位
            case 2:
                HC138_A0=0;HC138_A1=1;HC138_A2=0; break;//显示第2位
            case 3:
                HC138_A0=1;HC138_A1=1;HC138_A2=0; break;//显示第3位
            case 4:
                HC138_A0=0;HC138_A1=0;HC138_A2=1; break;//显示第4位
            case 5:
                HC138_A0=1;HC138_A1=0;HC138_A2=1; break;//显示第5位
            case 6:
                HC138_A0=0;HC138_A1=1;HC138_A2=1; break;//显示第6位
            case 7:
                HC138_A0=1;HC138_A1=1;HC138_A2=1; break;//显示第7位 
        }
        LED=display_data[i];     //控制数码管的显示数据值
        j = 100;                 //扫描间隔时间设定
        while(j--){}    
        LED=0x00;             //消隐,所有数码管都不显示
    }
}
//动态数码管一共有8个数码管
//数码的控制端接P0端口
//数码管的片选端接138译码器
int main()
{
    while(1)
    {
       LED_DisplayNumber(4579);
    }
}

image.png

目录
相关文章
|
存储 芯片
SGM58031与单片机驱动实现
SGM58031与单片机驱动实现
373 0
|
6月前
|
存储
【期末不挂科-单片机考前速过系列P3】(第三章:13题MOV&MOVX&MOVC&数码管速过)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P3】(第三章:13题MOV&MOVX&MOVC&数码管速过)经典例题盘点(带图解析)
|
6月前
5-1 51单片机数码管
5-1 51单片机数码管
23 1
【51单片机】自定义动态数码管显示(设计思路&原理&代码演示)
【51单片机】自定义动态数码管显示(设计思路&原理&代码演示)
【51单片机】自定义静态数码管显示(设计思路&代码演示)
【51单片机】自定义静态数码管显示(设计思路&代码演示)
【51单片机】静态数码管显示(设计思路&原理&代码演示)
【51单片机】静态数码管显示(设计思路&原理&代码演示)
|
6月前
|
芯片 数据格式
【51单片机】要实现动静态数码管,你首先需要知道这些【数码管项目前置知识】
【51单片机】要实现动静态数码管,你首先需要知道这些【数码管项目前置知识】
|
6月前
|
芯片 数据格式
【51单片机】实现一个动静态数码管显示项目(超全详解&代码&图示)(5)
【51单片机】实现一个动静态数码管显示项目(超全详解&代码&图示)(5)
|
6月前
|
C语言
静态数码管显示+动态数码管显示——“51单片机”
静态数码管显示+动态数码管显示——“51单片机”
单片机-蓝桥杯 用光敏电阻测量光照强度并显示在数码管上。
单片机-蓝桥杯 用光敏电阻测量光照强度并显示在数码管上。
223 1