3.5 Lcd模块API手册#

1. 概述#

此文档介绍CanMV lcd模块,用以指导开发人员如何调用Micro Python API实现图像输出功能。

2. API描述#

2.1 lcd.init#

【描述】

初始化整个lcd通路,包括VO模块、DSI模块、LCD/HDMI

【语法】

lcd.init(type, video_enable=True, osd_buf_cnt=1, ide_show=True)

【参数】

参数名称

描述

输入/输出

type

输出接口参数

输入

video_enable

打开video显示

输入

osd_buf_cnt

OSD buffer个数

输入

ide_show

打开IDE回传显示

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,其值为[错误码]

【注意】

  1. video_enable默认打开的是DISPLAY_CHN_VIDEO1,并绑定到CAM_DEV_ID_0, CAM_CHN_ID_0

  2. osd_buf_cnt默认为1,如果有多个OSD层显示,需要设置为>=层数

  3. ide_show默认打开CANMV_IDE回传显示

【举例】

【相关主题】

2.3 lcd.set_plane#

【描述】

设置VO通道参数,set_plane方法主要用来设置和Camera、vdec、DPU、AI2D绑定的VO通道

【语法】

lcd.set_plane(x, y, width, height, pixelformat, rotate, chn, mirror=None, alpha=None)

【参数】

参数名称

描述

输入/输出

x

起始坐标的x值

输入

y

起始坐标的y值

输入

width

宽度

输入

height

高度

输入

pixelformat

像素格式

输入

rotate

顺时针旋转功能

输入

chn

VO通道

输入

mirror

翻转功能

输入

alpha

plane alpha

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,其值为[错误码]

【注意】

  1. 只有DISPLAY_CHN_VIDEO1通道支持硬件rotate功能和mirror功能

  2. DISPLAY_CHN_OSD0-DISPLAY_CHN_OSD3通道需要GDMA模块来配合完成rotate功能和mirror功能,当使能rotate或mirror时,每个通道需额外使osd_buf_cnt+1

【举例】

【相关主题】

2.4 lcd.show_image#

【描述】

输出image到VO通道

【语法】

lcd.show_image(image, x=0, y=0, chn=DISPLAY_CHN_OSD0)

【参数】

参数名称

描述

输入/输出

image

待输出的图像

输入

x

起始坐标的x值

输入

y

起始坐标的y值

输入

chn

VO通道

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,其值为[错误码]

【注意】

  1. 图像宽度需要8 pixel对齐

【举例】

【相关主题】

2.5 lcd.disable_plane#

【描述】

关闭VO通道

【语法】

lcd.disable_plane(chn)

【参数】

参数名称

描述

输入/输出

chn

VO通道

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,其值为[错误码]

【注意】

【举例】

【相关主题】

2.6 lcd.deinit#

【描述】

执行反初始化,deinit方法会关闭整个lcd通路,包括VO模块、DSI模块、LCD/HDMI

【语法】

lcd.deinit()

【返回值】

返回值

描述

0

成功。

非 0

失败,其值为[错误码]

【注意】

【举例】

【相关主题】

3. 数据结构描述#

3.1 type#

【说明】

输出接口参数

【定义】

【成员】

成员名称

描述

HX8377_V2_MIPI_4LAN_1080X1920_30FPS

VO和DSI模块输出1080X1920 30FPS时序到LCD

ST7701_V1_MIPI_2LAN_480X800_30FPS

VO和DSI模块输出480x800 30FPS时序到LCD

LT9611_MIPI_4LAN_1920X1080_30FPS

VO和DSI模块输出1920X1080 30FPS时序到HDMI

LT9611_MIPI_4LAN_1920X1080_60FPS

VO和DSI模块输出1920X1080 60FPS时序到HDMI

LT9611_MIPI_4LAN_1280X720_60FPS

VO和DSI模块输出1280x720 60FPS时序到HDMI

LT9611_MIPI_4LAN_1280X720_50FPS

VO和DSI模块输出1280x720 50FPS时序到HDMI

LT9611_MIPI_4LAN_1280X720_30FPS

VO和DSI模块输出1280x720 30FPS时序到HDMI

LT9611_MIPI_4LAN_640X480_60FPS

