0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

74hc595驱动数码管程序

74hc595驱动数码管程序 74HC595是在单片机系统中常用的芯片之一,他的作用就是把串行的信号转为并行的信号,常用在各种数码管以及点阵屏的驱动芯片。

分享:

使用74HC595驱动数码管的单片机程序(基于Arduino)

下面是一个完整的Arduino程序,使用74HC595移位寄存器驱动4位共阴数码管。该程序实现了数码管的动态扫描显示功能。

// 74HC595引脚定义
const int dataPin = 2;   // DS (数据引脚) -> Arduino D2
const int latchPin = 3;  // ST_CP (锁存引脚) -> Arduino D3
const int clockPin = 4;  // SH_CP (时钟引脚) -> Arduino D4

// 数码管段码表 (共阴极, 0-9)
byte digitPattern[10] = {
  0x3F, // 0: ABCDEF
  0x06, // 1: BC
  0x5B, // 2: ABDEG
  0x4F, // 3: ABCDG
  0x66, // 4: BCFG
  0x6D, // 5: ACDFG
  0x7D, // 6: ACDEFG
  0x07, // 7: ABC
  0x7F, // 8: ABCDEFG
  0x6F  // 9: ABCDFG
};

// 数码管位选 (共阴极, 低电平选中)
byte digitSelect[4] = {
  0xF7, // 11110111 - 第4位 (Q7')
  0xFB, // 11111011 - 第3位 (Q6')
  0xFD, // 11111101 - 第2位 (Q5')
  0xFE  // 11111110 - 第1位 (Q4')
};

// 当前显示值
int number = 1234;

void setup() {
  // 设置引脚为输出
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  displayNumber(number);  // 显示数字
  number = (number + 1) % 10000; // 数字递增
  delay(100);             // 延迟控制速度
}

// 向74HC595发送数据
void shiftOutData(byte data) {
  digitalWrite(latchPin, LOW); // 锁存引脚置低
  shiftOut(dataPin, clockPin, MSBFIRST, data); // 发送数据
  digitalWrite(latchPin, HIGH); // 锁存引脚置高,更新输出
}

// 显示数字函数
void displayNumber(int num) {
  // 分解每一位数字
  int digits[4];
  digits[0] = num / 1000;          // 千位
  digits[1] = (num % 1000) / 100;  // 百位
  digits[2] = (num % 100) / 10;    // 十位
  digits[3] = num % 10;            // 个位

  // 循环扫描显示每一位
  for (int i = 0; i < 4; i++) {
    // 发送位选信号和段码
    byte dataOut = digitSelect[i];         // 选择当前位
    byte segment = digitPattern[digits[i]]; // 当前位数字段码

    // 通过位运算组合位选和段选信号
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, segment); // 发送段码
    shiftOut(dataPin, clockPin, MSBFIRST, dataOut); // 发送位选
    digitalWrite(latchPin, HIGH);

    // 延迟一段时间(控制亮度),同时实现动态扫描
    delay(5);

    // 短暂关闭显示以消除鬼影
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, 0x00);   // 清空段码
    shiftOut(dataPin, clockPin, MSBFIRST, 0xFF);   // 关闭所有位选
    digitalWrite(latchPin, HIGH);
  }
}

硬件连接说明

74HC595引脚连接:

  • DS (引脚14) -> Arduino D2 (数据输入)
  • SH_CP (引脚11) -> Arduino D4 (时钟)
  • ST_CP (引脚12) -> Arduino D3 (锁存)
  • VCC -> 5V
  • GND -> GND
  • Q0' - Q7' -> 数码管位选控制

数码管连接:

  • 共阴极数码管
  • 段码引脚(abcde fg dp)连接到74HC595的Q0-Q7
  • 公共阴极连接到位选控制信号(通过另一片74HC595)

程序说明

  1. 初始化

    • 设置74HC595控制引脚
    • 定义0-9的段码表(共阴极)
    • 定义位选控制信号
  2. 显示数字逻辑

    • shiftOutData()函数向74HC595发送数据
    • displayNumber()函数处理数字分解和动态扫描显示
    • 通过快速轮流显示每个数码管实现"静态"显示效果
    • 每5ms切换一个数码管
  3. 动态扫描优点

    • 节省引脚:只需3个控制引脚即可驱动多位数码管
    • 减少功耗:一次只点亮一个数码管
    • 避免交叉串扰:每次显示后短暂关闭所有数码管

扩展改进建议

  1. 添加小数点

    • 在段码表中增加带小数点的编码
    • 例如:digitPattern[10] = 0x80; // 小数点
  2. 亮度控制

    • 添加PWM控制显示亮度
    • analogWrite()控制位选通电流
  3. 双级联74HC595

    • 若驱动更多数码管,可级联多个74HC595
    • 修改数据发送为两个字节:shiftOut(dataPin, clockPin, MSBFIRST, segData); shiftOut(dataPin, clockPin, MSBFIRST, digData);

