lcd — lcd扩展板驱动

lcd 模块用于驱动 SPI LCD、24 位并行 LCD、MIPI DSI LCD、HDMI 输出和 Display Port 输出。

驱动 128x160 LCD 扩展板的示例用法:

import sensor, lcd

# Setup camera. 设置摄像机。
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA2) # 特用于LCD液晶显示屏的128x160分辨率。
sensor.skip_frames()
lcd.init()

# Show image. 显示图像
while(True):
    lcd.display(sensor.snapshot())

函数

lcd.init([type=lcd.LCD_SHIELD[, width=128[, height=160[, framesize=lcd.FWVGA[, refresh=60[, triple_buffer=False[, bgr=False]]]]]]])

初始化附加的lcd扩展板。

type 表示应该如何初始化 lcd 模块:

  • lcd.LCD_NONE:什么都不做。

  • lcd.LCD_SHIELD: 初始化一个 SPI LCD 显示器。 使用引脚 P0、P2、P3、P6、P7 和 P8。

  • lcd.LCD_DISPLAY:初始化驱动高分辨率显示器的 LCD 模块。

  • lcd.LCD DISPLAY WITH HDMI:初始化驱动高分辨率显示器和 HDMI 输出。

  • lcd.LCD_DISPLAY_ONLY_HDMI:初始化仅驱动HDMI输出。

widthlcd.LCD_SHIELD 模式下的 SPI LCD 的宽度。 默认情况下,这是 128 以匹配 OpenMV 128x160 LCD液晶显示屏。

heightlcd.LCD_SHIELD 模式下的 SPI LCD 的高度。 默认情况下,这是 160 以匹配 OpenMV 128x160 LCD液晶显示屏。

framesize LCD_DISPLAY* 模式中支持的标准分辨率之一。

refresh 以赫兹为单位设置 LCD 刷新率。特别是,它控制 SPI LCD 扩展板时钟和高分辨率显示时钟。 如果您在驱动外部显示器时遇到带宽问题,您可以降低此值以降低内存带宽要求。 或者,如果所有系统组件都允许更快的屏幕更新,您可以提高此值。

triple_buffer 如果为 True,则在 lcd.LCD_SHIELD 模式下以 3 倍的显示 RAM 为代价对屏幕进行非阻塞更新。 在 LCD_DISPLAY* 模式下,triple_buffer 始终打开。

bgrlcd.LCD_SHIELD 中设置为 True 以交换红色和蓝色通道。

lcd.deinit()

取消初始化 lcd 模块、内部/外部硬件和 I/O 引脚。

lcd.width()

返回在 lcd.init() 期间设置的屏幕宽度。

lcd.height()

返回在 lcd.init() 期间设置的屏幕高度。

lcd.type()

返回在 lcd.init() 期间设置的屏幕类型。

lcd.triple_buffer()

返回是否启用了在 lcd.init() 期间设置的三重缓冲。

lcd.bgr()

返回在 lcd.init() 期间设置的红色和蓝色通道是否交换。

lcd.framesize()

返回在 lcd.init() 期间设置的帧大小。

lcd.refresh()

返回在 lcd.init() 期间设置的刷新率。

lcd.set_backlight(value)

设置 lcd 背光调光值。 0(关)到 255(开)。

lcd.LCD_SHIELD 模式下,它控制 P5 上的 DAC 以提供调光值。 如果设置为0 P5被拉低,如果设置为255 P5未初始化,假设 SPI LCD 扩展板的背光在默认情况下始终打开。

在 LCD_DISPLAY* 模式下,它控制标准背光调光电路的 PWM 信号。

lcd.get_backlight()

返回 lcd 背光调光值。

lcd.get_display_connected()

在 LCD_DISPLAY_*_HDMI 模式下,如果连接了外部显示器,则返回。 这个函数可以在 lcd.init() 之前调用,这样你就可以控制你如何初始化这个模块。

lcd.register_hotplug_cb(callback)

在 LCD_DISPLAY_*_HDMI 模式下,注册一个 callback 函数,每当连接的外部显示器的状态发生变化时都会调用该函数。新状态将作为参数传递。 如果您使用此方法,请不要再调用 lcd.get_display_connected() ,直到通过传递 None 作为此方法的回调来禁用回调。

lcd.get_display_id_data()

在 LCD_DISPLAY_*_HDMI 模式下,此函数将外部显示器 EDID 数据作为 bytes() 对象返回。 验证 EDID 标头、校验和并将所有部分连接成一个 bytes() 对象已为您完成。 然后,您可以通过 遵循本指南<https://en.wikipedia.org/wiki/Extended_Display_Identification_Data>`__来解析此信息。 这个函数可以在 `lcd.init() 之前调用,这样你就可以控制你如何初始化这个模块。

lcd.send_frame(dst_addr, src_addr, bytes)

