LCD的应用很广泛,简单如手表上的液晶显示屏,仪表仪器上的液晶显示器或者是电脑笔记本上的液晶显示器,都使用了LCD。在一般的办公设备上也很常见,如传真机,复印机,以及一些娱乐器材玩具等也常常见到LCD的足迹。
本小节使用的是ST7789V, 用于单片驱动262K色图像TFT-LCD, 包含 720(240*3色) x 320 线输出, 可以直接以SPI协议, 或者8位/9位/16位/18位并行连接外部控制器。ST7789V显示数据存储在片内240x320x18 bits内存中, 显示内存的读写不需要外部时钟驱动。
接下来先看本案例的实际操作视频。
模块整体硬件电路如图1所示,电路中包含了电源电路、液晶接口以及小凌派-RK2206开发板连接的相关引脚。
图1 硬件电路图
其中,液晶屏ST7789V的相关引脚资源如图2所示。
图2 液晶屏ST7789V硬件资源示意图
其中,LCD液晶屏引脚功能描述,如下表1所示。
表1 LCD液晶屏引脚功能表
序号 |
LCD引脚 |
功能描述 |
1 |
D/C |
指令/数据选择端,L:指令,H:数据 |
2 |
RESET |
复位信号线,低电平有效 |
3 |
SPI_MOSI |
SPI数据输入信号线 |
4 |
SPI_CLK |
SPI时钟信号线 |
5 |
SPI_CS |
SPI片选信号线,低电平有效 |
6 |
GND |
电源地引脚 |
7 |
5V |
5V电源输入引脚 |
其中,LCD液晶屏与小凌派-RK2206开发板连接如图3所示。
图3 2.4寸液晶屏和小凌派-RK2206开发板连接图
本章节将利用小凌派-RK2206开发板上的GPIO和SPI接口方式来点亮2.4寸液晶屏,并实现ASCII字符的显示及汉字的显示。
如图4所示为LCD液晶屏主程序流程图,开机LiteOS系统初始化后,进入主程序。主程序首先进行GPIO和SPI总线初始化,然后配置LCD液晶屏设备,最后进入循环中。在循环中,主程序控制SPI对LCD液晶屏进行ASCII字符和汉字显示。
图4 主程序流程图
LCD初始化程序主要分为GPIO和SPI总线初始化,配置LCD两部分。
其中,GPIO初始化首先用LzGpioInit()函数将GPIO0_PC3初始化为GPIO引脚,然后用LzGpioSetDir()将引脚设置为输出模式,最后调用LzGpioSetVal()输出低电平。
SPI初始化首先用SpiIoInit()函数将GPIO0_PC0复用为SPI0_CS0n_M1,GPIO0_PC1复用为SPI0_CLK_M1,GPIO0_PC2复用为SPI0_MOSI_M1。其次调用LzI2cInit()函数初始化SPI0端口。
配置LCD主要是配置ST7789V的工作模式,具体代码如下所示:
ST7789V采用SPI通信方式,数据传输协议如下:
4-Line Serial Interface => 16-bit/pixel(RGB 5-6-5-bit input),65K-Color,3Ah="05h"
数据传输时序图如图5所示。
图5 ST7789V液晶屏SPI数据传输时序图
也就是每个像素占用2个字节,RGB为5+6+5。因此,往LCD液晶屏发送某一个像素信息的程序如下所示:
预先将规定字号的ASCII字符的LCD液晶屏像素信息存放于在lcd_font.h源代码文件中。该表格依照ASCII的数值来存放像素信息。例如:空格的ASCII数值是0x0,则程序将像素放到第一行像素中,如下源代码所示。
当需要将某一个字号的ASCII字符投射到LCD液晶屏时,程序根据字号大小找到对应的字号的ASCII字符像素表,然后根据ASCII字符的数值找到对应的像素行,最后将该像素行数据依次通过SPI总线发送给LCD液晶屏。如下源代码所示。
同上原理,程序将某一个特定字号的汉字信息存放于一个数据结构体数组中。该数据结构体包含字体编码Index和像素数据Msk。具体原代码如下所示。
通过汉字像素软件将对应的汉字和像素存放于lcd_font.h文件中。具体源代码如下所示。
当程序需要将某一个特定字号的汉字投射到LCD液晶屏时,程序就根据对应的字号查找对应字号的tfontXX数组,并将对应的像素行数据发送给LCD液晶屏。具体源代码如下所示。
1、打开sdk下面路径的文件
/vendor/lockzhiner/rk2206/samples/b4_lcd/lcd_example.c
注意:Gitee已有相关源代码,请大家根据上述的需求修改相关源代码。
网址:https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk2206-openharmony3.0lts/tree/master/vendor/lockzhiner/rk2206/samples/b4_lcd
2、修改编译脚本
修改 vendor/lockzhiner/rk2206/sample 路径下 BUILD.gn 文件,指定 lcd_example 参与编译。
"./b4_lcd:lcd_example",
修改 device/lockzhiner/rk2206/sdk_liteos 路径下 Makefile 文件,添加 -llcd_example 参与编译。
hardware_LIBS = -lhal_iothardware -lhardware -llcd_example
3、编译固件
hb set -root .
hb set
hb build -f
来源:凌智电子
全部0条评论
快来发表一下你的评论吧 !