233 lines
5.8 KiB
Python
Executable File
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)
|
|
|
|
|
|
|
|
|