单片机
返回首页

51单片机开发(一)--74HC595驱动数码管

2025-09-30 来源:bilibili

(一)原理图

74HC595驱动4位数码管原理图

4位共阳极数码管内部原理图


(二)74HC595时序图

595时序图


(三)代码

3.1 config.h

#include 'REG52.H'

#include 'intrins.h'

#include 'delay.h'

#include 'stdbool.h'

//#include '74hc595.h'



/*********************************************【表情】*********************************/

// 类型定义

/******************************************************************************/

typedef unsigned char uint8;

typedef unsigned int  uint16;

typedef unsigned long uint32;


typedef signed char   int8;

typedef signed int    int16;

typedef signed long   int32;


/******************************************************************************/

// MODULE引脚配置

/******************************************************************************/

sbit SHCP = P4^2;

sbit STCP = P4^1;

sbit DS = P4^0;

sbit LED1 = P1^4;

sbit LED2 = P1^5;

sbit LED3 = P1^6;

sbit LED4 = P1^7;

3.2 驱动代码74hc595.c

#include '74hc595.h'

#include 'config.h'



/**

 * @description: HC595_SendByte

 * @param {unsigned int} byte

 * @return {*}

 */

void HC595_SendByte(unsigned int byte)

{

    uint8 i = 0;


    //循环8次,发送1个字节。

    //1.准备数据

    //2.发送数据

    //3.字节左移一个位

    for (i = 0; i < 8; i++)

    {

        DS = (byte & 0x80) ? 1 : 0;  // 准备数据,如果最高位是1,设置DS为1,否则为0

        SHCP = 0;

        SHCP = 1;                       //先等0,后等1,595接收到上升沿之后,会自动读DS口的数据

        byte <<= 1;                     //左移1位,继续准备数据

    }

}


/**

 * @description: LOCK STORAGE DATA

 * @return {*}

 */

void HC595_CS()

{

    STCP = 0;

    STCP = 1;       //先等0,后等1,595接收到上升沿之后,会自动将移位寄存器数据锁存到锁存器中并输出

}


/**

 * @description: SendOneByte And Lock the data

 * @param {unsigned int} byte

 * @return {*}

 */

void HC595_SendOneByte(unsigned int byte)

{

    // DS = 0;

    // SHCP = 0;

    // STCP = 0;

    uint8 i = 0;


    HC595_SendByte(byte);


    // STCP上升沿锁存

    HC595_CS();

}


/**

 * @description: SendMultiData

 * @return {*}

 */

void HC595_SendBytes(unsigned int dat[], unsigned int len)

{

    uint8 i;

    // 逐个发送数组中的每个字节

    for (i = 0; i < len; i++)

    {

        HC595_SendByte(dat[i]);

    }

    HC595_CS();

}

3.3驱动代码DigitalTube.c

#include '74hc595.h'

#include 'config.h'

#include 'DigitalTube.h'


uint8 Dig[] = {0xC0,  0xf9,  0xA4,  0xB0,  0x99,  0x92 , 0x82, 0xF8, 0x80, 0x90};


void Put_DigitalTube(uint8 SEG, uint8 DIG)

{

    unsigned int  dat[2];

    dat[0] = DIG;

    dat[1] = SEG;

    HC595_SendBytes(&dat, 2);

}


void Clear_DigitalTube()

{

    unsigned int dat[2] = {0, 0};

    HC595_SendBytes(&dat, 2); // 清除数码管显示

}


void Put_DigitalFourTube(uint8 DIG1, uint8 DIG2, uint8 DIG3, uint8 DIG4)

{

    Put_DigitalTube(0x01, Dig[DIG1]);//第二个数码管显示4

    Delayms(1);


    Put_DigitalTube(0x02, Dig[DIG2]);//第二个数码管显示4

    Delayms(1);


    Put_DigitalTube(0x04, Dig[DIG3]);

    Delayms(1);


    Put_DigitalTube(0x08, Dig[DIG4]);

    Delayms(1);

}

3.4应用代码main.c

#include 'config.h'

#include 'DigitalTube.h'


void main()

{

    // uint8 SEG = 0x01;

    //dat[2] = {SEG,DIG};

    while (1)

    {

        Put_DigitalFourTube(1,2,3,4);

    }

}

(四)实验结果

实验结果


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 1瓦线性调频增强器

  • 1瓦四级调频发射机

  • 500W MOS场效应管电源逆变器,12V转110V/220V

  • 红外开关

  • LM317过压保护

  • 0-30V/20A 大功率稳压电源(采用LM338)

    相关电子头条文章