Mercurial > micropython-ht16k33
changeset 0:5d326413d29a
Initial commit
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Thu, 05 May 2016 13:48:24 +0200 |
| parents | |
| children | b9541fcf5aa4 |
| files | ht16k33.py |
| diffstat | 1 files changed, 72 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ht16k33.py Thu May 05 13:48:24 2016 +0200 @@ -0,0 +1,72 @@ +HT16K33_BLINK_CMD = const(0x80) +HT16K33_BLINK_DISPLAYON = const(0x01) +HT16K33_CMD_BRIGHTNESS = const(0xE0) +HT16K33_OSCILATOR_ON = const(0x21) + + +class Matrix: + def __init__(self, i2c, address=0x70): + self.i2c = i2c + self.address = address + self.temp = bytearray(1) + self.buffer = bytearray(16) + self.fill(0) + self.write_cmd(HT16K33_OSCILATOR_ON) + self.blink_rate(0) + self.brightness(15) + + def write_cmd(self, byte): + self.temp[0] = byte + self.i2c.writeto(self.address, self.temp) + + def blink_rate(self, rate=None): + if rate is None: + return self._blink_rate + rate = rate & 0x02 + self._blink_rate = rate + self.write_cmd(HT16K33_BLINK_CMD | HT16K33_BLINK_DISPLAYON | rate << 1) + + def brightness(self, brightness): + if brightness is None: + return self._brightness + brightness = brightness & 0x0F + self._brightness = brightness + self.write_cmd(HT16K33_CMD_BRIGHTNESS | brightness) + + def show(self): + self.i2c.writeto_mem(self.address, 0x00, self.buffer) + + def fill(self, color): + fill = 0xff if color else 0x00 + for i in range(16): + self.buffer[i] = fill + + def pixel(self, x, y, color=None): + mask = 1 << x + if color is None: + return bool((self.buffer[y] | self.buffer[y + 1] << 8) & mask) + if color: + self.buffer[y * 2] |= mask & 0xff + self.buffer[y * 2 + 1] |= mask >> 8 + else: + self.buffer[y * 2] &= ~(mask & 0xff) + self.buffer[y * 2 + 1] &= ~(mask >> 8) + + +class Matrix8x16(Matrix): + def pixel(self, x, y, color=None): + if not 0 <= x <= 15: + return + if not 0 <= y <= 8: + return + return super().pixel(x, y, color) + + +class Matrix8x8(Matrix): + def pixel(self, x, y, color=None): + if not 0 <= x <= 8: + return + if not 0 <= y <= 8: + return + x = (x - 1) % 8 + return super().pixel(x, y, color)
