# TM1637 MicroPython Library
# Supports TM1637-based 4-digit 7-segment displays

import time
from machine import Pin

class TM1637:
    def __init__(self, clk, dio, brightness=7):
        self.clk = clk
        self.dio = dio
        self.clk.init(Pin.OUT)
        self.dio.init(Pin.OUT)
        self.brightness = brightness
        self.digits = [0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F]
        self.clear()

    def start(self):
        self.dio(1)
        self.clk(1)
        self.dio(0)
        self.clk(0)

    def stop(self):
        self.dio(0)
        self.clk(1)
        self.dio(1)

    def write_byte(self, data):
        for i in range(8):
            self.clk(0)
            self.dio(data & 1)
            data >>= 1
            self.clk(1)
        self.clk(0)
        self.dio(1)
        self.clk(1)

    def command(self, cmd):
        self.start()
        self.write_byte(cmd)
        self.stop()

    def show(self, data):
        self.command(0x40)  # Set auto increment mode
        self.start()
        self.write_byte(0xC0)  # Start from address 0
        for d in data:
            self.write_byte(d)
        self.stop()
        self.command(0x88 | self.brightness)  # Set brightness

    def number(self, num):
        """ Display a number (0-9999) on the 7-segment display """
        num = max(0, min(9999, num))  # Limit range
        self.show([self.digits[int(d)] for d in f"{num:04d}"])

    def clear(self):
        self.show([0, 0, 0, 0])