VO和DSI模块输出640x480 60FPS时序到HDMI

OTHER_MIPI_4LAN_320X240_60FPS

VO和DSI模块输出640x480 60FPS时序

【注意事项】

3.2 chn#

【说明】

VO通道

【定义】

【成员】

成员名称

描述

DISPLAY_CHN_VIDEO1

VO模块video 1 通道,支持DISPLAY_OUT_NV12输出

DISPLAY_CHN_VIDEO2

VO模块video 2 通道,支持DISPLAY_OUT_NV12输出

DISPLAY_CHN_OSD0

VO模块OSD 0 通道,支持DISPLAY_OUT_ARGB8888、DISPLAY_OUT_RGB888、DISPLAY_OUT_RGB565输出

DISPLAY_CHN_OSD1

VO模块OSD 1 通道,支持DISPLAY_OUT_ARGB8888、DISPLAY_OUT_RGB888、DISPLAY_OUT_RGB565输出

DISPLAY_CHN_OSD2

VO模块OSD 2 通道,支持DISPLAY_OUT_ARGB8888、DISPLAY_OUT_RGB888、DISPLAY_OUT_RGB565输出

DISPLAY_CHN_OSD3

VO模块OSD 3 通道,支持DISPLAY_OUT_ARGB8888、DISPLAY_OUT_RGB888、DISPLAY_OUT_RGB565输出

【注意事项】

只有DISPLAY_CHN_VIDEO1通道支持rotate功能和mirror功能

3.3 pixelformat#

【说明】

像素格式

【定义】

【成员】

成员名称

描述

DISPLAY_OUT_NV12

输出NV12

DISPLAY_OUT_ARGB8888

输出ARGB8888

DISPLAY_OUT_RGB888

输出RGB888

DISPLAY_OUT_RGB565

输出RGB565

【注意事项】

3.4 mirror#

【说明】

水平方向和垂直方向镜像翻转功能

【定义】

【成员】

成员名称

描述

DISPLAY_ROTATE_0

不进行旋转

DISPLAY_ROTATE_90

顺时针旋转90度

DISPLAY_ROTATE_180

顺时针旋转180度

DISPLAY_ROTATE_270

顺时针旋转270度

DISPLAY_MIRROR_NONE

不进行翻转

DISPLAY_MIRROR_HOR

水平方向翻转180度

DISPLAY_MIRROR_VER

垂直方向翻转180度

DISPLAY_MIRROR_BOTH

水平方向和垂直方向都翻转180度

【注意事项】

4. 示例程序#

例程


from media.lcd import *
from media.media import *
import time, os, urandom, sys

DISPLAY_WIDTH = ALIGN_UP(1920, 16)
DISPLAY_HEIGHT = 1080

def lcd_test():
    print("lcd test")
    # use hdmi for lcd
    lcd.init(LT9611_MIPI_4LAN_1920X1080_30FPS, video_enable=False)
    # media buffer init
    media.buffer_init()
    # create image for drawing
    img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888)
    try:
        while True:
            img.clear()
            for i in range(10):
                x = (urandom.getrandbits(11) % img.width())
                y = (urandom.getrandbits(11) % img.height())
                r = (urandom.getrandbits(8))
                g = (urandom.getrandbits(8))
                b = (urandom.getrandbits(8))
                # If the first argument is a scaler then this method expects
                # to see x, y, and text. Otherwise, it expects a (x,y,text) tuple.
                # Character and string rotation can be done at 0, 90, 180, 270, and etc. degrees.
                img.draw_string(x, y, "Hello World!", color = (r, g, b), scale = 2, mono_space = False,
                                char_rotation = 0, char_hmirror = False, char_vflip = False,
                                string_rotation = 0, string_hmirror = False, string_vflip = False) // 绘图
            lcd.show_image(img)
            time.sleep(1)
            os.exitpoint()
    except KeyboardInterrupt as e:
        print("user stop: ", e)
    except BaseException as e:
        sys.print_exception(e)

    os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)
    time.sleep_ms(100)
    # deinit lcd
    lcd.deinit()
    # deinit media buffer
    media.buffer_deinit()

if __name__ == "__main__":
    os.exitpoint(os.EXITPOINT_ENABLE)
    lcd_test()