实现

from time import sleep
import tm1637
import RPi.GPIO as GPIO


class TM1637Reversed(tm1637.TM1637):
    """
    继承自 TM1637,用于处理上下颠倒(旋转180度)安装的显示屏。
    这个类会自动翻转数字顺序并旋转每个字符。
    """

    def _rotate_byte(self, b):
        """将7段数码管的字节数据旋转180度"""
        # 原始映射: gfedcba -> 旋转后映射: gcfebad
        # 意味着: a->d, b->e, c->f, d->a, e->b, f->c, g->g
        # 小数点(dp)位保持不变
        return (b & 0b11000000) | ((b & 0b00111000) >> 3) | ((b & 0b00000111) << 3)

    def write(self, segments, pos=0):
        """
        重写基础的 write 方法。
        在显示前,翻转段(segments)的顺序,并旋转每一个段的字节数据。
        """
        # 翻转显示顺序 (例如 [d1,d2,d3,d4] -> [d4,d3,d2,d1])
        reversed_segments = segments[::-1]

        # 将每个字符旋转180度
        transformed_segments = [self._rotate_byte(s) for s in reversed_segments]

        # 调用父类的 write 方法发送转换后的数据
        super().write(transformed_segments, pos)

调用例子


if __name__ == "__main__":
    # 请根据你的树莓派接线修改这里的 GPIO 引脚号 (BCM模式)
    CLK_PIN = 23
    DIO_PIN = 24
    display = TM1637Reversed(clk=CLK_PIN, dio=DIO_PIN, brightness=7)

    print("启动 TM1637 反向显示屏测试...")

    try:
        display.scroll("i love you", delay=700)  # delay是滚动的毫秒间隔
        print("测试结束。")
        display.write([0, 0, 0, 0])

    except KeyboardInterrupt:
        print("程序被用户中断")
    finally:
        # 确保程序退出时清理GPIO资源
        GPIO.cleanup()
        print("GPIO 已清理")