194 lines
4.6 KiB
Python
194 lines
4.6 KiB
Python
from machine import Pin,SPI,PWM
|
|
from framebuf import FrameBuffer, RGB565
|
|
|
|
BL = 13
|
|
DC = 8
|
|
RST = 12
|
|
MOSI = 11
|
|
SCK = 10
|
|
CS = 9
|
|
DUTY = 32768
|
|
|
|
# LCD driver
|
|
class LCD(FrameBuffer):
|
|
def __init__(self):
|
|
pwm = PWM(Pin(BL))
|
|
pwm.freq(1000)
|
|
pwm.duty_u16(DUTY)
|
|
|
|
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, RGB565)
|
|
self.init_display()
|
|
|
|
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
|
|
|
|
@staticmethod
|
|
def setDuty(v: int = DUTY):
|
|
pwm = PWM(Pin(BL))
|
|
pwm.duty_u16(v) |