class LCD - LCD显示屏

该类提供对LCD显示屏的控制。

支持的平台和模块型号:

EC200U系列、EC600U系列、EC600N系列、EC800N系列

EC600M-CNLA、EC600M-CNLE

EC800M-CNLA、EC800M-CNLE、EC800M-CNGA、EC800G-CNGA、EG810M-CNGA

EG912N-ENAA、EG912U-GLAA

EG915N-EUAG、EG915U-EUAB

构造函数

machine.LCD

class machine.lcd = LCD()

示例:

>>> from machine import LCD 
>>> lcd = LCD()    # 创建lcd对象

方法

lcd.lcd_init

该方法用于初始化LCD。

接口1:设备接模块LCM接口

lcd.lcd_init(lcd_init_data, lcd_width, lcd_hight, lcd_clk, data_line, line_num, lcd_type, lcd_invalid, lcd_display_on, lcd_display_off, lcd_set_brightness)

参数描述:

参数 类型 说明
lcd_init_data bytearray LCD 初始化的配置命令
lcd_width int LCD 屏幕的宽度,宽度不超过 500像素
lcd_hight int LCD 屏幕的高度,高度不超过 500像素
lcd_clk int LCD SPI 时钟频率:
6500: 6.5MHz
13000:13MHz
26000:26MHz
52000:52MHz
data_line int 数据线数,参数值为 1 和 2
line_num int 线的数量,参数值为 3 和 4
lcd_type int 屏幕类型,0 - rgb;1 - fstn
lcd_invalid bytearray LCD 区域设置的配置命令
lcd_display_on bytearray LCD 屏亮的配置命令
lcd_display_off bytearray LCD 屏灭的配置命令
lcd_set_brightness bytearray LCD屏亮度的配置命令:
设置为 None表示由 LCD_BL_K 控制亮度

返回值描述:

0 表示成功。

-1 表示已经初始化。

-2 表示参数错误,为空或过大(大于 1000 像素点)。

-3 表示缓存申请失败。

-5 表示配置参数错误。

接口2:设备接模块SPI接口

lcd.lcd_init(lcd_init_data, lcd_width, lcd_hight, lcd_clk, data_line, line_num, lcd_type, lcd_invalid, lcd_display_on, lcd_display_off, lcd_set_brightness, lcd_interface, spi_port, spi_mode, cs_pin, dc_pin, rst_pin)

参数描述:

参数 类型 说明
lcd_init_data bytearray LCD 初始化的配置命令
lcd_width int LCD 屏幕的宽度,宽度不超过 500像素
lcd_hight int LCD 屏幕的高度,高度不超过 500像素
lcd_clk int SPI 时钟,见machine.SPI 创建SPI对象参数说明clk
data_line int 数据线数,参数值为 1 和 2
line_num int 线的数量,参数值为 3 和 4
lcd_type int 屏幕类型,0 - rgb;1 - fstn
lcd_invalid bytearray LCD 区域设置的配置命令
lcd_display_on bytearray LCD 屏亮的配置命令
lcd_display_off bytearray LCD 屏灭的配置命令
lcd_set_brightness bytearray LCD屏亮度的配置命令:
设置为 None表示由 LCD_BL_K 控制亮度
lcd_interface int LCD接口类型,0 - LCM接口;1 - SPI接口
spi_port int 通道选择[0,1],参照SPI部分
spi_mode int SPI 的工作模式(通常使用工作模式0):
时钟极性CPOL:即SPI空闲时,时钟信号SCLK的电平(0:空闲时低电平; 1:空闲时高电平)
0 : CPOL=0, CPHA=0
1 : CPOL=0, CPHA=1
2 : CPOL=1, CPHA=0
3 : CPOL=1, CPHA=1
cs_pin int CS引脚,见machine.Pin中GPIO引脚编号说明
dc_pin int DC引脚,见machine.Pin中GPIO引脚编号说明
rst_pin int RST引脚,见machine.Pin中GPIO引脚编号说明

返回值描述:

0 表示成功。

-1 表示屏幕已经初始化。

-2 表示参数错误,为空或过大(大于 1000 像素点)。

-3 表示缓存申请失败。

-5 表示配置参数错误。

lcd.mipi_init

lcd.mipi_init(initbuf, **kwargs)

该方法用于初始化MIPI,按键值对传参,请根据屏厂提供的初始化参数填写。

1.仅支持EC200U系列和EC600U系列。

2.参数列表中,initbuf为必传参数;后面参数与缺省值不同时传入。

