51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
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)
|
|
|