OpenMV 驱动自己的LCD屏(修改后)

OpenMV 驱动自己的LCD屏

在写这个代码之前参考一位老哥(点击进入查看大佬的源代码)的代码,但是他使用的是OpenMV V3,我的是OpenMV V4 H7 Plus,运行他的源代码后发现并不能显示。
所以我在他的代码基础上进行了更改,来适配新版本的OpenMV。

其中最重要的更改就是write_image()这个函数,OpenMV返回的image对象并不能直接拿来给SPI发送,因为他会丢掉GRB565 16位数据的低(或高)八位,所以,我又开辟了一个新的数据缓存区:

fbuf = bytearray(320)#建立帧缓冲区,对于每个RGB565像素,帧缓冲区都需2字节

然后把这个数据按照高低顺序用SPI发送出去就可以了。下面是全部的代码:

## OpenMV 驱动自己的LCD屏
# 驱动IC ILI9341
# 分辨率 240*320 QVGA 2.2寸
import time
from pyb import Pin, SPI
fbuf = bytearray(320)#建立帧缓冲区,对于每个RGB565像素,帧缓冲区都需2字节

# IO接线:
# SDO/MISO  ---> P1(MISO)   		如果不读LCD颜色,可不接
# LED       ---> P6 (背光控制) 		可直接 接VCC,开机亮屏
# SCK       ---> P2(SCLK)			SCLK 时钟线
# SDI/MOSI  ---> P0(MOSI)			SDA 数据线
# DO/RS     ---> P8					数据命令选择线
# RESET     ---> P7					复位线
# CS        ---> P3					片选线
# GND       ---> GND
# VCC       ---> 3.3V

cs  = Pin("P3", Pin.OUT_OD)
rst = Pin("P7", Pin.OUT_PP)
rs  = Pin("P8", Pin.OUT_PP)
bl  = Pin("P6", Pin.OUT_PP)     # 背光控制

# 定义横屏/竖屏
USE_HORIZONTAL  = True         # 定义横屏
IMAGE_INVER     = True         # 旋转180°

# TFT resolution 240*320
X_MIN_PIXEL = 0
Y_MIN_PIXEL = 0
if USE_HORIZONTAL:
    X_MAX_PIXEL = 320               # 定义屏幕宽度
    Y_MAX_PIXEL = 240               # 定义屏幕高度
else:
    X_MAX_PIXEL = 240               # 定义屏幕宽度
    Y_MAX_PIXEL = 320               # 定义屏幕高度

# 常用颜色表 						#可去除
RED     = 0XF800
GREEN   = 0X07E0
BLUE    = 0X001F
BLACK   = 0X0000
YELLOW  = 0XFFE0
WHITE   = 0XFFFF

CYAN    = 0X07FF
BRIGHT_RED = 0XF810
GRAY1   = 0X8410
GRAY2   = 0X4208

# OpenMV  SPI2 总线  8位数据模式
spi = SPI(2, SPI.MASTER, baudrate=int(10000000000/66*0.06), polarity=0, phase=0,bits=8)

# SPI 写命令
def write_command_byte(c):
    cs.low()
    rs.low()
    spi.send(c)
    cs.high()

# SPI 写数据
def write_data_byte(c):
    cs.low()
    rs.high()
    spi.send(c)
    cs.high()

def write_command(c, *data): #命令数据一起写,先写命令 第二个开始为数据位。如果只写一个,则代表不写数据只写命令。
    write_command_byte(c)
    if data:
        for d in data:
            if d > 255:
                write_data_byte(d >> 8)
                write_data_byte(d&0xFF)
            else:
                write_data_byte(d)

def write_image(img):
    cs.low()
    rs.high()
    #spi.send(img)
#修改代码的核心##########################################################################
    if(True): #全发
        for m in img: 					#把一帧图像的对象取出来,放到帧缓存区中
            fbuf=m
            for i in range(0,320):		#每行每行的发送
                spi.send(fbuf[i]>&
评论 96
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值