参数描述:

参数 类型 说明
initbuf bytearray 必传,传入 MIPI 的配置命令
width int 缺省值:480,屏幕的宽度,单位像素,示例:width=400
hight int 缺省值:854,屏幕的高度,单位像素,示例:hight=800
bpp int 缺省值:16,像素深度
DataLane int 缺省值:2,数据通道
MipiMode int 缺省值:0
模式:
0:DSI_VIDEO_MODE
1:DSI_CMD_MODE
PixelFormat int 缺省值:0
像素格式:
0:RGB_PIX_FMT_RGB565
16:RGB_PIX_FMT_RGB888
32:RGB_PIX_FMT_XRGB888
48:RGB_PIX_FMT_RGBX888
DsiFormat int 缺省值:0
DSI格式:
0:DSI_FMT_RGB565
1:DSI_FMT_RGB666
2:DSI_FMT_RGB666L
3:DSI_FMT_RGB888
TransMode int 缺省值:3
转换模式:
0:DSI_CMD
1:DSI_PULSE
2:DSI_EVENT
3:DSI_BURST
RgbOrder int 缺省值:8
RGB顺序:
0:RGB
8:BGR
BllpEnable bool 缺省值:true,blank low power 模式使能
HSync int 缺省值:10,水平同步
HBP int 缺省值:10,水平后肩
HFP int 缺省值:10,水平前肩
VSync int 缺省值:4,垂直同步
VBP int 缺省值:10,垂直后肩
VFP int 缺省值:14,垂直前肩
FrameRate int 缺省值:60,帧率
TESel bool 缺省值:false,TE选择
RstPolarity int 缺省值:1,reset极性

返回值描述:

成功则返回0, 失败则报错。

mipi屏引脚说明:

引脚名 EC600U系列 EC200U系列
CKN PIN61 PIN27
CKP PIN58 PIN26
D1N PIN59 PIN24
D1P PIN60 PIN25
D0N PIN69 PIN13
D0P PIN70 PIN135
FMARK PIN62 PIN119
RESET PIN64 PIN120

使用示例:

init_480X854 = (
0x11,0,0,
0xFF,120,5,0x77,0x01,0x00,0x00,0x10,
0xC0,0,2,0xE9,0x03,
0xC1,0,2,0x11,0x02,
0xC2,0,2,0x31,0x08,
0xCC,0,1,0x10,
0xB0,0,16,0x00,0x0D,0x14,0x0D,0x10,0x05,0x02,0x08,0x08,0x1E,0x05,0x13,0x11,0xA3,0x29,0x18,
0xB1,0,16,0x00,0x0C,0x14,0x0C,0x10,0x05,0x03,0x08,0x07,0x20,0x05,0x13,0x11,0xA4,0x29,0x18,
0xFF,0,5,0x77,0x01,0x00,0x00,0x11,
0xB0,0,1,0x6C,
0xB1,0,1,0x43,
0xB2,0,1,0x07,
0xB3,0,1,0x80,
0xB5,0,1,0x47,
0xB7,0,1,0x85,
0xB8,0,1,0x20,
0xB9,0,1,0x10,
0xC1,0,1,0x78,
0xC2,0,1,0x78,
0xD0,0,1,0x88,
0xE0,100,3,0x00,0x00,0x02,
0xE1,0,11,0x08,0x00,0x0A,0x00,0x07,0x00,0x09,0x00,0x00,0x33,0x33,
0xE2,0,13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xE3,0,4,0x00,0x00,0x33,0x33,
0xE4,0,2,0x44,0x44,
0xE5,0,16,0x0E,0x60,0xA0,0xA0,0x10,0x60,0xA0,0xA0,0x0A,0x60,0xA0,0xA0,0x0C,0x60,0xA0,0xA0,
0xE6,0,4,0x00,0x00,0x33,0x33,
0xE7,0,2,0x44,0x44,
0xE8,0,16,0x0D,0x60,0xA0,0xA0,0x0F,0x60,0xA0,0xA0,0x09,0x60,0xA0,0xA0,0x0B,0x60,0xA0,0xA0,
0xEB,0,7,0x02,0x01,0xE4,0xE4,0x44,0x00,0x40,
0xEC,0,2,0x02,0x01,
0xED,0,16,0xAB,0x89,0x76,0x54,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x10,0x45,0x67,0x98,0xBA,
0xFF,0,5,0x77,0x01,0x00,0x00,0x00,
0x3A,0,1,0x77,
0x36,0,1,0x00,
0x35,0,1,0x00,
0x29,0,0
)
from machine import LCD
mipilcd = LCD()
mipilcd.mipi_init(initbuf=bytearray(init_480X854), TransMode=1)

