Files
mixly3/boards/default/micropython/build/lib/tm1652.py
2024-07-19 10:16:00 +08:00

79 lines
2.1 KiB
Python

"""
TM1652-framebuf
Micropython library for the TM1652 Matrix8x5
=======================================================
#Preliminary composition 20230126
@dahanzimin From the Mixly Team
"""
import time
import uframebuf
from machine import Pin
from micropython import const
_TM1652_REG_ADD = const(0x08) #Display address command
_TM1652_REG_CMD = const(0x18) #Display control command
_TM1652_SET_CUR = const(0x04) #LED current setting 3/8
class TM1652(uframebuf.FrameBuffer_Ascall):
def __init__(self, pin, brightness=0.3, width=8, height=5):
self.pin=Pin(pin,Pin.OUT)
self.pin.value(1)
self._buffer = bytearray((width + 7) // 8 * height)
super().__init__(self._buffer, width, height, uframebuf.MONO_HMSB)
self.brightness = brightness
self._brightness = None
self.set_brightness(brightness)
time.sleep_ms(5)
self.fill(0)
self.show()
def _write_cmd(self, val):
'''Serial write command'''
falg=0
#Start bit
self.pin.value(1)
time.sleep_us(15)
self.pin.value(0)
time.sleep_us(30)
#Data bits
for i in range(8):
if (val >> i) & 0x01:
self.pin.value(1)
falg+=1
else:
self.pin.value(0)
falg+=0
time.sleep_us(44)
#Check bit
self.pin.value(1) if falg%2 == 0 else self.pin.value(0)
time.sleep_us(50)
#Stop bit
self.pin.value(1)
time.sleep_us(15)
def get_brightness(self):
return round(self.brightness,2)
def set_brightness(self, brightness):
if not 0.0 <= brightness <= 1.0:
raise ValueError("Brightness must be a decimal number in the range: 0.0~1.0")
self.brightness = brightness
xbright = round(15 * brightness)
xbright = ((xbright & 0xA) >>1) | ((xbright & 0x5) <<1)
xbright = ((xbright & 0xC) >>2) | ((xbright & 0x3) <<2)
self._brightness = (xbright << 4) | _TM1652_SET_CUR #高四位倒序|驱动电流
def show(self):
"""Refresh the display and show the changes."""
for _ in range(2):
self._write_cmd(_TM1652_REG_ADD)
for i in range(5):
self._write_cmd(self._buffer[i])
time.sleep_ms(3)
self._write_cmd(_TM1652_REG_CMD)
self._write_cmd(self._brightness)
time.sleep_ms(3)