From a06fc80aa7b04c0370b89cfaa3ebecea8b54e53d Mon Sep 17 00:00:00 2001 From: Matthew Grove Date: Wed, 15 May 2024 21:50:59 +0100 Subject: [PATCH] Screen driver from manufacturer --- screen.py | 199 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 199 insertions(+) create mode 100644 screen.py diff --git a/screen.py b/screen.py new file mode 100644 index 0000000..8c69798 --- /dev/null +++ b/screen.py @@ -0,0 +1,199 @@ +from machine import Pin,SPI,PWM +from font import Font +from utils import Utils +import framebuf + +BL = 13 +DC = 8 +RST = 12 +MOSI = 11 +SCK = 10 +CS = 9 + +# LCD driver +class LCD(framebuf.FrameBuffer): + def __init__(self): + pwm = PWM(Pin(BL)) + pwm.freq(1000) + pwm.duty_u16(32768) + + self.width = 240 + self.height = 240 + + self.cs = Pin(CS,Pin.OUT) + self.rst = Pin(RST,Pin.OUT) + + self.cs(1) + self.spi = SPI(1) + self.spi = SPI(1,1000_000) + self.spi = SPI(1,100000_000,polarity=0, phase=0,sck=Pin(SCK),mosi=Pin(MOSI),miso=None) + self.dc = Pin(DC,Pin.OUT) + self.dc(1) + self.buffer = bytearray(self.height * self.width * 2) + super().__init__(self.buffer, self.width, self.height, framebuf.RGB565) + self.init_display() + + self.red = 0x07E0 + self.green = 0x001f + self.blue = 0xf800 + self.white = 0xffff + self.black = 0x0000 + + self.keyA = { + "v": False, # value + "p": Pin(15,Pin.IN,Pin.PULL_UP) # pin - normally 1 but 0 if pressed + } + self.keyB = { + "v": False, # value + "p": Pin(17,Pin.IN,Pin.PULL_UP) + } + self.keyX = { + "v": False, # value + "p": Pin(19,Pin.IN,Pin.PULL_UP) + } + self.keyY = { + "v": False, # value + "p": Pin(21,Pin.IN,Pin.PULL_UP) + } + + self.up = { + "v": False, # value + "p": Pin(2,Pin.IN,Pin.PULL_UP) + } + self.down = { + "v": False, # value + "p": Pin(18,Pin.IN,Pin.PULL_UP) + } + self.left = { + "v": False, # value + "p": Pin(16,Pin.IN,Pin.PULL_UP) + } + self.right = { + "v": False, # value + "p": Pin(20,Pin.IN,Pin.PULL_UP) + } + self.ctrl = { + "v": False, # value + "p": Pin(3,Pin.IN,Pin.PULL_UP) + } + + def write_cmd(self, cmd): + self.cs(1) + self.dc(0) + self.cs(0) + self.spi.write(bytearray([cmd])) + self.cs(1) + + def write_data(self, buf): + self.cs(1) + self.dc(1) + self.cs(0) + self.spi.write(bytearray([buf])) + self.cs(1) + + def init_display(self): + """Initialize dispaly""" + self.rst(1) + self.rst(0) + self.rst(1) + + self.write_cmd(0x36) + self.write_data(0x70) + + self.write_cmd(0x3A) + self.write_data(0x05) + + self.write_cmd(0xB2) + self.write_data(0x0C) + self.write_data(0x0C) + self.write_data(0x00) + self.write_data(0x33) + self.write_data(0x33) + + self.write_cmd(0xB7) + self.write_data(0x35) + + self.write_cmd(0xBB) + self.write_data(0x19) + + self.write_cmd(0xC0) + self.write_data(0x2C) + + self.write_cmd(0xC2) + self.write_data(0x01) + + self.write_cmd(0xC3) + self.write_data(0x12) + + self.write_cmd(0xC4) + self.write_data(0x20) + + self.write_cmd(0xC6) + self.write_data(0x0F) + + self.write_cmd(0xD0) + self.write_data(0xA4) + self.write_data(0xA1) + + self.write_cmd(0xE0) + self.write_data(0xD0) + self.write_data(0x04) + self.write_data(0x0D) + self.write_data(0x11) + self.write_data(0x13) + self.write_data(0x2B) + self.write_data(0x3F) + self.write_data(0x54) + self.write_data(0x4C) + self.write_data(0x18) + self.write_data(0x0D) + self.write_data(0x0B) + self.write_data(0x1F) + self.write_data(0x23) + + self.write_cmd(0xE1) + self.write_data(0xD0) + self.write_data(0x04) + self.write_data(0x0C) + self.write_data(0x11) + self.write_data(0x13) + self.write_data(0x2C) + self.write_data(0x3F) + self.write_data(0x44) + self.write_data(0x51) + self.write_data(0x2F) + self.write_data(0x1F) + self.write_data(0x1F) + self.write_data(0x20) + self.write_data(0x23) + + self.write_cmd(0x21) + + self.write_cmd(0x11) + + self.write_cmd(0x29) + + def show(self): + self.write_cmd(0x2A) + self.write_data(0x00) + self.write_data(0x00) + self.write_data(0x00) + self.write_data(0xef) + + self.write_cmd(0x2B) + self.write_data(0x00) + self.write_data(0x00) + self.write_data(0x00) + self.write_data(0xEF) + + self.write_cmd(0x2C) + + self.cs(1) + self.dc(1) + self.cs(0) + self.spi.write(self.buffer) + self.cs(1) + # END OF DRIVER + + def clear(self, c): + self.fill(c)