VoQab/Pico-LCD-1.8.py
2023-10-14 15:41:16 +02:00

233 lines
5.8 KiB
Python
Executable File

from machine import Pin,SPI,PWM
import framebuf
import time
BL = 13
DC = 8
RST = 12
MOSI = 11
SCK = 10
CS = 9
class LCD_1inch8(framebuf.FrameBuffer):
def __init__(self):
self.width = 161
self.height = 130
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,10000_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.WHITE = 0xFFFF
self.BLACK = 0x0000
self.GREEN = 0x001F
self.BLUE = 0xF800
self.RED = 0x07E0
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);
#ST7735R Frame Rate
self.write_cmd(0xB1);
self.write_data(0x01);
self.write_data(0x2C);
self.write_data(0x2D);
self.write_cmd(0xB2);
self.write_data(0x01);
self.write_data(0x2C);
self.write_data(0x2D);
self.write_cmd(0xB3);
self.write_data(0x01);
self.write_data(0x2C);
self.write_data(0x2D);
self.write_data(0x01);
self.write_data(0x2C);
self.write_data(0x2D);
self.write_cmd(0xB4); #Column inversion
self.write_data(0x07);
#ST7735R Power Sequence
self.write_cmd(0xC0);
self.write_data(0xA2);
self.write_data(0x02);
self.write_data(0x84);
self.write_cmd(0xC1);
self.write_data(0xC5);
self.write_cmd(0xC2);
self.write_data(0x0A);
self.write_data(0x00);
self.write_cmd(0xC3);
self.write_data(0x8A);
self.write_data(0x2A);
self.write_cmd(0xC4);
self.write_data(0x8A);
self.write_data(0xEE);
self.write_cmd(0xC5); #VCOM
self.write_data(0x0E);
#ST7735R Gamma Sequence
self.write_cmd(0xe0);
self.write_data(0x0f);
self.write_data(0x1a);
self.write_data(0x0f);
self.write_data(0x18);
self.write_data(0x2f);
self.write_data(0x28);
self.write_data(0x20);
self.write_data(0x22);
self.write_data(0x1f);
self.write_data(0x1b);
self.write_data(0x23);
self.write_data(0x37);
self.write_data(0x00);
self.write_data(0x07);
self.write_data(0x02);
self.write_data(0x10);
self.write_cmd(0xe1);
self.write_data(0x0f);
self.write_data(0x1b);
self.write_data(0x0f);
self.write_data(0x17);
self.write_data(0x33);
self.write_data(0x2c);
self.write_data(0x29);
self.write_data(0x2e);
self.write_data(0x30);
self.write_data(0x30);
self.write_data(0x39);
self.write_data(0x3f);
self.write_data(0x00);
self.write_data(0x07);
self.write_data(0x03);
self.write_data(0x10);
self.write_cmd(0xF0); #Enable test command
self.write_data(0x01);
self.write_cmd(0xF6); #Disable ram power save mode
self.write_data(0x00);
#sleep out
self.write_cmd(0x11);
#DEV_Delay_ms(120);
#Turn on the LCD display
self.write_cmd(0x29);
def show(self):
self.write_cmd(0x2A)
self.write_data(0x00)
self.write_data(0x01)
self.write_data(0x00)
self.write_data(0xf1)
self.write_cmd(0x2B)
self.write_data(0x00)
self.write_data(0x01)
self.write_data(0x00)
self.write_data(0xf1)
self.write_cmd(0x2C)
self.cs(1)
self.dc(1)
self.cs(0)
self.spi.write(self.buffer)
self.cs(1)
if __name__=='__main__':
pwm = PWM(Pin(BL))
pwm.freq(1000)
pwm.duty_u16(65535)#max 65535
LCD = LCD_1inch8()
print("Initialized!")
#color BRG
LCD.fill(LCD.BLUE)
LCD.show()
print("Filling with BLUE and waiting for 2sec...")
time.sleep(2)
print("Making red rectangles")
LCD.fill_rect(0,0,160,20,LCD.RED)
LCD.rect(0,0,160,20,LCD.RED)
LCD.text("Raspberry Pi Pico",2,8,LCD.WHITE)
LCD.fill_rect(0,20,160,20,LCD.BLUE)
LCD.rect(0,20,160,20,LCD.BLUE)
LCD.text("PicoGo",2,28,LCD.WHITE)
LCD.fill_rect(0,40,160,20,LCD.GREEN)
LCD.rect(0,40,160,20,LCD.GREEN)
LCD.text("Pico-LCD-1.8",2,48,LCD.WHITE)
LCD.fill_rect(0,60,160,10,0X07FF)
LCD.rect(0,60,160,10,0X07FF)
LCD.fill_rect(0,70,160,10,0xF81F)
LCD.rect(0,70,160,10,0xF81F)
LCD.fill_rect(0,80,160,10,0x7FFF)
LCD.rect(0,80,160,10,0x7FFF)
LCD.fill_rect(0,90,160,10,0xFFE0)
LCD.rect(0,90,160,10,0xFFE0)
LCD.fill_rect(0,100,160,10,0XBC40)
LCD.rect(0,100,160,10,0XBC40)
LCD.fill_rect(0,110,160,10,0XFC07)
LCD.rect(0,110,160,10,0XFC07)
LCD.fill_rect(0,120,160,10,0X8430)
LCD.rect(0,120,160,10,0X8430)
LCD.show()
time.sleep(1)
LCD.fill(0xFFFF)