from machine import Pin
from time import sleep
import sys
class LCD:
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_enable(self):
self.en.value(1)
sleep(0.001)
self.en.value(0)
sleep(0.001)
def send_nibble(self, data):
for i in range(4):
self.data_pins[i].value((data >> i) & 1)
self.pulse_enable()
def send_byte(self, data, mode=0):
self.rs.value(mode)
self.send_nibble(data >> 4)
self.send_nibble(data & 0x0F)
def init_lcd(self):
sleep(0.02)
for _ in range(3):
self.send_nibble(0x03)
sleep(0.005)
self.send_nibble(0x02)
self.send_byte(0x28) # 4-bit mode, 2 lines
self.send_byte(0x0C) # Display on, cursor off
self.send_byte(0x06) # Entry mode
self.clear()
def clear(self):
self.send_byte(0x01)
sleep(0.002)
def move_to(self, col, row):
pos = col + (0x80 if row == 0 else 0xC0)
self.send_byte(pos)
def putstr(self, text):
for char in text:
self.send_byte(ord(char), mode=1)
# Define LCD pins (match your Wokwi wiring)
lcd = LCD(rs=2, en=3, d4=4, d5=5, d6=6, d7=7)
# Get user input
text = input("Enter text: ")
lcd.print(text)
# Display text on LCD
lcd.clear()
lcd.putstr(text[:16]) # Print only first 16 characters