openmv/usr/examples/lcd.py
2015-08-13 23:09:06 +02:00

133 lines
3.0 KiB
Python

# Copy this module to storage and import it if you want
# to use it in your own scripts. See example usage below.
from time import sleep
from pyb import Pin, SPI
class LCD:
def reset(self):
self.rst.low()
sleep(100)
self.rst.high()
sleep(100)
def __write_data(self, c):
self.cs.low()
self.rs.high()
self.spi.send(c)
self.cs.high()
def __write_command(self, c):
self.cs.low()
self.rs.low()
self.spi.send(c)
self.cs.high()
def write_command(self, cmd, *data):
self.__write_command(cmd)
for a in data:
self.__write_data(a)
def write_image(self, image):
self.write_command(0x2C)
self.cs.low()
self.rs.high()
self.spi.send(image)
self.cs.high()
def clear(self, c=0x00):
self.write_command(0x2C)
for i in range(128*160):
self.__write_data(c)
self.__write_data(c)
def set_backlight(self, on):
if (on):
self.bl.high()
else:
self.bl.low()
def __init__(self, madctl=0xC0):
self.rst = Pin('PD12', Pin.OUT_PP, Pin.PULL_UP)
self.rs = Pin('PD13', Pin.OUT_PP, Pin.PULL_UP)
self.cs = Pin('PB12', Pin.OUT_PP, Pin.PULL_UP)
self.bl = Pin('PA5', Pin.OUT_PP, Pin.PULL_UP)
self.spi = SPI(2, SPI.MASTER, baudrate=22500000, polarity=0, phase=0)
# LCD init sequence
self.reset() # uHW reset
self.write_command(0x11) #Sleep exit
sleep(120)
# ST7735R Frame Rate
self.write_command(0xB1, 0x01, 0x2C, 0x2D)
self.write_command(0xB2,0x01,0x2C,0x2D)
self.write_command(0xB3,0x01,0x2C,0x2D,0x01,0x2C,0x2D)
#Column inversion
self.write_command(0xB4, 0x07)
#ST7735R Power Sequence
self.write_command(0xC0,0xA2,0x02,0x84)
self.write_command(0xC1,0xC5)
self.write_command(0xC2, 0x0A, 0x00)
self.write_command(0xC3,0x8A,0x2A)
self.write_command(0xC4,0x8A,0xEE)
# VCOM
self.write_command(0xC5, 0x0E)
# MX, MY, MV, RGB mode
self.write_command(0x36, madctl)
# ST7735R Gamma Sequence
self.write_command(0xe0, 0x0f, 0x1a, 0x0f, 0x18, 0x2f, 0x28, 0x20,
0x22, 0x1f, 0x1b, 0x23, 0x37, 0x00, 0x07, 0x02, 0x10)
self.write_command(0xe1, 0x0f, 0x1b, 0x0f, 0x17, 0x33, 0x2c, 0x29,
0x2e, 0x30, 0x30, 0x39, 0x3f, 0x00, 0x07, 0x03, 0x10)
# Set column address
self.write_command(0x2a, 0x00, 0x00, 0x00, 128-1)
# Set row address
self.write_command(0x2b, 0x00, 0x00, 0x00, 160-1)
# Enable test command
self.write_command(0xF0, 0x01)
# Disable ram power save mode
self.write_command(0xF6, 0x00)
# 65k mode
self.write_command(0x3A, 0x05)
# Display on
self.write_command(0x29)
if __name__ == "__main__":
import sensor, time
#from lcd import LCD
# Reset sensor
sensor.reset()
# Sensor settings
sensor.set_contrast(2)
sensor.set_brightness(0)
sensor.set_saturation(2)
sensor.set_pixformat(sensor.RGB565)
# LCD resolution (128x160)
sensor.set_framesize(sensor.QQVGA2)
# Init LCD
lcd = LCD()
lcd.clear(0x00)
lcd.set_backlight(True)
clock = time.clock()
while (True):
clock.tick()
# Capture a frame a draw it to LCD
lcd.write_image(sensor.snapshot())
print(clock.fps())