这个程序实现了基本的数码管驱动功能,可以通过调整显示值和时间延迟来满足不同应用需求。

74HC595是如何去驱动数码管

74HC595是什么?74HC595有何作用?74HC595的管脚有哪些功能?74HC595是如何去驱动数码管的?

尼克wo 2021-08-02 09:54:34

如何实现74HC595驱动数码管显示

​4、数码管显示数码管驱动电路采用2片74HC595芯片进行IO扩展,仅仅只需3Pin即可驱动需要16位引脚的数码管74HC595是一个8位串行输入、并行输出的位移缓存器。只有对74HC595

维生素B2 2021-12-07 07:29:59

如何利用stm32的两片74hc595芯片控制2个4位共阳极数码管

基于stm32的两片74hc595芯片控制2个4位共阳极数码管程序基于stm32的两片74hc595芯片控制2个4位共阳极数码管程序#include "stm32f10x.h"

小香干 2021-12-07 08:59:58

74HC595驱动LED点阵或数码管的正确用法是什么?

74HC595正确的工作原理是什么?74HC595驱动LED点阵或数码管的正确用法是什么?

湛蓝 2021-07-23 12:34:52

74HC595芯片的作用是什么

74HC595是在单片机系统中常用的芯片之一他的作用就是把串行的信号转为并行的信号,常用在各种数码管以及点阵屏的驱动芯片, 使用74HC595可以节约单片机mcu的io口资源,用3个io就可以控制8

尼克wo 2021-07-22 07:05:56

单片机控制74hc595驱动4个单数码管

单片机控制74hc595驱动4个单数码管静态显示演示效果:*材料 AT89C52 、74HC595采用Proteus仿真实例程序#include#define uchar unsigned

小麦地 2021-12-02 06:32:10

单片机和74HC595驱动芯片对数码管的控制设计

本设计使用了一个4位的数码管,为共阳型,为了节省单片机的IO口,使用了两片74HC595作为数码管驱动芯片,共占用3个IO口。

2019-03-22 15:04:21

74HC595驱动2位数码管的方法

74HC595驱动2位数码管驱动芯片:74HC595,74LS595,单片机:AT89C52,或者STC89C52都可以实例代码#include //#include#include "

werywer 2021-12-07 07:48:07

基于74HC595的串行数码管显示实验

今天学习小王子开发板基于74HC595串行数码管显示实验基于74HC595串行数码管显示实验1 认识74HC595串行数码2 了解锁存脉冲信号【RCLK】和时钟脉冲信号【SCLK】锁存脉冲信号输入

一瞅一个准 2022-03-01 06:34:45

STM32F4控制74HC595数码管的方法

使用STM32F407VET6,通过串行方式驱动74HC595控制的4位数码管使用了PD0(DIO)、PD1(RCLK)、PD2(SCLK)三个GPIO,将其与数码管模块对应连接程序中使用了延时函数

gvxiaot 2021-12-07 06:42:13

74HC595怎么使用

一、74HC595使用方法74HC595的数据端Q0--Q7:八位并行输出端,可以直接控制数码管的8个段。Q7:级联输出端。将它接下一个595的DS端。DS:串行数据输入端,级联的话接上一级的Q7

人走了 2021-12-07 06:46:57

74hc595引脚图及功能表

74HC59574hc164一样是在单片机系统中常用的芯片之一他的作用就是把串行的信号转为并行的信号,常用在各种数码管以及点阵屏的驱动芯片, 使用74HC595可以节约单片机mcu的io口资源,用

2021-07-01 10:10:29

移位寄存器74HC595芯片编程的相关资料分享

移位寄存器74HC595芯片编程1. 硬件介绍原理图:2块595芯片用以拓展IO口0#595芯片控制数码管段选和LCD1602数据传输脚1#595芯片控制数码管位选74HC595性能简介

zaichenxi 2021-12-07 07:40:10

2片HC595怎样驱动四位数码管

的esp8266开发板只有9个口能用,导致只能驱动两位数码管。还好动态扫描的机制是用到了。这回来学习第三个数码管,由两片72HC595位移寄存器芯片驱动的四位数码管。2. 位移寄存器芯片74HC595先了解一下这个74HC595芯片(收下简称595)是个什么东西又是如何工作的。2.1. 595原理图

linlin10 2022-02-17 07:07:05

74HC595芯片的工作原理和用法简单介绍

74HC59574hc164一样是在单片机系统中常用的芯片之一他的作用就是把串行的信号转为并行的信号,常用在各种数码管以及点阵屏的驱动芯片, 使用74HC595可以节约单片机mcu的io口资源,用

