2019-07-09

01-02:    1.8寸TFT模块详解

版权声明:Copyright © 2016-2019,Stardust Studio, All Rights Reserved

本文将从以下五个方面详细介绍TFT模块的使用:

一、入门

二、ST7735S    DataSheet简介

三、寄存器配置

四、ST7735S和ST7735部分差异

五、外部电容触摸扩展(后期补充)

一、入门

        在阅读后续内容时请先详细阅读:

        1、TFT LCD显示原理详解(点击可进入:https://wenku.baidu.com/view/0482f0adb04e852458fb770bf78a6529647d359b.html)

        2、ST7735S DataSheet(2011 V1.1)(提取码:i8pm,百度网盘一定要设提取码,我也没有办法)

二、ST7735S    DataSheet简介

        由于网上找不到中文DataSheet,因此笔者认真阅读了一下英文DataSheet,以下是简单介绍:

2 重要特性

        1、262K色,即18位色彩;

        2、芯片显示数据RAM大小 = 宽132 个点  x  长162个点  x  18位色彩(128*160或128*120彩屏都是在RAM存储允许范围内的简删版);

        3、市面上的大多数ST7735S驱动的小彩屏用的都是其通信方式之一的4-line Serial Interface,即4线SPI串行通信,当然芯片设定是有8080等通信方式的;

6.3 模式选择引脚

        重点是ICM2、ICM1、ICM0引脚:


        其重要的原因是因为决定了通信方式:

        IM2决定是并行还是串行,

        IM1,IM0决定并行通信位数(在不使用时拉高或拉低,即IM2=‘0’的情况下),

        这与手册最后一页内容相呼应:

        其次是GM1GM0

        笔者用的是128x160的屏,所以两个引脚都在内部拉高了。

        再者是SRGB引脚:

        常规的都是RGB格式。

8.4 数据颜色编码串行接口特性(4线串行)

9.8 数据颜色编码

        我们在这里选用的是RGB565格式(如果使用摄像头的话也应当选用相同的色彩格式),在4-line Serial Interface ->Write Data for 16-bit/Pixel (RGB 5-6-5-bit Input), 65K-Colors, 3AH=“05h”一栏中:

        通过颜色对齐方式将16bit转换为18bit。

9.10 地址计数器 (与摄像头图像显示相关)

        地址计数器设置用于写入和读取的显示数据RAM的地址。在写入RAM之前,必须定义一个将要写入的窗口。窗口可通过命令寄存器XS,YS(指定起始地址)和XE,YE(指定结束地址)进行编程。

在垂直寻址模式(MV=1)中,Y地址在写每个字节之后递增,Y环绕到YS,X递增以寻址下一列;

在水平寻址模式(MV=0)中,X地址在写每个字节之后递增,X环绕到XS,Y递增以寻址下一列;

通常都采用水平寻址模式。

        特别注意:

      具体操作如下:

  LCD_WR_REG(0x2A);

LCD_WR_DATA8(0x00);

LCD_WR_DATA8(0X0F);

LCD_WR_DATA8(0x00);

LCD_WR_DATA8(0X2F);

LCD_WR_REG(0x2B);

LCD_WR_DATA8(0x00);

LCD_WR_DATA8(0X0F);

LCD_WR_DATA8(0x00);

LCD_WR_DATA8(0X2F);


LCD_WR_REG( 0X2C);                      //开始写数据

while(1)

{

    LCD_WR_DATA(0xF800);        //写点颜色,红色

}

        显示效果:

        想了解更多,具体参见ov7670摄像头模块教程。

        附带说明一下另一种区域显示模式:

        1.首先开启部分显示模式;

        2.再选中垂直显示区域;

        其中一种情形(End Row < Start Row, when MADCTL ML=’0’ )具体操作如下:

int i=0;

LCD_WR_REG(0x12);    //部分模式开启

LCD_WR_REG(0x30);    //设置垂直显示区域

LCD_WR_DATA8(0x00);

LCD_WR_DATA8(0x06);

LCD_WR_DATA8(0x00);

LCD_WR_DATA8(0x02);


LCD_WR_REG(0X2C);                      //开始写数据

while(1)

{

    LCD_WR_DATA(0xF800);        //写点颜色,红色

}

        显示效果:

        图中1、2、3行和7、8......160为显示行,4、5、6行为空白不显图行。

9.11 存储器数据写入/读取方向

        通过MV、MX 、MY位来选择呈现方式,共有2 x 2 x 2 = 8种方式。

        而其中附带垂直滚屏功能,其中一种具体操作如下:

int i=3;

LCD_SetCursor(0,0);                    //设置坐标

POINT_COLOR=RED;                  //设置字体为红色

LCD_ShowChar(50,120,'S',12,0); //显示一个字符

LCD_WR_REG(0x33);                  //写寄存器

LCD_WR_DATA8(0x00);                //写8位数据

LCD_WR_DATA8(0x00);

LCD_WR_DATA8(0x00);

LCD_WR_DATA8(0x96);

LCD_WR_DATA8(0x00);

LCD_WR_DATA8(0x0A);

while(1)

{

    for(i=0;i<150;i++)

    {

        LCD_WR_REG(0x37);

        LCD_WR_DATA8(0x00);

        LCD_WR_DATA8(i);

        delay_ms(10);

    }

    delay_ms(20);

}

        显示效果:


9.12 Tearing Effect(撕裂效应,即画面刷新残留):     

        这个现象多出现在视屏图像输入和页面刷新显示不一致时, 刷屏率太低会导致出现flicker现象(屏闪现象),刷屏率太高会导致出现 Tearing Effect(撕裂效应)。在camera图像显示在显示屏上时就需要注意这个问题,需要保证显示一幅图像后开始刷新下一幅,具体参见ov7670摄像头模块教程。

9.17 重置时序:

        要注意复位低电平不要小于5ms:

        复位期间尖峰电压小于20ns,这一点对单片机输出的reset信号波纹有要求:

        还有一点要注意:在释放resx后要等待5秒钟,然后再发送命令。同时休眠命令在120毫秒内无效。

三、寄存器配置

下面到了配置寄存器的时候了(比较重要的寄存器罗列在内):

void LCD_Init(void)

{

extern u32 data;

LCD_REST=0;

delay_ms(50); // delay 50 ms

  LCD_REST=1;

delay_ms(50); // delay 50 ms

SPILCD_RST_RESET ;    //LCD_RST=0 //SPI接口复位

delay_ms(20);                  // delay 20 ms

SPILCD_RST_SET ;        //LCD_RST=1

delay_ms(20);                  // delay 20 ms

// LCD_WR_REG(0x01); //刷新

// LCD_WR_REG(0x04); //显示屏24位出厂数据寄存器

// LCD_WR_REG(0x09); //读取显示状态,将数据放置在自己定义的数组中

// LCD_WR_REG(0x0A); //读取显示电源模式

// LCD_WR_REG(0x0B); //读取显示MADCTL (Memory Data Access Control)

// LCD_WR_REG(0x0C); //Read Display Pixel Format(后面几个不常用,所以直接摘抄英文注释)

// LCD_WR_REG(0x0D); //Read Display Image Mode

// LCD_WR_REG(0x0E); //Read Display Signal Mode

// LCD_WR_REG(0x0F); //Read Display Self-diagnostic result

// LCD_WR_REG(0x10); //进入睡眠模式,白屏,要黑屏需要断开LED引脚或电平拉低,否则无法降低功耗

LCD_WR_REG(0x11); //退出睡眠模式

// LCD_WR_REG(0x12); //部分模式开启

// LCD_WR_REG(0x13); //部分模式关闭

// LCD_WR_REG(0x20); //显示反转关闭,RGB二进制值反转

// LCD_WR_REG(0x21); //显示反转打开

// LCD_WR_REG(0x28); //关闭显示屏,白屏,不会破坏RAM数据

//------------------------------------ST7735S Frame Rate-----------------------------------------//

LCD_WR_REG(0xB1); //GM[1:0] = “11”时默认值 Frame Rate Control (In normal mode/ Full colors)

LCD_WR_DATA8(0x05);

LCD_WR_DATA8(0x3C);

LCD_WR_DATA8(0x3C);

LCD_WR_REG(0xB2); //GM[1:0] = “11”时默认值 Frame Rate Control (In Idle mode/ 8-colors)

LCD_WR_DATA8(0x05);

LCD_WR_DATA8(0x3C);

LCD_WR_DATA8(0x3C);

LCD_WR_REG(0xB3); //GM[1:0] = “11”时默认值 Frame Rate Control (In Partial mode/ full colors)

LCD_WR_DATA8(0x05);

LCD_WR_DATA8(0x3C);

LCD_WR_DATA8(0x3C);

LCD_WR_DATA8(0x05);

LCD_WR_DATA8(0x3C);

LCD_WR_DATA8(0x3C);

//------------------------------------End ST7735S Frame Rate------------------------------------//

//---------------------------------ST7735S Power Sequence---------------------------------------//

LCD_WR_REG(0xB4); //Display Inversion Control

LCD_WR_DATA8(0x03); //Default Value Status B4h

LCD_WR_REG(0xC0); //Power Control 1

LCD_WR_DATA8(0x28); //AVDD=4.1 GVDD=4.3 GVCL=-4.3

LCD_WR_DATA8(0x08); //配合0x28

LCD_WR_DATA8(0x04); //FUNCTION=2X

LCD_WR_REG(0xC1); //Power Control 2

LCD_WR_DATA8(0xC0); //默认值

LCD_WR_REG(0xC2); //Power Control 3 (in Normal mode/ Full colors)

LCD_WR_DATA8(0x0D); //(AP)运算放大器中的电流量=Large (SAP)运算放大器中的电流量=Small

LCD_WR_DATA8(0x00); //默认值

LCD_WR_REG(0xC3); //Power Control 4 (in Idle mode/ 8-colors)

LCD_WR_DATA8(0x8D);

LCD_WR_DATA8(0x2A);

LCD_WR_REG(0xC4); //Power Control 5 (in Partial mode/ full-colors)

LCD_WR_DATA8(0x8D);

LCD_WR_DATA8(0xEE);

//---------------------------------End ST7735S Power Sequence----------------------------------//

//------------------------------------ST7735S VCOM Sequence------------------------------------//

LCD_WR_REG(0xC5); //VCOM

LCD_WR_DATA8(0x1A);

LCD_WR_REG(0x36); //MX, MY, RGB mode

LCD_WR_DATA8(0x00);

//---------------------------------End ST7735S VCOM Sequence------------------------------------//

//--------------------------------End ST7735S Gamma Sequence-----------------------------------//

LCD_WR_REG(0x26); //伽马修正曲线选择

LCD_WR_DATA8(0x04); //伽马曲线3,色彩饱和度较高,当然根据需求选择

LCD_WR_REG(0xE0); // Gamma (‘+’polarity) Correction Characteristics Setting

LCD_WR_DATA8(0x04);

LCD_WR_DATA8(0x22);

LCD_WR_DATA8(0x07);

LCD_WR_DATA8(0x0A);

LCD_WR_DATA8(0x2E);

LCD_WR_DATA8(0x30);

LCD_WR_DATA8(0x25);

LCD_WR_DATA8(0x2A);

LCD_WR_DATA8(0x28);

LCD_WR_DATA8(0x26);

LCD_WR_DATA8(0x2E);

LCD_WR_DATA8(0x3A);

LCD_WR_DATA8(0x00);

LCD_WR_DATA8(0x01);

LCD_WR_DATA8(0x03);

LCD_WR_DATA8(0x13);

LCD_WR_REG(0xE1); //Gamma (‘-’polarity) Correction Characteristics Setting

LCD_WR_DATA8(0x04);

LCD_WR_DATA8(0x16);

LCD_WR_DATA8(0x06);

LCD_WR_DATA8(0x0D);

LCD_WR_DATA8(0x2D);

LCD_WR_DATA8(0x26);

LCD_WR_DATA8(0x23);

LCD_WR_DATA8(0x27);

LCD_WR_DATA8(0x27);

LCD_WR_DATA8(0x25);

LCD_WR_DATA8(0x2D);

LCD_WR_DATA8(0x3B);

LCD_WR_DATA8(0x00);

LCD_WR_DATA8(0x01);

LCD_WR_DATA8(0x04);

LCD_WR_DATA8(0x13);

//------------------------------------End ST7735S Gamma Sequence---------------------------//

LCD_WR_REG(0x3A); //65k mode

LCD_WR_DATA8(0x05);

LCD_WR_REG(0x29); //Display on

/*非必要参数,只是后面用的比较多,所以直接用结构体定义,方便改动*/

lcddev.width=128;

lcddev.height=160;

lcddev.wramcmd=0X2C;

lcddev.setxcmd=0X2A;

lcddev.setycmd=0X2B;

LCD_Clear(WHITE);

}

四、ST7735S和ST7735部分差异

        再此,笔者未详尽对比,但在对比芯片特性和下表:

后,改换显示屏,显示效果一致,所以笔者认为ST7735S是ST7735的改进版本。

五、外部电容触摸扩展(后期补充)

后记——凡尘

时间匆忙,未能用篇幅举代码实例帮大家理解和校对错误,更多的是结构和整体压缩的内容,如有错别字和内容不合理的地方欢迎大家批评指正,如有想深入探讨或是项目需求的朋友欢迎加入QQ群:

        星尘Arduino社区:630581178

        星尘STM8/32社区:700155855

        笔者邮箱:fanchen995@gmail.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • 背景 LinkedIn开发 基于发布/订阅的分布式消息系统 scala语言 可水平扩展 高吞吐率 被作为多种类型的...
    onlyJoy阅读 226评论 0 0
  • 1. 首先使用dba用户登录oracle库 2. Oracle查询被锁的表: select b.owner,b.o...
    归去来ming阅读 156评论 0 0
  • 小区覆盖 小区覆盖参数有好些参数在影响,CP、GP、PRACH格式、NCS等。最终的小区覆盖会受这些所有的参数的影...
    国宝级初学者阅读 2,924评论 0 50
  • 防蓝光眼镜人人适用吗? 我们每天的生活离不开手机,电脑,ipad……很多人的视力也因为长时间接触强光电子屏幕而走下...
    晓夜子谈阅读 389评论 0 0
  • (哥林多前书2:9) 如经上所记:“神为爱他的人所预备的,是眼睛未曾看见,耳朵未曾听见,人心也未曾想到的。” ...
    天路客語阅读 1,126评论 0 2