You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

8x8共阳LED矩阵中间两行、最左列不亮问题排查(树莓派+74HC595)

问题原因排查与修复

这个故障绝大多数情况不是硬件损坏,优先排查代码逻辑错误,按以下顺序修复即可:

1 修复Python按位取反的符号位问题

你代码中列选通用~x输出低电平选通,但Python的整数是任意长度带符号类型,~x得到的是-x-1的负整数,不是8位单片机场景下的8位无符号取反结果,高位全为1,会导致级联的两片74HC595接收数据错位,固定行列选通异常。
修复方法:所有传给shiftOut的取反值都和0xFF做与运算,截断为8位长度,把两处shiftOut(dataPin,clockPin,MSBFIRST,~x)统一修改为:
shiftOut(dataPin,clockPin,MSBFIRST, (~x) & 0xFF)

2 修复shiftOut的MSBFIRST移位逻辑错误

你当前shiftOut函数里MSBFIRST的位判断写反了移位方向:原代码用val<<i左移取位,会导致输出的位顺序错乱,只有你用的笑脸这类完全对称的图案看起来"显示正常",非对称字符、固定行列会出现点亮异常。
直接把shiftOut函数替换为修正后的版本即可,同时统一增加8位截断逻辑,避免长整数、负数导致的输出错误:

def shiftOut(dPin,cPin,order,val):
    val = val & 0xFF # 强制截断为8位,消除符号位、长整数干扰
    for i in range(0,8):
        GPIO.output(cPin,GPIO.LOW)
        if(order == LSBFIRST):
            GPIO.output(dPin, (val >> i) & 0x01)
        elif(order == MSBFIRST):
            # 高位先发,依次读取bit7到bit0的电平
            GPIO.output(dPin, (val >> (7 - i)) & 0x01)
        GPIO.output(cPin,GPIO.HIGH)

3 代码修复后仍异常再排查硬件

如果改完代码问题还存在,再按以下顺序检查硬件连接:

  • 确认两片74HC595和树莓派共地,74HC595 VCC接稳定5V供电,禁止用树莓派3.3V给595和LED矩阵供电
  • 检查74HC595对应不亮行、列的输出引脚,以及和LED矩阵连接的杜邦线有没有虚接、内部断线
  • 检查LED矩阵对应不亮位置的行、列引脚有没有脱焊、氧化接触不良
  • 确认两片74HC595的级联引脚(第一片9脚Q7S接第二片14脚DS)连接牢固

内容的提问来源于stack exchange,提问作者Kumaran Panchakumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 01:45:35