实现
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 已清理")