TFTLCD彻底解析和程序.docx

上传人:b****4 文档编号:3083197 上传时间:2022-11-17 格式:DOCX 页数:19 大小:19.47KB
下载 相关 举报
TFTLCD彻底解析和程序.docx_第1页
第1页 / 共19页
TFTLCD彻底解析和程序.docx_第2页
第2页 / 共19页
TFTLCD彻底解析和程序.docx_第3页
第3页 / 共19页
TFTLCD彻底解析和程序.docx_第4页
第4页 / 共19页
TFTLCD彻底解析和程序.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

TFTLCD彻底解析和程序.docx

《TFTLCD彻底解析和程序.docx》由会员分享,可在线阅读,更多相关《TFTLCD彻底解析和程序.docx(19页珍藏版)》请在冰豆网上搜索。

TFTLCD彻底解析和程序.docx

TFTLCD彻底解析和程序

先介绍ILI9320的几个重要命令:

R0,这个命令有两个功能,如果对它写,则最低位为OSC,用于开启和关闭振荡器。

而如果对它读操作,则返回的是控制器的型号。

这个命令最大的功能是通过读它可以得到控制器的型号,而我们的代码知道了控制器的型号之后,可以针对不同型号的控制器,进行不同的初始化。

因为93xx系列的初始化,其实都比较类似,我们完全可以用一个代码兼容好几个控制器。

R3,入口模式命令。

我们重点关注的是I/D0、I/D1、AM这三个位,因为这三个位控制了屏幕的显示方向。

AM:

控制GRAM更新方向。

当AM=0的时候,地址以行方向更新。

当AM=1的时候,地址以列方向更新。

I/D[1:

0]:

当更新一个数据之后,根据这两个位的设置来控制地址计数器自动增加/减少1,其关系如下:

通过这几个位置的设置,我们就可以控制屏幕的显示方向了。

R7,显示控制命令。

该命令CL位用来控制是8位彩色,还是26万色。

为0时26万色,为1时8位色。

D1、D0、BASEE这个三个位用来控制显示开关与否的。

当全部设置为1的时候开启显示,全为0是关闭。

我们一般通过该命令的设置来开启或关闭显示器,以降低功耗。

R32,R33,设置GRAM的行地址和列地址。

R32用于设置列地址(X坐标,0~239),R33用于设置行地址(Y坐标,0~319)。

当我们要在某个指定点写入一个颜色的时候,先通过这两个命令设置到改点,然后写入颜色值就可以了。

R34,写数据到GRAM命令,当写了这个命令之后,地址计数器才会自动的增加和减少。

该命令是我们要介绍的这一组命令里面唯一的单个操作的命令,只需要写入该值就可以了,其他的都是要先写入命令编号,然后写入操作数。

R80~R83,行列GRAM地址位置设置。

这几个命令用于设定你显示区域的大小,我们整个屏的大小为240*320,但是有时候我们只需要在其中的一部分区域写入数据,如果先用写坐标,后写数据这样的方式来实现,则速度大打折扣。

此时我们就可以通过这几个命令,在其中开辟一个区域,然后不停的丢数据,地址计数器就会根据R3的设置自动增加/减少,这样就不需要频繁的写地址了,大大提高了刷新的速度。

通过以上介绍,我们可以得出TFT-lcd显示需要的相关设置步骤如下:

(1)设置单片机(STM32)与TFT-LCD模块相连的IO口

这一步,先将我们与TFT-LCD模块相连的IO口设置为输出,具体使用哪些IO口,这里需要根据连接电路以及TFT-LCD模块的设置来确定;

(2)初始化TFT-LCD模块

通过向TFT-LCD写入一系列的设置,来启动TFT-LCD的显示,为后续显示字符和数字做准备;

(3)通过函数将字符和数字显示到TFT-LCD模块上

这里就是通过我们设计的程序,将要显示的字符送到TFT-LCD模块就可以了。

#include"lcd.h"

#include"fonts.h"

staticvu16TextColor=0x0000,BackColor=0xFFFF;voidDelay(intn)

