学年论文-基于STM32的LCD显示屏设计.docx
- 文档编号:4907575
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:20
- 大小:901.88KB
学年论文-基于STM32的LCD显示屏设计.docx
《学年论文-基于STM32的LCD显示屏设计.docx》由会员分享,可在线阅读,更多相关《学年论文-基于STM32的LCD显示屏设计.docx(20页珍藏版)》请在冰点文库上搜索。
本科学年论文(设计)
基于STM32的LCD显示屏设计
系 别
专业
届别
班级
学生姓名
学号
指导教师
职称
二O一六年六月
目录
1前言
1.1设计的背景 1
1.2研究现状及发展趋势 1
2硬件设计
2.1系统的总体设计 3
2.1.1STM32的主控模块 3
2.1.2电源模块 5
2.1.3复位电路模块 5
2.1.4晶振电路 6
2.1.5SD卡读取模块 6
2.2LCD控制器 7
2.2.1ILI9341控制器结构 7
2.2.2像素点的数据格式 8
2.2.3ILI9341的通讯时序 8
3软件设计
3.1字模提取方法 10
3.1.1字模 10
3.1.2制作字模 10
3.2显示中英文及BMP图片 11
3.2.1配置工程环境 12
3.2.2main文件 12
3.2.3显示中英文的主要代码 13
3.2.4显示BMP图片的主要代码 14
4系统调试 ……18
5结论 18
1前言
1.1设计的背景
液晶显示器(LCD)已广泛应用于计算机、电视及智能仪表中,它的主要优点是功耗低、控制电压低、集成电路容易控制。
LCD显示屏的体积小、重量轻、超薄等特点是其它显示屏无法比拟的。
近几年来被广泛用于单片机控制的智能仪器、仪表和低功耗电子产品中。
LCD可分为段式LCD、字符式LCD和点阵式LCD。
其中段位式LCD和字符式LCD只能用于字符和数字简易显示,而不能够满足图形曲线和汉字显示的要求;而点阵式LCD不仅可以显示字符、数字,还可以显示各种图形、曲线和汉字,并且可以实现屏幕上下左右滚动,动画功能,区分开窗口,反转,闪烁等功能,用途十分广泛[1]。
液晶显示器作为一种新型显示输出设备,消除了传统CRT的屏幕闪烁和像素抖动,不仅具有高亮度、对比度,高可靠性、抗干扰能力强等优点,而且体积小,功耗低、宽视野、色彩鲜明、无辐射。
随着相关技术的日趋成熟,它的应用领域迅速扩展,尤其是在工业控制,医疗仪器、机电设备、商业消费等方面,正逐渐成为新的热点。
LCD显示多采用专用的控制器,功能强大,实了很好的显示效果。
但是其价格高昂,且多要求有的操作系统实现控制功能。
这必然限制其在功能要求不高、对价格敏感的小型设备中使用。
1.2研究现状及发展趋势
在LCD显示应用领域,通常数据源输出图像的分辨率是变化的,而从工业生产标准化要求和获得最佳显示效果的角度出发,LCD显示器的物理分辨率则是固定不变的。
这就需要将不同分辨率的输入图像经过缩放后输出到分辨率固定的LCD显示器上,当前工业上解决这一问题的方案是在输入数据源和数据显示设备之间设置LCD图像引擎来实现缩放处理[2]。
LCD显示器是纯数字设备,数字接口是其最佳的选择,随着数字接口技术标准逐渐地统一起来,越来越多的显示芯片具备了支持数字视频输出的能力,显卡制造商也开始在显卡上集成数字显示接口。
基于这种现状,当前LCD图像引擎芯片也就存在基于模拟到接口和数字接口两种类型[3]。
两类芯片尽管实现基本功能一致,但是由于标准的不同,结构存在较大差异。
采用模拟接口方式时,图像信号处理流程是:
显卡首先将数字图像信号变为模拟信号(DAC),然后由电缆送到显示器上,显示器再将模拟信号变为数字信号(ADC),最后经过图像放处理后进行图像显示[4]。
这样,信号经由DAC,ADC到最后的信号输出实际上是一个多余循环过程,这个循坏没有任何积极的意义,相反还引入了三个信号失真源:
DAC、电缆、ADC,最终影响了图像的输出效果。
采用数字接口方式则去掉了这些不必要的环节,直接输出数字视频信号,经图像缩放处理后,就可以直接送到显示器进行显示,图像的输出效果毫无疑问会优于前一种模式。
数字接口取代模拟接口是大势所趋,考虑到数模接口兼容,目前很多厂商在同一芯片上不仅提供数字接口,而且提供模拟接口[5]。
进入大尺寸LCD图像引擎IC的门槛较LCD驱动IC要高,涉及专利问题较多,由目前主要Genesis、PHILIPS、NS(NationalSemiconductor),ST(STMicroelectronics)等国际大厂控制[6]。
在庞大市场需求的强力吸引下,中国台湾陆续有数十家IC设厂投入到LCD显示相关芯片领域。
台湾地区厂商晨星(Mstar)、凌泰(Averlogic)、兆宏(Magicpixel)、联咏(Novatek)、瑞昱(Realtek)、晶磊(Smartasic)、创品(Trumpion)、凌越(Topro)、世纪民生(Mysoncentury)、晶捷科技(MRT)等厂家在LCD图像引擎芯片市场也取得了一定份额。
目前我国IC设计公司数量已经突破400家大关,但在LCD图像引擎芯片的研发上[7],内地IC设计公司参与者却寥寥无几。
目前仅有成都威斯达在进行这方面的研发和设计,其面向LCDTV的主打方案WS1115、WSC2100也已经得到了成功的应用。
LCD显示屏的发展主要有如下几个趋势:
1)实现分离式图像引擎IC到初期较低程度整合,再到高集成度整合的转变。
2)LCD图像引擎数字接口将取代模拟接口。
3)低摆幅差分信号RSDS逐步导入控制板的输出介面[8]。
4)在控制IC中为家庭中的PC、DVD、TVCable、PS2、xBox等影音数据源提供更加广阔的匹配接口,使大尺寸LCD显示器功能更加多样化。
5)LCD面板开始步入10bits,因此支持10bits的LCD像引擎也将成为标准要求,同时宽屏LCD显示器成为了消费者的新宠。
总而言之,LCD显示器正朝着更多的输出、更快的速度、更高的品质(考虑电磁兼容等方面的设计加入)、更低的功耗等方向快速发展[9]。
2硬件设计
2.1系统的总体设计
本次设计是通过在STM32进行软件编程来控制LCD液晶显示屏的显示设计。
它的整体思想是系统电源部分可以使用5V电源端口供电,再通过3.3V稳压芯片得到单片机与LCD显示模块所需电源。
单片机采用STM32系列的STM32F103VET6,采用LCD液晶显示模块作为系统的显示部分。
通信接口电路主要是由芯片PL2303构成,它的功能主要是将电脑的USB接口转换为串口,同时还将PC的逻辑电平转换为与单片机系统相同的CMOS电平,方便程序的烧写以及与上位机的通信。
系统结构框图如图2.1所示。
STM32F103
复位电路
SD卡读取模块
晶振电路
LCD显示模块
电源电路
图2-1系统结构图
2.1.1STM32的主控模块
STM32是整个LCD显示设计的核心部分。
这是一个具有较高性能而又经济的单片机。
本设计选用属于STM32系列的STM32F103VET6作为控制电路的核心部件,该单片机属于ST意法半导体公司生产的32位高性能、低成本、低功耗的增强型系列单片机,它的内核采用的是ARM公司最新研发的CortexTM-M3架构,该内核是专门设计于满足用户对高性能、低功耗和经济实用的要求。
ARM Cortex-M3处理器的架构在系统结构上的增强,最高36MHz工作频率,在存储器的0等待周期访问时可达1.25DMips/MHz(Dhrystone2.1),它使得STM32增强型系列单片机受益无穷,其采用的THUMB-2指令集使得其指令效率更高,而且性能更强。
STM32F103ZET6采用薄型四方扁平式封装技术(LQFP)具有100管脚,片内具有8M的SPIFLASH,64KB的RAM(片上集成12Bit A/D、D/A、PWM、CAN、USB、安全数字输入输出卡SDIO、可变静态存储控制器FSMC等资源)。
1个串行外设接口(SPI)总线控制的M25P16(16MB容量的串行FLASH),用于存储数据、代码、字库及图相等。
1个3.2寸240*320分辨率触摸屏,利用MCU的FSMC的16位数据接口模式,触摸屏采用ADS7843(4线电阻触摸屏转换接口芯片)芯片用硬SPI接口控制。
STM32单片机采用2.0~3.6V的供电电压,可以工作在-40℃~85℃的温度范围内,其最高的工作频率是72MHz,其最小电路如图2-2所示,其资源图如图2-3所示。
图2-232F103VET6的最小系统
图2-3硬件资源描述图
2.1.2电源模块
STM32单片机由AMS1117-3.3芯片电路供电,输入+5V,提供3.3V的固定电压输出,为了降低电磁干扰,需要经C1-C3滤波后再为CPU供电,R38为DGND与AGND的连接电阻,电源电路如图2-4所示。
图2-4电源电路
2.1.3复位电路模块
复位电路对单片机系统非常重要。
复位电路有几点要求,其一,上电时有足够的有效复位电平时间,以便CPU在晶振起振达到稳态后可靠复位;其二,系统断电后,复位端能快速放电,以便使系统在连续快速开关时能可靠复位。
本电路中,要复位只需要在接高电平持续2us就可以实现。
在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。
所以可以通过按键的断开和闭合在运行的系统中控制其复位。
图2-5复位电路
2.1.4晶振电路
有源晶振是一个完整的谐振振荡器,它是利用石英晶体的压电效应来起振,所以有源晶振需要供电,当我们把有源晶振电路做好后,不需要外接其它器件,只要给它供电,它就可以主动产生振荡频率,并且可以提供高精度的频率基准,信号质量也比无源信号要好。
有源晶振通常有4个引脚,VCC,GND,晶振输出引脚和一个使能引脚。
电路只需要接到单片机的晶振的输入引脚上,输出引脚上不需要接。
图2-6晶振电路
2.1.5SD卡读取模块
SD卡的数据写入、读取的最小单位是块,每块的大小为512字节。
见图19-4,为多个数据块的写入过程。
首先软件通过SDIO接口的CMD信号线发送多块写入的命令,接收到正常的响应后,要写入的数据线从4根DAT信号线传输出去,每块结束后是CRC校验码。
接着要检测忙状态,数据传输到SD卡后,SD卡启动内部时序保存数据,这时SD卡会把DAT0信号线拉低,表示处于“忙”状态,忙状态结束后,主机才能发送下一个数据块的数据。
图2-7STM32的SDIO接口
2.2LCD控制器
LCD,即液晶显示器,因为其功耗低、体积小,承载的信息量大,因而被广泛用于信息输出、与用户进行交互,目前仍是各种电子显示设备的主流。
因为STM32内部没有集成专用的液晶屏和触摸屏的控制接口,所以在显示面板中应自带含有这些驱动芯片的驱动电路(液晶屏和触摸屏的驱动电路是独立的),STM32芯片通过驱动芯片来控制液晶屏和触摸屏。
本系统使用的STM32有3.2寸液晶屏(240*320),它使用ILI9341芯片控制液晶屏,通过XPT2046芯片控制触摸屏。
2.2.1ILI9341控制器结构
液晶屏的控制芯片内部结构非常复杂,见图2-8。
最主要的是位于中间GRAM,可以理解为显存。
GRAM中每个存储单元都对应着液晶面板的一个像素点。
它右侧的各种模块共同作用把GRAM存储单元的数据转化成液晶面板的控制信号,使像素点呈现特定的颜色,而像素点组合起来则成为一幅完整的图像。
框图的左上角为ILI9341的主要控制信号线和配置引脚,根据其不同状态设置可使芯片工作在不同的模式,如每个像素点的位数是6、16还是18位;使用SPI接口还是8080接口与MCU进行通讯;使用8080接口的哪种模式。
MUC通过SPI或8080接口与ILI9341进行通讯,从而访问它的控制寄存器、地址计数器及GRAM。
在GRAM的左侧还有一个LED控制器。
LCD为非发光性的显示装置,它需要借助背光源才能达到显示功能,LED控制器就是用来控制它的背光源。
图2-8ILI9341控制器内部框图
2.2.2像素点的数据格式
图像数据的像素点由红(R)、绿(G)、蓝(B)三原色组成,三原色根据其深浅程度被分为0~255个级别,它们按不同比例的混合可以得出各种色彩。
如R:
255,G255,B255混合后为白色。
根据描述像素点数据的长度,主要分为8、16、24及32位。
如以8位来描述的像素点可表示28=256色,16位描述的为216=65536色,称为真彩色,也称为64K色。
实际上受人眼对颜色的识别能力的限制,16位色与12位色已经难以分辨了。
ILI9341最高能够控制18位的LCD,但为了数据传输简便,这里采用的是它的16位控制模式,以16位描述的像素点。
按照标准格式,16位的像素点的三原色描述的位数为R:
G:
B=5:
6:
5,描述绿色的位数较多是因为人眼对绿色更为敏感。
16位的像素点格式见表2.116位像素点格式。
表2.116位像素点格式
图中的是默认18条数据线时,像素点三原色的分配状况,D1~D5为蓝色,D6~D11为绿色,D13~D17为红色。
这样分配有D0和D12位是无效的。
若使用16根数据线传送像素点的数据,则D0~D4为蓝色,D5~D10为绿色,D11~D15为红色,使得刚好使用完整的16位。
RGB比例为5:
6:
5是一个十分通用的颜色标准,在GRAM相应的地址中填入该颜色的编码,即可控制LCD输出该颜色的像素点。
如黑色的编码为0x0000,白色的编码为0xffff,红色为0xf800。
2.2.3ILI9341的通讯时序
目前,大多数的液晶控制器都使用8080或6800接口与MCU进行通讯,它们的时序十分相似,本单片机以ILI9341使用的8080通讯时序进行分析,实际上ILI9341也可以使用SPI接口来控制。
ILI9341的8080接口有5条基本的控制信号线:
(1)用于片选的CSX信号线;
(2)用于写使能的WRX信号线;
(3)用于读使能的RDX信号线;
(4)用于区分数据和命令的D/CX信号线;
(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中。
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文件格式。
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系统流程图
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.2main文件
显示中英文字符和BMP图片用了两个函数,所以在这里放置了两个main函数。
显示汉字的main函数它调用了很多函数,主要是将SD卡的读取接口和LCD初始化,再调用扫描和读取的函数,并设置了要显示的中英文。
同样的,显示BMP图片的main函数也调用了一些函数用于显示BMP图。
//显示汉字的main函数
intmain(void)
{ Sd_fs_init();//初始化SDIO
LCD_Init();//LCD初始化
ILI9341_GramScan
(1);//设定(坐标轴)扫描方向
ILI9341_Clear(0,0,240,320,macBLACK);
ILI9341_DispString_EN(5,5,"Iamqq",macBLACK,macRED);
ILI9341_DispString_EN(5,25,"myxuehaois2......",macBLACK,macRED)
ILI9341_DispString_CH(50,57,"XX大学",macBLACK,macRED);
ILI9341_DispString_EN_CH(30,90,"Welcometouse野火ISOStm32开发板bigo------",macBLACK,macRED);
while
(1); }
//显示图片的main函数
intmain(void)
{ Sd_fs_init();//初始化SDIO
LCD_Init();//LCD初始化
Lcd_show_bmp(10,10,"/pic1.bmp"); //显示BMP图片
Lcd_show_bmp(10,100,"/pic2.bmp"); while
(1); }
3.2.3显示中英文的主要代码
ILI9341_DispString_EN_CH()函数的作用主要为在ILI9341显示器上显示中英文字符串,在得到特定扫描方向下字符串的起始X、Y坐标后进行对像素数据的读取,然后设置字符串的背景色、前景色,将字符显示出来。
/**
*@brief在ILI9341显示器上显示中英文字符串
*@paramusX:
在特定扫描方向下字符串的起始X坐标
*@paramusY:
在特定扫描方向下字符串的起始Y坐标
*@parampStr:
要显示的字符串的首地址
*@paramusColor_Background:
选择字符串的背景色
*@paramusColor_Background:
选择字符串的前景色
*@retval无
*/
voidILI9341_DispString_EN_CH(uint16_tusX,uint16_tusY,constuint8_t*pStr,uint16_tusColor_Background,uint16_tusColor_Foreground)
{ uint16_tusCh;
while(*pStr!
='\0')
{ if(*pStr<=126) //英文字符
{ if((usX-macILI9341_DispWindow_X_Star+macWIDTH_EN_CHAR)>macILI9341_DispWindow_COLUMN)
{ usX=macILI9341_DispWindow_X_Star;
usY+=macHEIGHT_EN_CHAR; }
if((usY-macILI9341_DispWindow_Y_Star+macHEIGHT_EN_CHAR)>macILI9341_DispWindow_PAGE)
{ usX=macILI9341_DispWindow_X_Star;
usY=macILI9341_DispWindow_Y_Star; }
ILI9341_DispChar_EN(usX,usY,*pStr,usColor_Background,usColor_Foreground);
usX+=macWIDTH_EN_CHAR;
pStr++;
}
else //汉字字符
{ if((usX-macILI9341_DispWindow_X_Star+macWIDTH_CH_CHAR)>macILI9341_DispWindow_COLUMN)
{ usX=macILI9341_DispWindow_X_Star;
usY+=macHEIGHT_CH_CHAR; }
if((usY-macILI9341_DispWindow_Y_Star+macHEIGHT_CH_CHAR)>macILI9341_DispWindow_PAGE)
{ usX=macILI9341_DispWindow_X_Star;
usY=macILI9341_DispWindow_Y_Star; }
usCh=*(uint16_t*)pStr;
us
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学年 论文 基于 STM32 LCD 显示屏 设计