lcd.lcd_clear

lcd.lcd_clear(color)

该方法用于清除屏幕。

参数描述:

  • color - 需要刷屏的颜色值,16进制。

返回值描述:

成功返回0,失败返回-1

lcd.lcd_write

lcd.lcd_write(color_buffer,start_x,start_y,end_x,end_y)

该方法用于区域写屏。

参数描述:

  • color_buffer - 屏幕的颜色值缓存,bytearray类型。
  • start_x - 起始 x 坐标,int类型。
  • start_y - 起始 y 坐标,int类型。
  • end_x - 结束 x 坐标,int类型。
  • end_y - 结束 y 坐标,int类型。

返回值描述:

0 表示成功。

-1 表示屏幕未初始化。

-2 表示宽度和高度设置错误。

-3 表示数据缓存为空。

lcd.lcd_brightness

lcd.lcd_brightness(level)

该方法用于设置屏幕亮度等级。

参数描述:

  • level - 亮度等级,int类型 ,说明如下:
    此处会调用 lcd.lcd_init()中的 lcd_set_brightness回调。若该参数为 None,亮度调节则由背光亮度调节引脚来控制,范围[0,5]。

返回值描述:

成功返回0, 失败返回-1

lcd.lcd_display_on

lcd.lcd_display_on()

此接口用于向LCD发送lcd_display_on指令来打开屏幕显示,请确保lcd初始化的时候传入了正确的lcd_display_on指令。

返回值描述:

成功返回0, 失败返回-1

lcd.lcd_display_off

lcd.lcd_display_off()

此接口用于向LCD发送lcd_display_off 指令来关闭屏幕显示,请确保lcd初始化的时候传入了正确的lcd_display_off 指令。

返回值描述:

成功返回0, 失败返回-1

lcd.lcd_write_cmd

lcd.lcd_write_cmd(cmd_value, cmd_value_len)

该方法用于写入命令。

参数描述:

  • cmd_value - 命令值 ,16进制 。
  • cmd_value_len - 命令值长度,int类型。

返回值描述:

成功返回0, 失败返回其他值。

lcd.lcd_write_data

lcd.lcd_write_data(data_value, data_value_len)

该方法用于写入数据。

参数描述:

  • data_value - 数据值,16进制。
  • data_value_len - 数据值长度,int类型。

返回值描述:

成功返回0, 失败返回其他值。

lcd.lcd_show

lcd.lcd_show(file_name, start_x,start_y,width,hight)

该方法采用读文件方式,显示图片。

该文件是由Image2Lcd工具生成的bin文件,若勾选包含图像头文件,则width和hight无需填写。

参数描述:

  • file_name - 需要显示的图片名,str类型。
  • start_x - 起始x坐标,int类型。
  • start_y - 起始y坐标,int类型。
  • width - 图片宽度(若图片文件包含头信息,则该处不填),int类型。
  • hight - 图片高度(若图片文件包含头信息,则该处不填),int类型。

返回值描述:

成功返回0, 失败返回其他值。

lcd.lcd_show_jpg

lcd.lcd_show_jpg( file_name, start_x,start_y)

该方法采用读文件方式,显示jpeg图片。

参数描述:

  • file_name - 需要显示的图片名,str类型。
  • start_x - 起始x坐标,int类型。
  • start_y - 起始y坐标,int类型。

返回值描述:

成功返回0, 失败返回其他值。

使用示例:

需要配合LCD屏使用,如下代码以st7789为例。

from machine import LCD 