在 LCD_DISPLAY_*_HDMI 模式下,此函数在 HDMI-CEC 总线上向 dst_addr 发送一个数据包,其中包含源 src_addr 和数据 bytes

lcd.receive_frame(dst_addr, timeout=1000)

在 LCD_DISPLAY_*_HDMI 模式下,此函数等待 timeout 毫秒以接收地址 dst_addr 的 HDMI-CEC 帧。 如果接收到的帧是针对 dst_addr 的,则返回 True,否则返回 False。超时时会抛出 OSError 异常。

lcd.register_receive_cb(callback, dst_addr)

在 LCD_DISPLAY_*_HDMI 模式下注册一个 callback ,它将在接收到 HDMI-CEC 帧时调用。 如果 HDMI-CEC 帧是用于 dst_addr 的,回调将接收一个 True 或 False 参数。

如果您使用此方法,请不要再调用 lcd.receive_frame() ,直到通过传递 None 作为此方法的回调来禁用回调。

lcd.received_frame_src_addr()

在 LCD_DISPLAY_*_HDMI 模式下,如果 lcd.receive_frame()lcd.register_receive_cb() 中的回调返回 True, 则返回接收到的 HDMI-CEC 帧源地址。当为 HDMI-CEC 总线启用回调时,不应再调用此方法,除非在回调内部。

lcd.received_frame_bytes()

在 LCD_DISPLAY_*_HDMI 模式下,如果 lcd.receive_frame()lcd.register_receive_cb() 中的回调返回 True, 则将接收到的 HDMI-CEC 帧数据负载作为字节对象返回。当为 HDMI-CEC 总线启用回调时,不应再调用此方法,除非在回调内部。

lcd.update_touch_points()

在 LCD_DISPLAY* 模式下,此函数读取触摸屏状态并返回触摸点数 (0-5)。

lcd.register_touch_cb(callback)

在 LCD_DISPLAY* 模式下,此函数注册一个回调,该回调将在发生触摸事件时接收触摸点数 (0-5)。

如果您使用此方法,请不要再调用 lcd.update_touch_points() ,直到通过传递 None 作为此方法的回调来禁用回调。

lcd.get_gesture()

在 LCD_DISPLAY* 模式下,这将返回当前的触摸手势。 这是 LCD_GESTURE_* 之一。 当为触摸屏启用回调时,不应再调用此方法,除非在回调内部。

lcd.get_points()

在 LCD_DISPLAY* 模式下,这将返回当前的触摸点数 (0-5)。 当为触摸屏启用回调时,不应再调用此方法,除非在回调内部。

lcd.get_point_flag(index)

在 LCD_DISPLAY* 模式下,这将返回 index 处点的当前触摸点状态。 这是 LCD_FLAG_* 之一。 当为触摸屏启用回调时,不应再调用此方法,除非在回调内部。

lcd.get_point_id(index)

在 LCD_DISPLAY* 模式下,它返回 index 点的当前触摸点 id。 接触点 id 是一个数值,允许您跟踪接触点,因为它可能会在添加和删除点时返回的接触点列表中移动。 当为触摸屏启用回调时,不应再调用此方法,除非在回调内部。

lcd.get_point_x_position(index)

在 LCD_DISPLAY* 模式下,这将返回 index 点的当前触摸点 x 位置。 这是屏幕上触摸点的 x 像素位置。 当为触摸屏启用回调时,不应再调用此方法,除非在回调内部。

lcd.get_point_y_position(index)

在 LCD_DISPLAY* 模式下,这将返回 index 点的当前触摸点 y 位置。 这是屏幕上触摸点的 y 像素位置。 当为触摸屏启用回调时,不应再调用此方法,除非在回调内部。

lcd.display(image[, x=0[, y=0[, x_scale=1.0[, y_scale=1.0[, roi=None[, rgb_channel=-1[, alpha=256[, color_palette=None[, alpha_palette=None[, hint=0[, x_size=None[, y_size=None]]]]]]]]]]]])

显示一个 image ,其左上角从位置 x, y 开始。您可以单独传递 x, y ,作为元组 (x, y) 或两者都不传递。

x_scale 控制显示图像在 x 方向(浮点数)的缩放比例。如果此值为负,则图像将水平翻转。

y_scale 控制显示图像在 y 方向(浮点数)的缩放比例。如果此值为负,则图像将垂直翻转。

roi 是要显示的图像的感兴趣区域矩形元组 (x, y, w, h)。这允许您仅提取 ROI 中的像素以进行缩放。

rgb_channel 是从 RGB565 图像(如果传递)中提取并在显示器上呈现的 RGB 通道(0=R、G=1、B=2)。 例如,如果您传递 rgb_channel=1 这将提取 RGB565 图像的绿色通道并以灰度显示。

alpha 控制图像的不透明程度。值 256 显示不透明图像,而小于 256 的值生成黑色透明图像。 0 生成完美的黑色图像。

