86 lines
1.8 KiB
Python
86 lines
1.8 KiB
Python
from microbit import *
|
|
|
|
class LCD1602():
|
|
def __init__(self, lcd_i2c_addr):
|
|
self.buf = bytearray(1)
|
|
self.BK = 0x08
|
|
self.RS = 0x00
|
|
self.E = 0x04
|
|
self.setcmd(0x33)
|
|
sleep(5)
|
|
self.send(0x30)
|
|
sleep(5)
|
|
self.send(0x20)
|
|
sleep(5)
|
|
self.setcmd(0x28)
|
|
self.setcmd(0x0C)
|
|
self.setcmd(0x06)
|
|
self.setcmd(0x01)
|
|
self.version='1.0'
|
|
self.lcd_i2c_addr=lcd_i2c_addr
|
|
|
|
def setReg(self, dat):
|
|
self.buf[0] = dat
|
|
i2c.write(self.lcd_i2c_addr, self.buf)
|
|
sleep(1)
|
|
|
|
def send(self, dat):
|
|
d=dat&0xF0
|
|
d|=self.BK
|
|
d|=self.RS
|
|
self.setReg(d)
|
|
self.setReg(d|0x04)
|
|
self.setReg(d)
|
|
|
|
def setcmd(self, cmd):
|
|
self.RS=0
|
|
self.send(cmd)
|
|
self.send(cmd<<4)
|
|
|
|
def setdat(self, dat):
|
|
self.RS=1
|
|
self.send(dat)
|
|
self.send(dat<<4)
|
|
|
|
def clear(self):
|
|
self.setcmd(1)
|
|
|
|
def backlight(self, on):
|
|
if on:
|
|
self.BK=0x08
|
|
else:
|
|
self.BK=0
|
|
self.setdat(0)
|
|
|
|
def on(self):
|
|
self.setcmd(0x0C)
|
|
|
|
def off(self):
|
|
self.setcmd(0x08)
|
|
|
|
def char(self, ch, x=-1, y=0):
|
|
if x>=0:
|
|
a=0x80
|
|
if y>0:
|
|
a=0xC0
|
|
a+=x
|
|
self.setcmd(a)
|
|
self.setdat(ch)
|
|
|
|
def puts(self, s, x=0, y=0):
|
|
if len(s)>0:
|
|
self.char(ord(s[0]),x,y)
|
|
for i in range(1, len(s)):
|
|
self.char(ord(s[i]))
|
|
|
|
def mixly_puts(self, s, x=1, y=1):
|
|
s = str(s)
|
|
x = x - 1
|
|
y = y - 1
|
|
self.puts(self, s, x, y)
|
|
|
|
def mixly_puts_two_lines(self, line1, line2):
|
|
line1 = str(line1)
|
|
line2 = str(line2)
|
|
self.puts(self, line1, 0, 0)
|
|
self.puts(self, line2, 0, 1) |