第二十四章 LCD显示实验
本章将介绍初步介绍CanMV下LCD的使用。通过本章的学习,读者将学习到板载LCD的简单使用。
本章分为如下几个小节:
24.1 lcd模块介绍
24.2 硬件设计
24.3 程序设计
24.4 运行验证
24.1 lcd模块介绍
lcd模块是CanMV内置的模块,lcd模块用于驱动LCD进行一些简单的显示或获取LCD的相关信息。
lcd模块提供了init()函数,用于初始化LCD,init()函数如下所示:
lcd.init(type=1, freq=15000000, color=lcd.BLACK)
init()用于对LCD进行初始化,初始化时可以传入部分初始化参数。
type指的是设备类型,该参数是CanMV的保留参数,不用理会也不可传入其他非默认值。
freq指的是与LCD通讯的SPI的通讯速率,通常情况下保持默认即可。
color指的是LCD初始化后的全屏显示的颜色,默认为黑色。
init()函数的使用示例如下所示:
import lcd
lcd.init()
lcd模块提供了width()和height()函数,分别用于获取LCD的宽度(水平分辨率)和高度(垂直分辨率),width()和height()函数如下所示:
lcd.width()
lcd.height()
width()和height()函数的使用示例如下所示:
import lcd
width = lcd.width()
height = lcd.height()
lcd模块提供了fill_rectangle()函数,用于绘制一个填充矩形,fill_rectangle函数如下所示:
lcd.fill_rectangle(x, y, w, h, color)
x、y、w和h分别指的是矩形的左上角X和Y坐标以及矩形的宽度和高度。
color指的是矩形的填充颜色,该参数可以值元组指定的RGB三个通道的值,如(255, 255, 255)或RGB565的整数值,如0x00F8(高低字节需进行对调),也可以是lcd模块中定义好的颜色常量,如下表所示:
表24.1.1 lcd模块提供的颜色常量
fill_rectangle()函数的使用示例如下所示:
import lcd
lcd.init()
lcd.fill_rectangle(0, 0, 10, 10, lcd.RED)
lcd模块提供了clear()函数,用于清屏LCD显示,clear()函数如下所示:
lcd.clear(color=lcd.BLACK)
clear()函数用于清屏LCD显示,即用默认的黑色或指定颜色填充整个LCD显示屏。
color指的是用于填充整个LCD显示屏的颜色,可选参数请见上文中fill_rectangle()函数的color参数描述,若color参数为空,则使用默认的黑色填充整个LCD显示屏。
clear()函数的使用示例如下所示:
import lcd
lcd.init()
lcd.clear(color=lcd.RED)
lcd模块提供了draw_string()函数,用于在LCD上简单地显示字符串,draw_string()函数如下所示:
lcd.draw_string(x, y, string, fontc=lcd.RED, bgc=lcd.BLACK)
draw_string()函数用于在LCD的指定位置显示指定的字符串,可以指定字符串的颜色和背景颜色,但无法指定字符串的字体和字号。
x和y分别指的是字符串左上角的X和Y坐标。
string指的是指定的字符串。
fontc和bgc分别指的是字符串的字体颜色和背景颜色,可选参数请见上文中fill_rectangle()函数的color参数描述,若fontc或bgc参数为空,则分别使用对应默认的红色和黑色作为字符串的字体颜色和背景颜色。
draw_string()函数的使用示例如下所示:
import lcd
lcd.init()
lcd.draw_string(0, 0, "Hello, DNK210!")
lcd模块提供了display()函数,用于在LCD上显示一个Image对象,display()函数如下所示:
lcd.display(image, roi, oft)
display()函数用于在LCD的指定位置以指定的大小显示一个指定的Image对象。
image指的是Image对象,有关image的介绍会在后续的章节中提到,读者可以暂且认为Image对象就是一张图像。
roi指的是对Image对象感兴趣的区域,若未指定,即为图像矩形。
oft指的是偏移坐标。
display()函数的使用示例如下所示:
import lcd
import image
img = image.Image(size=(320, 240))
img.draw_rectangle(0, 0, 320, 240, color=(255, 255, 255), fill=True)
img.draw_string(0, 0, "Hello, DNK210!", (255, 0, 0), 2.5)
lcd.init()
lcd.display(img)
lcd模块提供了mirror()函数,用于水平镜像LCD的显示,mirror()函数如下所示:
lcd.mirror(invert)
mirror()函数用于水平镜像LCD的显示,水平镜像后,不论是已经显示再LCD上的画面或是后续绘制的图像都将以水平镜像的方式进行显示。
invert指的是是否使能LCD的水平镜像显示,当为True时,使能LCD的水平镜像显示,当为False时,禁止LCD的水平镜像显示。
mirror()函数的使用示例如下所示:
import lcd
lcd.init()
lcd.mirror(True)
lcd模块提供了rotation()函数,用于旋转LCD的显示,rotation()函数如下所示: lcd.rotation(dir)
rotation()函数用于旋转LCD的显示,旋转后,不论是已经显示再LCD上的画面或是后续绘制的图像都将以设置的旋转方向进行显示。
dir指的是LCD旋转的方向,可选的参数为0~3这四个数,分别对应依次再默认旋转方向上顺时针旋转90°的方向。
rotation()函数的使用示例如下所示:
import lcd
lcd.init()
lcd.rotation(0)
24.2 硬件设计
24.2.1 例程功能
1. 使用lcd模块初始化LCD,在LCD上显示一段字符串,并不断更换背景颜色
24.2.2 硬件资源
1. LCD
LCD_RD - IO34
LCD_BL - IO35
LCD_CS - IO36
LCD_RST - IO37
LCD_RS - IO38
LCD_WR - IO39
LCD_D0~LCD_D7 - SPI0_D0~SPI0_D7
24.2.3 原理图
本章实验内容,需要使用到板载的LCD显示屏,正点原子DNK210开发板上的LCD显示屏连接原理图,如下图所示: 图24.2.3.1 LCD显示屏连接原理图
24.3 程序设计
24.3.1 lcd模块
有关lcd模块的介绍,请见第24.1小节《lcd模块介绍》。
24.3.2 程序流程图
图24.3.2.1 LCD显示实验流程图
24.3.3 main.py代码
main.py中的脚本代码如下所示:
import lcd
import time
# 初始化LCD
lcd.init()
while True:
for bg_color in [lcd.WHITE, lcd.BLACK, lcd.BLUE, lcd.MAGENTA, lcd.GREEN, lcd.CYAN, lcd.YELLOW]:
# 清屏LCD显示
lcd.clear(bg_color)
# 显示字符串
lcd.draw_string(10, 10, "DNK210", lcd.RED, bg_color)
lcd.draw_string(10, 20, "LCD", lcd.RED, bg_color)
lcd.draw_string(10, 30, "ATOM@ALIENTEK", lcd.RED, bg_color)
time.sleep_ms(1000)
可以看到首先是使用lcd模块对LCD进行初始化,接着在一个循环中不断改变LCD的背景颜色,并在LCD上显示一段字符串。
24.4 运行验证
将DNK210开发板连接CanMV IDE后,点击CanMV IDE上的“开始(运行脚本)”按钮后,可以看到LCD上显示了一段字符串,并不断地更换背景颜色,如下图所示:
图24.4.1 LCD显示(白色背景)
图24.4.2 LCD显示(蓝色背景)