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输出。
width
是lcd.LCD_SHIELD
模式下的 SPI LCD 的宽度。 默认情况下,这是 128 以匹配 OpenMV 128x160 LCD液晶显示屏。height
是lcd.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 始终打开。bgr
在lcd.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_RAINBOW
、sensor.PALETTE_IRONBOW
, 或总共 256 像素的 RGB565 图像,用作任何输入灰度值的颜色查找表图像。如果使用,这将在rgb_channel
提取之后应用。alpha_palette
如果不是-1
可以是总共 256 像素的 GRAYSCALE 图像,用作 alpha 调色板, 它调制以像素像素级别显示的输入图像的alpha
值,允许您根据像素的灰度值精确控制像素的 alpha 值。 alpha 查找表中的 255 像素值是不透明的,任何小于 255 的像素值都会变得更透明,直到 0。 如果使用,则在rgb_channel
提取之后应用。hint
可以是标志的逻辑 OR:image.AREA
:与最近邻的默认值相比,在缩小时使用区域缩放。image.BILINEAR
:使用双线性缩放而不是最近邻缩放的默认值。image.BICUBIC
:使用双三次缩放与最近邻缩放的默认值。image.CENTER
:将显示在 (x, y) 上的图像居中。image.EXTRACT_RGB_CHANNEL_FIRST
:缩放前进行 rgb_channel 提取。image.APPLY_COLOR_PALETTE_FIRST
:缩放前应用调色板。
如果没有传递
x_scale
来指定要显示的图像的大小,则可以传递x_size
并且x_scale
将自动确定传递的输入图像大小。 如果y_scale
或y_size
都没有指定,那么y_scale
内部将设置为等于x_size
以保持纵横比。如果没有传递
y_scale
以指定要显示的图像的大小,则可以传递y_size
并且y_scale
将自动确定传递的输入图像大小。 如果x_scale
或x_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¶
触摸点被移动。