123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- # https://www.waveshare.com/wiki/Pico-LCD-1.3
-
- from machine import Pin, SPI, PWM
- import framebuf
- import time
- import os
-
- class KeyCheck:
- def __init__(self, new, old):
- self.new = new
- self.old = old
-
- def once(self, k):
- return self.new[k] and not self.old[k]
-
- class LCD(framebuf.FrameBuffer):
- def __init__(self):
- self.width = 240
- self.height = 240
-
- self.cs = Pin(9, Pin.OUT)
- self.rst = Pin(12, Pin.OUT)
-
- self.cs(1)
-
- #self.spi = SPI(1)
- #self.spi = SPI(1, 1_000_000)
- self.spi = SPI(1, 100_000_000, polarity=0, phase=0, sck=Pin(10), mosi=Pin(11), miso=None)
-
- self.dc = Pin(8, 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.fill(self.black)
- self.show()
-
- self.pwm = PWM(Pin(13))
- self.pwm.freq(1000)
- self.brightness(0.0)
-
- self.keyA = Pin(15,Pin.IN,Pin.PULL_UP)
- self.keyB = Pin(17,Pin.IN,Pin.PULL_UP)
- self.keyX = Pin(19 ,Pin.IN,Pin.PULL_UP)
- self.keyY= Pin(21 ,Pin.IN,Pin.PULL_UP)
-
- self.up = Pin(2,Pin.IN,Pin.PULL_UP)
- self.down = Pin(18,Pin.IN,Pin.PULL_UP)
- self.left = Pin(16,Pin.IN,Pin.PULL_UP)
- self.right = Pin(20,Pin.IN,Pin.PULL_UP)
- self.ctrl = Pin(3,Pin.IN,Pin.PULL_UP)
-
- self.keys_old = {
- "a": False,
- "b": False,
- "x": False,
- "y": False,
- "up": False,
- "down": False,
- "left": False,
- "right": False,
- "enter": False,
- }
-
- def buttons(self):
- keys = {
- "a": self.keyA.value() == 0,
- "b": self.keyB.value() == 0,
- "x": self.keyX.value() == 0,
- "y": self.keyY.value() == 0,
- "up": self.up.value() == 0,
- "down": self.down.value() == 0,
- "left": self.left.value() == 0,
- "right": self.right.value() == 0,
- "enter": self.ctrl.value() == 0,
- }
- kc = KeyCheck(keys, self.keys_old)
- self.keys_old = keys.copy()
- return kc
-
- def brightness(self, v):
- self.pwm.duty_u16(int(v * 65535))
-
- 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):
- 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)
-
- if __name__ == '__main__':
- lcd = LCD()
- lcd.brightness(1.0)
-
- try:
- while True:
- lcd.fill(lcd.white)
-
- if lcd.keyA.value() == 0:
- lcd.fill_rect(208,15,30,30,lcd.red)
- else:
- lcd.fill_rect(208,15,30,30,lcd.white)
- lcd.rect(208,15,30,30,lcd.red)
-
- if lcd.keyB.value() == 0:
- lcd.fill_rect(208,75,30,30,lcd.red)
- else:
- lcd.fill_rect(208,75,30,30,lcd.white)
- lcd.rect(208,75,30,30,lcd.red)
-
- if lcd.keyX.value() == 0:
- lcd.fill_rect(208,135,30,30,lcd.red)
- else:
- lcd.fill_rect(208,135,30,30,lcd.white)
- lcd.rect(208,135,30,30,lcd.red)
-
- if lcd.keyY.value() == 0:
- lcd.fill_rect(208,195,30,30,lcd.red)
- else:
- lcd.fill_rect(208,195,30,30,lcd.white)
- lcd.rect(208,195,30,30,lcd.red)
-
- if lcd.up.value() == 0:
- lcd.fill_rect(60,60,30,30,lcd.red)
- else:
- lcd.fill_rect(60,60,30,30,lcd.white)
- lcd.rect(60,60,30,30,lcd.red)
-
- if lcd.down.value() == 0:
- lcd.fill_rect(60,150,30,30,lcd.red)
- else:
- lcd.fill_rect(60,150,30,30,lcd.white)
- lcd.rect(60,150,30,30,lcd.red)
-
- if lcd.left.value() == 0:
- lcd.fill_rect(15,105,30,30,lcd.red)
- else:
- lcd.fill_rect(15,105,30,30,lcd.white)
- lcd.rect(15,105,30,30,lcd.red)
-
- if lcd.right.value() == 0:
- lcd.fill_rect(105,105,30,30,lcd.red)
- else:
- lcd.fill_rect(105,105,30,30,lcd.white)
- lcd.rect(105,105,30,30,lcd.red)
-
- if lcd.ctrl.value() == 0:
- lcd.fill_rect(60,105,30,30,lcd.red)
- else:
- lcd.fill_rect(60,105,30,30,lcd.white)
- lcd.rect(60,105,30,30,lcd.red)
-
- lcd.show()
- time.sleep(0.1)
- except KeyboardInterrupt:
- pass
-
- lcd.fill(lcd.black)
- lcd.show()
- lcd.brightness(0.0)
|