color_palette 如果不是 -1 可以是 sensor.PALETTE_RAINBOWsensor.PALETTE_IRONBOW, 或总共 256 像素的 RGB565 图像,用作任何输入灰度值的颜色查找表图像。如果使用,这将在 rgb_channel 提取之后应用。

alpha_palette 如果不是 -1 可以是总共 256 像素的 GRAYSCALE 图像,用作 alpha 调色板, 它调制以像素像素级别显示的输入图像的 alpha 值,允许您根据像素的灰度值精确控制像素的 alpha 值。 alpha 查找表中的 255 像素值是不透明的,任何小于 255 的像素值都会变得更透明,直到 0。 如果使用,则在 rgb_channel 提取之后应用。

hint 可以是标志的逻辑 OR:

如果没有传递 x_scale 来指定要显示的图像的大小,则可以传递 x_size 并且 x_scale 将自动确定传递的输入图像大小。 如果 y_scaley_size 都没有指定,那么 y_scale 内部将设置为等于 x_size 以保持纵横比。

如果没有传递 y_scale 以指定要显示的图像的大小,则可以传递 y_size 并且 y_scale 将自动确定传递的输入图像大小。 如果 x_scalex_size 都没有指定,那么 x_scale 内部将设置为等于 y_size 以保持纵横比。

不支持压缩图像。

lcd.clear([display_off=False])

将液晶屏清空为黑色。

display_off 如果为 True 则关闭显示逻辑而不是将帧 LCD 帧缓冲区清除为黑色。 您还应该在此之后关闭背光以确保屏幕变黑,因为当只有背光打开时,许多显示器都是白色的。

常数

lcd.LCD_NONE

当此模块未初始化时由 lcd.type() 返回。

lcd.LCD_SHIELD

用于初始化 SPI LCD 驱动模式下的 LCD 模块。

lcd.LCD_DISPLAY

用于初始化驱动高分辨率显示器的 LCD 模块。

lcd.LCD_DISPLAY_WITH_HDMI

用于初始化驱动高分辨率显示器的 LCD 模块,带有二级镜像 HDMI 输出。

lcd.LCD_DISPLAY_ONLY_HDMI

用于初始化驱动 HDMI 输出的 LCD 模块。

lcd.QVGA

LCD_DISPLAY* 模式的分辨率为 320x240。

lcd.TQVGA

LCD_DISPLAY* 模式的分辨率为 240x320。

lcd.FHVGA

LCD_DISPLAY* 模式的分辨率为 480x272。

lcd.FHVGA2

LCD_DISPLAY* 模式的分辨率为 480x128。

lcd.VGA

LCD_DISPLAY* 模式的分辨率为 640x480。

lcd.THVGA

LCD_DISPLAY* 模式的分辨率为 320x480。

lcd.FWVGA

LCD_DISPLAY* 模式的分辨率为 800x480。

lcd.FWVGA2

LCD_DISPLAY* 模式的分辨率为 800x320。

lcd.TFWVGA

LCD_DISPLAY* 模式的分辨率为 480x800。

lcd.TFWVGA2

LCD_DISPLAY* 模式的分辨率为 480x480。

lcd.SVGA

LCD_DISPLAY* 模式的分辨率为 800x600。

lcd.WSVGA

LCD_DISPLAY* 模式的分辨率为 1024x600。

lcd.XGA

LCD_DISPLAY* 模式的分辨率为 1024x768。

lcd.SXGA

LCD_DISPLAY* 模式的分辨率为 1280x1024。

lcd.SXGA2

LCD_DISPLAY* 模式的分辨率为 1280x400。

lcd.UXGA

LCD_DISPLAY* 模式的分辨率为 1600x1200。

lcd.HD

LCD_DISPLAY* 模式的分辨率为 1280x720。

lcd.FHD

LCD_DISPLAY* 模式的分辨率为 1920x1080。

备注

使用此设置在 lcd.init() 中使用 30 Hz 的 refresh。 STM32H7 无法在 60 Hz 下驱动 1080p。

lcd.LCD_GESTURE_MOVE_UP

触摸屏向上移动手势。

lcd.LCD_GESTURE_MOVE_LEFT

触摸屏向左移动手势。

lcd.LCD_GESTURE_MOVE_DOWN

触摸屏向下移动手势。

lcd.LCD_GESTURE_MOVE_RIGHT

触摸屏向右移动手势。

lcd.LCD_GESTURE_ZOOM_IN

触摸屏放大手势。

lcd.LCD_GESTURE_ZOOM_OUT

触摸屏缩小手势。

lcd.LCD_GESTURE_NONE

触摸屏没有手势。

lcd.LCD_FLAG_PRESSED

触摸点被按下。

lcd.LCD_FLAG_RELEASED

触点被释放。

lcd.LCD_FLAG_MOVED

触摸点被移动。