from microbit import * class LCD1602: def __init__(self, lcd_i2c_addr): self.buf = bytearray(1) self.BK = 0x08 self.RS = 0x00 self.E = 0x04 self.setcmd(0x33) sleep(5) self.send(0x30) sleep(5) self.send(0x20) sleep(5) self.setcmd(0x28) self.setcmd(0x0C) self.setcmd(0x06) self.setcmd(0x01) self.version = "1.0" self.lcd_i2c_addr = lcd_i2c_addr def setReg(self, dat): self.buf[0] = dat i2c.write(self.lcd_i2c_addr, self.buf) sleep(1) def send(self, dat): d = dat & 0xF0 d |= self.BK d |= self.RS self.setReg(d) self.setReg(d | 0x04) self.setReg(d) def setcmd(self, cmd): self.RS = 0 self.send(cmd) self.send(cmd << 4) def setdat(self, dat): self.RS = 1 self.send(dat) self.send(dat << 4) def clear(self): self.setcmd(1) def backlight(self, on): if on: self.BK = 0x08 else: self.BK = 0 self.setdat(0) def on(self): self.setcmd(0x0C) def off(self): self.setcmd(0x08) def char(self, ch, x=-1, y=0): if x >= 0: a = 0x80 if y > 0: a = 0xC0 a += x self.setcmd(a) self.setdat(ch) def puts(self, s, x=0, y=0): if len(s) > 0: self.char(ord(s[0]), x, y) for i in range(1, len(s)): self.char(ord(s[i])) def mixly_puts(self, s, x=1, y=1): s = str(s) x = x - 1 y = y - 1 self.puts(self, s, x, y) def mixly_puts_two_lines(self, line1, line2): line1 = str(line1) line2 = str(line2) self.puts(self, line1, 0, 0) self.puts(self, line2, 0, 1)