from machine import Pin
from time import sleep
# Configuração dos pinos
RS = Pin(0, Pin.OUT)
E = Pin(1, Pin.OUT)
D4 = Pin(2, Pin.OUT)
D5 = Pin(3, Pin.OUT)
D6 = Pin(4, Pin.OUT)
D7 = Pin(5, Pin.OUT)
def pulse_enable():
E.value(0)
sleep(0.001)
E.value(1)
sleep(0.001)
E.value(0)
sleep(0.001)
def send_nibble(data):
D4.value((data >> 0) & 1)
D5.value((data >> 1) & 1)
D6.value((data >> 2) & 1)
D7.value((data >> 3) & 1)
pulse_enable()
def send_byte(data, is_data):
RS.value(is_data)
send_nibble(data >> 4) # parte alta
send_nibble(data & 0x0F) # parte baixa
sleep(0.001)
def lcd_init():
sleep(0.02) # aguarda >15ms após alimentação
send_nibble(0x03)
sleep(0.005)
send_nibble(0x03)
sleep(0.001)
send_nibble(0x03)
send_nibble(0x02) # modo 4 bits
send_byte(0x28, 0) # 2 linhas, 5x8 font
send_byte(0x0C, 0) # display ON, cursor OFF
send_byte(0x06, 0) # incremento automático
send_byte(0x01, 0) # limpa display
sleep(0.002)
def lcd_write(msg):
for char in msg:
send_byte(ord(char), 1)
# Inicializa LCD e escreve mensagem
lcd_init()
lcd_write("Hello World")