# 根据LCD商家给出的相应的初始化示例来填写
# 第一行:2, 0, 120,		2表示sleep命令,中间恒为0,120表示sleep的毫秒数。收到此行数据,LCD将sleep 120ms
# 第二行:0, 0, 0x11,		0表示写入寄存器地址命令,中间数字表示后续需要写入的DATA长度,0表示没有要写入的数据,0x11是寄存器地址
# 第三行:0, 1, 0x36,		0表示写入寄存器地址命令,中间数字表示后续需要写入的DATA长度,1表示要写入一字节数据,0x36是寄存器地址
# 第四行:1, 1, 0x00,		1表示写入数据命令,中间数字表示写入的数据长度,0x00是数据
# 后面按照前四行的格式将初始化示例填入即可
init_data = (2, 0, 120,	
            0, 0, 0x11,	
            0, 1, 0x36,	
            1, 1, 0x00,	
            0, 1, 0x3A,
            1, 1, 0x05,
            0, 0, 0x21,
            0, 5, 0xB2,
            1, 1, 0x05,
            1, 1, 0x05,
            1, 1, 0x00,
            1, 1, 0x33,
            1, 1, 0x33,
            0, 1, 0xB7,
            1, 1, 0x23,
            0, 1, 0xBB,
            1, 1, 0x22,
            0, 1, 0xC0,
            1, 1, 0x2C,
            0, 1, 0xC2,
            1, 1, 0x01,
            0, 1, 0xC3,
            1, 1, 0x13,
            0, 1, 0xC4,
            1, 1, 0x20,
            0, 1, 0xC6,
            1, 1, 0x0F,
            0, 2, 0xD0,
            1, 1, 0xA4,
            1, 1, 0xA1,
            0, 1, 0xD6,
            1, 1, 0xA1,
            0, 14, 0xE0,
            1, 1, 0x70,
            1, 1, 0x06,
            1, 1, 0x0C,
            1, 1, 0x08,
            1, 1, 0x09,
            1, 1, 0x27,
            1, 1, 0x2E,
            1, 1, 0x34,
            1, 1, 0x46,
            1, 1, 0x37,
            1, 1, 0x13,
            1, 1, 0x13,
            1, 1, 0x25,
            1, 1, 0x2A,
            0, 14, 0xE1,
            1, 1, 0x70,
            1, 1, 0x04,
            1, 1, 0x08,
            1, 1, 0x09,
            1, 1, 0x07,
            1, 1, 0x03,
            1, 1, 0x2C,
            1, 1, 0x42,
            1, 1, 0x42,
            1, 1, 0x38,
            1, 1, 0x14,
            1, 1, 0x14,
            1, 1, 0x27,
            1, 1, 0x2C,
            0, 0, 0x29,
            0, 1, 0x36,
            1, 1, 0x00,
            0, 4, 0x2a,
            1, 1, 0x00,
            1, 1, 0x00,
            1, 1, 0x00,
            1, 1, 0xef,
            0, 4, 0x2b,
            1, 1, 0x00,
            1, 1, 0x00,
            1, 1, 0x00,
            1, 1, 0xef,
            0, 0, 0x2c,)

display_on_data = (
    0, 0, 0x11,
    2, 0, 20,
    0, 0, 0x29,
)
display_off_data = (
    0, 0, 0x28,
    2, 0, 120,
    0, 0, 0x10,
)
# 设置区域参数
XSTART_H = 0xf0
XSTART_L = 0xf1
YSTART_H = 0xf2
YSTART_L = 0xf3
XEND_H = 0xE0
XEND_L = 0xE1
YEND_H = 0xE2
YEND_L = 0xE3
invalid_data = (
    0, 4, 0x2a,
    1, 1, XSTART_H,
    1, 1, XSTART_L,
    1, 1, XEND_H,
    1, 1, XEND_L,
    0, 4, 0x2b,
    1, 1, YSTART_H,
    1, 1, YSTART_L,
    1, 1, YEND_H,
    1, 1, YEND_L,
    0, 0, 0x2c,
)

lcd = LCD()
init_list = bytearray(init_data)
display_on_list = bytearray(display_on_data)
display_off_list = bytearray(display_off_data)
invalid_list = bytearray(invalid_data)


lcd.lcd_init(init_list, 240,240,13000,1,4,0,invalid_list,display_on_list,display_off_list,None)

Color_buffer =(0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, 0x1f, 0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, 0x1f, 0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, 0x1f, 0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, 0x1f, 0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, 0x1f, 0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, 0x1f, 0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, 0x1f, 0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, 0x1f, 0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, 0x1f, 0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, 0x1f, 0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, 0x1f, 0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, 0x1f, 0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, 0x1f, 0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, 0x1f, 0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, 0x1f, 0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, 0x1f, 0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, 0x1f, 0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, 0x1f, 0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, 0x1f, 0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, 0x1f) 

Color_buffer = bytearray(Color_buffer) 

lcd.lcd_write(Color_buffer,10,10,20,20)
lcd.lcd_clear(0xf800) # 红色

lcd.lcd_show("lcd_test.bin",0,0)	#该lcd_test.bin 中包含图像头数据
lcd.lcd_show("lcd_test1.bin",0,0,126,220) #该lcd_test1.bin 中没有包含图像头数据