2023-11-01 12:27:22

如何利用CC2530和74HC595实现数码管动态显示数字的效果?

数码管的原理是什么?如何利用CC2530和74HC595实现数码管动态显示数字的效果?

tulin 2022-01-25 06:43:03

74hc595引脚图及功能

74HC595是在单片机系统中常用的芯片之一,他的作用就是把串行的信号转为并行的信号,常用在各种数码管以及点阵屏的驱动芯片, 使用74HC595可以节约单片机mcu的io口资源,用3个io就可以控制

2021-07-02 14:40:11

51单片机的超声波测距,并用74HC595驱动数码管显示超声波测距的距离

个人是小白,实在不会写,麻烦大佬们帮忙写一个程序,实现51单片机的超声波测距,并用74HC595驱动数码管显示超声波测距的距离!!!

jf_45451522 2023-11-23 15:19:03

如何使用单片机3个IO口+74HC595驱动驱动控制LCD1602液晶

最近一直在研究数码管驱动芯片 74HC595最近老乱玩74HC595,发现它只能输出,不能输入。查找大量资料,从某个网友制作的mylib.c(NES)中获得了一条指令:#define bin(_a,_b,_c,_d,_e,_f,_g,_h) ((_a)

gvjhvbc 2021-12-07 06:44:33

74HC595驱动LED点阵或数码管的正确用法 精选资料推荐

这几天有些时间想做LED点阵玩玩,所以需要学习74HC595芯片,上网找了几个例程和关于74HC595的几篇应用,照猫画虎实际操作一下,哪知根本不可行,教程都是错误的。于是自己潜心研究了 4天,现在

湛蓝 2021-07-22 08:49:59

74HC595是怎么提高芯片的驱动能力的呢

74HC595为什么带不动芯片的驱动能力?74HC595是怎么提高芯片的驱动能力的呢?

微风挽雨 2021-10-25 09:01:06

MCU驱动74hc595的方法

MCU驱动74hc595下图关于595数据手册上的介绍,使用比较简单两片级联控制扩展IO输出端口,可以用最少三个GPIO控制16路输出单片机驱动595/* 通讯控制信号 */#define

efwedfd 2022-02-08 06:04:52

请问单片机是如何驱动74hc595的?

单片机是如何驱动74hc595的?74hc595具体使用的步骤是怎样的?

lifei639156 2021-08-30 06:32:58

如何解决74HC595的干扰问题

目前用74HC595控制LED和数码管,在做脉冲群和打静电时,LED不规律闪烁,论坛说加低通滤波,包地,加层等等,对于2000V脉冲群,如果片子本身有此种弱点,一直觉得添加抗干扰方案不能彻底解决问题,此种方案到底是否可行?

zrl12123456 2018-12-03 09:25:25

如何利用两个74HC595D驱动芯片控制三位数码管显示

两个74HC595D驱动芯片控制三位数码管显示概述一.数码管引脚及使用概述1.1位数码管显示方式2.3位数码管3.3位数码管电路图二.74HC595D引脚及使用概述1. 74HC595引脚图2.两个

gXDhn 2021-12-07 07:28:29

树莓派GPIO入门08-使用74HC595芯片驱动数码管(二)

我们学习了如何利用74HC595这块显示驱动芯片来驱动1位8段数码管的方法。并逐一讲解了该芯片各引脚的功能。细心的童鞋可能注意到了,上次我们有一个Q7S引脚没有用到。这一篇我们就用

2019-04-02 14:42:29

74hc595单片机程序里DS=CY这个语句是什么意思?

和一个8位输出寄存器, 本例利用74HC595,通过串行输入数据来控制数码管的显示。 */ #include #include #define uchar unsigned char #define

tianyu5655 2023-10-08 06:34:44

如何利用两个74HC595实现三个引脚实现数据的传送

74HC595驱动8位段选数码管利用两个74HC595实现三个引脚实现数据的传送以下是595各引脚作用:SHCP =P0^1; // 移位寄存器的时钟输入,数据输入时钟线STCP =P0^2

wang21cj 2021-12-07 06:57:07

74HC595的工作原理是什么,怎么使用

本系列教程以AVR单片机为对象,介绍单片机的快速开发方法。参考教材:《单片机技术及应用项目教程》 栾秋平 电子工业出版社 2019.6 第1版本文介绍74HC595的使用方法。一、认知74HC595

tianyu5655 2021-11-29 08:27:35

74HC595是什么?有何功能

。QH’: 级联输出端。我将它接下一个 595 的 SI 端。SI: 串行数据输入端74HC595 是具有 8 位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器是分别的时钟。数据...

zmyecho 2021-07-29 08:24:26

加载更多