import time from machine import Pin class LCD1602: def __init__(self, rs, en, d4, d5, d6, d7): self.rs = Pin(rs, Pin.OUT) self.en = Pin(en, Pin.OUT) self.data_pins = [ Pin(d4, Pin.OUT), Pin(d5, Pin.OUT), Pin(d6, Pin.OUT), Pin(d7, Pin.OUT) ] self._init_lcd() def _pulse(self): self.en.value(1) time.sleep_us(1) self.en.value(0) time.sleep_us(100) def _send(self, value, mode=0): self.rs.value(mode) for i in range(2): for j in range(4): self.data_pins[j].value((value >> (4 * (1 - i) + j)) & 0x01) self._pulse() time.sleep_ms(2) def _init_lcd(self): time.sleep_ms(20) self._send(0x33) # init self._send(0x32) # 4-bit mode self._send(0x28) # 2 lines, 5x7 matrix self._send(0x0C) # display on, cursor off self._send(0x06) # entry mode self.clear() def clear(self): self._send(0x01) time.sleep_ms(2) def putstr(self, string): for char in string: self._send(ord(char), 1) def move_to(self, col, row): addr = col + (0x40 if row else 0x00) self._send(0x80 | addr)