{

unsignedinti,j;

for(i=0;i

for(j=0;j<3000;++j);

}

//LCD寄存器初始化

#definelcm_mdelay(X)Delay(X)

voidlcd_reg_init(void)

{

LCD_WriteReg(0x0000,0x0001);

lcm_mdelay(1000);//atleast100ms

LCD_WriteReg(0x0001,0x0000);//setSSandSMbit//LCD_CtrlWrite(0x0003,0x1030);//setGRAMwritedirectionandBGR=1.

LCD_WriteReg(0x0010,0x1790);

LCD_WriteReg(0x0060,0x2700);

LCD_WriteReg(0x0061,0x0001);

LCD_WriteReg(0x0046,0x0002);

LCD_WriteReg(0x0013,0x8010);

LCD_WriteReg(0x0012,0x80fe);

LCD_WriteReg(0x0002,0x0500);

LCD_WriteReg(0x0003,0x1030);

LCD_WriteReg(0x0030,0x0303);

LCD_WriteReg(0x0031,0x0303);

LCD_WriteReg(0x0032,0x0303);

LCD_WriteReg(0x0033,0x0300);

LCD_WriteReg(0x0034,0x0003);

LCD_WriteReg(0x0035,0x0303);

LCD_WriteReg(0x0036,0x0014);

LCD_WriteReg(0x0037,0x0303);

LCD_WriteReg(0x0038,0x0303);

LCD_WriteReg(0x0039,0x0303);

LCD_WriteReg(0x003a,0x0300);

LCD_WriteReg(0x003b,0x0003);

LCD_WriteReg(0x003c,0x0303);

LCD_WriteReg(0x003d,0x1400);

LCD_WriteReg(0x0092,0x0200);

LCD_WriteReg(0x0093,0x0303);

LCD_WriteReg(0x0090,0x080d);

LCD_WriteReg(0x0003,0x1018);//setGRAMwritedirectionandBGR=1.

LCD_WriteReg(0x0007,0x0173);

}

//LCD初始化

voidSTM3210B_LCD_Init(void)

{

vu16dummy=0;

LCD_CtrlLinesConfig();

lcd_reg_init();

dummy=LCD_ReadReg(0);

}

//设置文字颜色

voidLCD_SetTextColor(vu16Color)

{

TextColor=Color;

}

//设置背景色

voidLCD_SetBackColor(vu16Color)

{

BackColor=Color;

}

//清除行,Line:

0-9

voidLCD_ClearLine(u8Line)

{

LCD_DisplayStringLine(Line,"");}

//LCD清屏

voidLCD_Clear(u16Color)

{

u32index=0;

LCD_SetCursor(0x00,0x0000);

LCD_WriteRAM_Prepare();/*PreparetowriteGRAM*/for(index=0;index<76800;index++)

{

LCD_WriteRAM(Color);

}

}

//LCD光标设置

voidLCD_SetCursor(u8Xpos,u16Ypos)

{

LCD_WriteReg(R32,Xpos);

LCD_WriteReg(R33,Ypos);

}

//在LCD指定位置上显示

voidLCD_DrawChar(u8Xpos,u16Ypos,uc16*c)

{

u32index=0,i=0;

u8Xaddress=0;

Xaddress=Xpos;

LCD_SetCursor(Xaddress,Ypos);

for(index=0;index<24;index++)

{

LCD_WriteRAM_Prepare();/*PreparetowriteGRAM*/for(i=0;i<16;i++)

{

if((c[index]&(1<

{

LCD_WriteRAM(BackColor);

}

else

{

LCD_WriteRAM(TextColor);

}

}

Xaddress++;

LCD_SetCursor(Xaddress,Ypos);

}

}

//显示一个字符

voidLCD_DisplayChar(u8Line,u16Column,u8Ascii){

Ascii-=32;

LCD_DrawChar(Line,Column,&ASCII_Table[Ascii*24]);}

//LCD显示字符串

voidLCD_DisplayStringLine(u8Line,u8*ptr)

{

u32i=0;

u16refcolumn=319;//319;

while((*ptr!

=0)&&(i<20))//20

{

/*DisplayonecharacteronLCD*/

LCD_DisplayChar(Line,refcolumn,*ptr);

/*Decrementthecolumnpositionby16*/

refcolumn-=16;

/*Pointonthenextcharacter*/

ptr++;

/*Incrementthecharactercounter*/

i++;

}

}

//设置LCD显示模式

voidLCD_SetDisplayWindow(u8Xpos,u16Ypos,u8Height,u16Width)

{

if(Xpos>=Height)

{

LCD_WriteReg(R80,(Xpos-Height+1));

}

else

{

LCD_WriteReg(R80,0);

}

LCD_WriteReg(R81,Xpos);

if(Ypos>=Width)

{

LCD_WriteReg(R82,(Ypos-Width+1));

}

else

{

LCD_WriteReg(R82,0);

}

/*VerticalGRAMEndAddress*/

LCD_WriteReg(R83,Ypos);

LCD_SetCursor(Xpos,Ypos);

}

//LCD窗口模式配置

voidLCD_WindowModeDisable(void)

{

LCD_SetDisplayWindow(239,0x13F,240,320);

LCD_WriteReg(R3,0x1018);

}

//LCD画线

voidLCD_DrawLine(u8Xpos,u16Ypos,u16Length,Direction)

{

u32i=0;

LCD_SetCursor(Xpos,Ypos);

if(Direction==Horizontal)u8LCD_WriteRAM(TextColor);

LCD_SetCursor(Xpos-CurX,Ypos+CurY);

LCD_WriteRAM_Prepare();/*PreparetowriteGRAM*/LCD_WriteRAM(TextColor);

LCD_SetCursor(Xpos-CurX,Ypos-CurY);

LCD_WriteRAM_Prepare();/*PreparetowriteGRAM*/LCD_WriteRAM(TextColo

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1