学年论文-基于STM32的LCD显示屏设计(3)

2019-04-23 19:50

(5)用于复位的RESX信号线。

其中带X的表示低电平有效。除了控制信号,还有数据信号线,它的数目不定,可根据ILI9341框图中的IM[3:0]来设定,这部分一般由制作液晶屏的厂家完成。为便于传输像素点数据,野火使用的液晶屏设定为16条数据线D[15:0]。使用8080接口的写命令时序图见图2-9。

图2-9 使用18条数据线的8080接口写命令时序

由图可知,写命令时序由CSX信号线拉低开始,D/CX信号线也置低电平表示写入的是命令地址(可理解为命令编码,如软件复位命令:0x01),以WRX信号线为低,RDX信号为高表示数据传输方向为写入,同时,在数据线[17:0]输出命令地址,在第二个传输阶段

传送的为命令的参数,所以D/CX要置高电平,表示写入的是命令数据。 当我们需要向GRAM写入数据的时候,把CSX信号线拉低后,把D/CX信号线置为高电平,这时由D[17:0]传输的数据则会被ILI9341保存至它的GRAM中。

9

3 软件设计

3.1 字模提取方法 3.1.1 字模

液晶屏是一个由像素点组成的点阵,若要显示文字,则需要很多像素点的共同构成。见图 3-1,图中是两个由16*16的点阵显示的两个汉字。

图3-1 字模

如果规定:每个汉字都由这样16*16的点阵来显示,把笔迹经过的像素点以“1”表示,没有笔迹的点以“0”表示,每个像素点的状态以一个二进制位来记录,用16*16/8=32个字节就可以把这个字记录下来。这32个字节数据就称为该文字的字模,还有其它常用字模是24*24、32*32的。

在这样的字模中,以两个字节表示一行像素点,16行构成一个字模。如果使用LCD的画点函数,按位来扫描这些字模数据,把为1的位以黑色来显示(也可以使用其它颜色),即可把整个点阵还原出来,显示在液晶屏上。

3.1.2 制作字模

本文采用“字模Ⅲ-增强版 v3.91”字模软件来制作中文字库。步骤如下: 1、打开字模软件

2、点击“批量生成字库”按钮选项

3、点击选项“文本文件”,在打开的界面里选择“GB2132.txt”。如图3-5、图3-6所示。此时在“输入批量字符框”里会列出二级汉字的所有汉字,其中共收录了6768个汉字字符。

4、点击“字库智能生成”,弹出“字库批量参数确认”对话框。我们在“源字体”选项里面做如下设置,字模宽度和高度都选择16,因为要放在SD卡中,所以选择BIN文件格式。

10

5、点击“开始转换进程”,就会在软件安装目录下会生成Font.dat文件。将生成的汉字字库拷贝到SD卡根目录下并重命名为“HZLIB.bin”。把该文件保存到SD卡中,STM32芯片通过文件系统读取文件即可获得字库的数据。

3.2 显示中英文及BMP图片

系统的流程图如图3-3所示,先将LCD的引脚和寄存器初始化;再向ILI19431写入命令和数据;配置FSMC;再设置ILI9431的GRAM的扫描方向:左上角>右下角为显示中英文的采用的模式,右下角>左上角为显示摄像头图像,右上角>左下角为显示BMP图片;对ILI9431显示器进行设置,读取ILI9431的像素数据;在ILI9431显示器上画出一个矩形;在ILI9431显示器上显示英文、中文字符和BMP图片。

图3-3 系统流程图

11

3.2.1 配置工程环境

本实验需要制作字库,其文件名为:HZLIB.bin,三个BMP图片文件,文件名为:pic1.bmp、pic2.bmp、pic3.bmp,把这四个文件保存到SD卡中,再把该SD卡插入开发板的SD卡接口。

本实验中要把旧文件:systick.c、usart1.c、lcd.c、ff.c、sdio_sdcard.c、lcd_botton.c文件添加进新工程,新建Sd_bmp.c、sd_fs_app.c文件,分别用于编写BMP文件相关的函数和字模获取函数。

3.2.2 main文件

显示中英文字符和BMP图片用了两个函数,所以在这里放置了两个main函数。显示汉字的main函数它调用了很多函数,主要是将SD卡的读取接口和LCD初始化,再调用扫描和读取的函数,并设置了要显示的中英文。同样的,显示BMP图片的main函数也调用了一些函数用于显示BMP图。

//显示汉字的main函数 int main ( void )

{ Sd_fs_init(); //初始化SDIO LCD_Init (); //LCD初始化

ILI9341_GramScan(1); //设定(坐标轴)扫描方向 ILI9341_Clear ( 0, 0, 240, 320, macBLACK );

ILI9341_DispString_EN (5,5, \

ILI9341_DispString_EN (5,25,\ ILI9341_DispString_CH (50,57, \大学\

ILI9341_DispString_EN_CH (30, 90, \to use 野火 ISO Stm32 开发板

bigo------\

while ( 1 );

}

//显示图片的main函数 int main ( void )

{ Sd_fs_init(); //初始化SDIO LCD_Init (); //LCD 初始化 Lcd_show_bmp( 10,10,\ Lcd_show_bmp( 10,100,\

//显示BMP图片 while ( 1 );

12

}

3.2.3 显示中英文的主要代码

ILI9341_DispString_EN_CH()函数的作用主要为在ILI9341显示器上显示中英文字符串,在得到特定扫描方向下字符串的起始X、Y坐标后进行对像素数据的读取,然后设置字符串的背景色、前景色,将字符显示出来。

/**

* @brief 在ILI9341 显示器上显示中英文字符串 * @param usX :在特定扫描方向下字符串的起始X坐标 * @param usY :在特定扫描方向下字符串的起始Y坐标 * @param pStr :要显示的字符串的首地址

* @param usColor_Background :选择字符串的背景色 * @param usColor_Background :选择字符串的前景色 * @retval 无 */

void ILI9341_DispString_EN_CH ( uint16_t usX, uint16_t usY, const uint8_t * pStr, uint16_t usColor_Background, uint16_t usColor_Foreground ) { uint16_t usCh;

while( * pStr != '\\0' ) { if ( * pStr <= 126 )

//英文字符

{ if ( ( usX - macILI9341_DispWindow_X_Star + macWIDTH_EN_CHAR ) > } else

//汉字字符

{ if ( ( usX - macILI9341_DispWindow_X_Star + macWIDTH_CH_CHAR ) >

{ usX = macILI9341_DispWindow_X_Star;

usY += macHEIGHT_CH_CHAR; }

if ( ( usY - macILI9341_DispWindow_Y_Star + macHEIGHT_CH_CHAR ) >

13

macILI9341_DispWindow_COLUMN )

{ usX = macILI9341_DispWindow_X_Star;

usY += macHEIGHT_EN_CHAR; }

if ( ( usY - macILI9341_DispWindow_Y_Star + macHEIGHT_EN_CHAR ) > { usX = macILI9341_DispWindow_X_Star;

usY = macILI9341_DispWindow_Y_Star;

}

macILI9341_DispWindow_PAGE )

ILI9341_DispChar_EN(usX,usY,*pStr,usColor_Background, usColor_Foreground );

usX += macWIDTH_EN_CHAR; pStr ++;

macILI9341_DispWindow_COLUMN )


学年论文-基于STM32的LCD显示屏设计(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:财政与税收教学设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: