首页 动态 版块 商城 我的
 退出
游客  
等级:
金币:
经验值:

使用74HC595四位数码管显示模块 Python/C++编程树莓派与ESP32使用例程

  9333 
 0
 4
趣    
文章主图

一:数码管芯片介绍

此款数码管采用74HC595芯片能够将8位串行输入转化为并行输出(三态输出)的芯片,并且能够通过级联的方式进行拓展。芯片是由1个8bit移位寄存器、1个8bit存储寄存器、1个8bit的( 三态) 输出端口。(注:三态输出指的是 高电平(1)、低电平(0)、高阻态(Z)三种状态)当多个设备共用总线时,高阻态可用作来避免总线冲突,如如I2C、SPI总线中,从设备(Slave)在不通信时输出高阻抗。

ImageImage

DS:串行数据输入端口,与FPGA相连接,通过该端口将串行数据移入到移位寄存器当中,如果输入的数据超过8bit,如:输入了14bit数据,那么最前面输入的6bit数据将会通过Q7S输入到级联的另一块74HC595芯片中。


SHCP:移位寄存器时钟输入,上升沿时将串行数据移入到移位寄存器中。


STCP:存储寄存器时钟输入,上升沿时将移位寄存器中的数据移入到存储寄存器中。


OE(上划线):低电平有效,将存储寄存器中的数据通过Q0~Q7输出。


MR(上划线):低电平有效,复位端口。


静态数码管显示

        数码管对于初学者来说,可能最大的难题就是硬件的时序。此次以上数码管的相关知识,对模块实例化的意义、各个模块之间的关系有了认识,对testbench的实质有了更清晰的认知,也了解到了工程中时序的重要性。重点在于74HC595的STCP、SHCP以及串行输入数据(包括段选和位选)之间的时序逻辑。对于STCP主要注意锁存时机。SHCP则要把握对串行输入数据的采样时刻,注意建立时间和保持时间,RTL视图如下:

Image

仿真波形

Image

Image


6位8段数码管,需要6bit来位选,8bit来段选,也就是14bit的串行数据,通过74HC595芯片转换后并行输出到数码管。对sys_clk(50MHz)进行了4分频,得到了shcp(应该是74HC595最大工作频率达不到50MHz)。注意事项:shcp需要保证在ds的中间采样(满足建立时间和保持时间),stcp需要保证完成14个shcp后进行锁存输出。


二:树莓派例程

1.Pico接线图

以下我们以树莓派RP2040芯片的单片机为例来进行演示实际效果,首先将数码管与单片机进行连接(如下图)

树莓派3.3V——数码管VCC

树莓派GND——数码管GND

树莓派GP18——数码管SDI

树莓派GP17——数码管SCLK

树莓派GP16——数码管LOAO


Image


2.Python程序

代码功能介绍:分别测试一位至四位数字显示和滚动效果。运行代码后每次将GP0引脚接GND一次,就会触发四位数字滚动,然后随机显示一组四位数。(GP1引脚显示三位数,GP2引脚显示二位数,GP3引脚显示一位数)


四位数码管Python源代码  下载这个源代码上传至树莓派pico文件内,直接运行查看显示数据(如下图)


如果你还没有搭建好树莓派Python编程环境可参考这个帖子→:如何搭建Python编程环境


Image


运行代码后,引脚接一次GND可触发一组不同数字(GP0显示四位数,GP1显示三位数,GP2显示二位数,GP3显示一位数)

三:ESP32例程

1.ESP32接线图

以ESP32-S3为例,务必按下图标识接线,不可接反否则烧毁设备

Image

2.C++程序

74HC595   下载这个源代码直接用Arduino IDE编译上传程序查看反馈数码管显示效果(如下图)

 如果你还没有搭建好树莓派Python编程环境可参考这个帖子→:如何搭建Python编程环境


Image


显示效果:

 

3.代码解析

 本次使用ESP32-S3 控制 74HC595 数码管代码的核心逻辑可拆解为以下 3 个主要部分:

1. 硬件通信机制(hc595_shift 与 hc595_latch)

数据串行传输(shiftOut):调用 hc595_shift 时,ESP32-S3 在 SCLK 时钟脉冲的配合下,将 8 位的段码数据按最高位优先(MSBFIRST)一位一位地推入 74HC595 的移位寄存器中。


数据锁存更新(hc595_latch):给 RCLK 引脚一个先拉低、再拉高、再拉低的方波脉冲,将移位寄存器里的数据一次性锁存到输出寄存器,从而更新数码管的引脚输出。


2. 多位显示与级联逻辑(display_same_number)

该模块采用了 4 片 74HC595 级联(或内部译码)架构,无需 ESP32 进行微秒级的动态扫描。


依据 Python 参考代码中的输出顺序,函数连续向芯片推入 4 个相同的段码字节(分别对应:个位、十位、百位、千位)。

四个字节全部推完后,调用一次 hc595_latch(),即可让 4 位数码管同时稳定显示同一个数字。


3. 主程序控制流程(setup 与 loop)

初始化 (setup):将 SDI、SCLK、RCLK 设置为输出模式并拉低。首先向模块推入 4 个 seg_table[10](全暗段码 0xFF)进行清屏并延时 1 秒。


主循环 (loop):利用 for 循环使数字从 0 依次递增到 9。每次循环调用 display_same_number(digit) 更新显示(例如 0000、1111 ...),并借助 delay(1000) 让每个数字稳定保持 1 秒。



技术支持(对本页存在疑难问题可联系我们工程师)

联系人:张工
电话:0755-32914578
QQ:2251000002
微信:扫下方二维码添加,请备注来意

提供:人工智能,IOT物联网,工控数显,嵌入式软硬件开发,科创教育,产品定制,生产,方案解决...


作者签名:    楼主  2025-08-16 13:29:23
回复列表
Powered by YDXHUO _VERSION
© 2017-2026 跃动芯火版权
您的IP: 216.73.216.31 , 2026-08-12 19:02:22
Powered by YDXHUO _VERSION
© 2017-2026 跃动芯火版权
(4) 分享
分享

请保存二维码或复制链接进行分享

取消
免责声明
1、本站资源,均来自网络与个人作者,所有资源和文章仅限用于学习和研究目的 。
2、不得用于商业或非法用途,否则,一切责任由该用户承担 !

侵权删除请致信 E-Mail:ydxho@qq.com
已有0次打赏