from machine import Pin
from utime import sleep_ms
class LCD1602:
def __init__(self, rs, en, d4, d5, d6, d7):
self.rs = rs
self.en = en
self.d4 = d4
self.d5 = d5
self.d6 = d6
self.d7 = d7
for pin in (self.rs, self.en, self.d4, self.d5, self.d6, self.d7):
pin.init(pin.OUT)
self._send(0x33, False)
self._send(0x32, False)
self._send(0x28, False)
self._send(0x0C, False)
self._send(0x06, False)
self.clear()
def clear(self):
self._send(0x01, False)
sleep_ms(2)
def _send(self, data, is_data):
self.rs.value(is_data)
for nibble in (data >> 4, data & 0x0F):
self.d4.value((nibble >> 0) & 1)
self.d5.value((nibble >> 1) & 1)
self.d6.value((nibble >> 2) & 1)
self.d7.value((nibble >> 3) & 1)
self.en.value(1)
sleep_ms(1)
self.en.value(0)
sleep_ms(1)
def set_cursor(self, col, row):
addr = col + (0x40 if row else 0x00)
self._send(0x80 | addr, False)
def print(self, text):
for char in text:
self._send(ord(char), True)