01-02:? ? 1.8寸TFT模塊詳解
版權(quán)聲明:Copyright ? 2016-2019,Stardust Studio, All Rights Reserved
本文將從以下五個(gè)方面詳細(xì)介紹TFT模塊的使用:
一、入門(mén)
二惹谐、ST7735S? ? DataSheet簡(jiǎn)介
三、寄存器配置
四拭嫁、ST7735S和ST7735部分差異
五民假、外部電容觸摸擴(kuò)展(后期補(bǔ)充)
一浮入、入門(mén)
? ? ? ? 在閱讀后續(xù)內(nèi)容時(shí)請(qǐng)先詳細(xì)閱讀:
? ? ? ? 1、TFT LCD顯示原理詳解(點(diǎn)擊可進(jìn)入:https://wenku.baidu.com/view/0482f0adb04e852458fb770bf78a6529647d359b.html)
? ? ? ? 2羊异、ST7735S DataSheet(2011 V1.1)(提取碼:i8pm,百度網(wǎng)盤(pán)一定要設(shè)提取碼事秀,我也沒(méi)有辦法)
二、ST7735S? ? DataSheet簡(jiǎn)介
? ? ? ? 由于網(wǎng)上找不到中文DataSheet球化,因此筆者認(rèn)真閱讀了一下英文DataSheet秽晚,以下是簡(jiǎn)單介紹:
2 重要特性
? ? ? ? 1、262K色筒愚,即18位色彩赴蝇;
? ? ? ? 2、芯片顯示數(shù)據(jù)RAM大小 = 寬132 個(gè)點(diǎn)? x? 長(zhǎng)162個(gè)點(diǎn)? x? 18位色彩(128*160或128*120彩屏都是在RAM存儲(chǔ)允許范圍內(nèi)的簡(jiǎn)刪版)巢掺;
? ? ? ? 3句伶、市面上的大多數(shù)ST7735S驅(qū)動(dòng)的小彩屏用的都是其通信方式之一的4-line Serial Interface,即4線SPI串行通信陆淀,當(dāng)然芯片設(shè)定是有8080等通信方式的考余;
6.3 模式選擇引腳
? ? ? ? 重點(diǎn)是ICM2、ICM1轧苫、ICM0引腳:
? ? ? ? 其重要的原因是因?yàn)闆Q定了通信方式:
? ? ? ? IM2決定是并行還是串行楚堤,
? ? ? ? IM1,IM0決定并行通信位數(shù)(在不使用時(shí)拉高或拉低含懊,即IM2=‘0’的情況下)身冬,
? ? ? ? 這與手冊(cè)最后一頁(yè)內(nèi)容相呼應(yīng):
? ? ? ? 其次是GM1和GM0:
? ? ? ? 筆者用的是128x160的屏,所以?xún)蓚€(gè)引腳都在內(nèi)部拉高了岔乔。
? ? ? ? 再者是SRGB引腳:
? ? ? ? 常規(guī)的都是RGB格式酥筝。
8.4 數(shù)據(jù)顏色編碼串行接口特性(4線串行)
9.8 數(shù)據(jù)顏色編碼
? ? ? ? 我們?cè)谶@里選用的是RGB565格式(如果使用攝像頭的話也應(yīng)當(dāng)選用相同的色彩格式),在4-line Serial Interface ->Write Data for 16-bit/Pixel (RGB 5-6-5-bit Input), 65K-Colors, 3AH=“05h”一欄中:
? ? ? ? 通過(guò)顏色對(duì)齊方式將16bit轉(zhuǎn)換為18bit雏门。
9.10 地址計(jì)數(shù)器 (與攝像頭圖像顯示相關(guān))
? ? ? ? 地址計(jì)數(shù)器設(shè)置用于寫(xiě)入和讀取的顯示數(shù)據(jù)RAM的地址嘿歌。在寫(xiě)入RAM之前,必須定義一個(gè)將要寫(xiě)入的窗口茁影。窗口可通過(guò)命令寄存器XS宙帝,YS(指定起始地址)和XE,YE(指定結(jié)束地址)進(jìn)行編程募闲。
在垂直尋址模式(MV=1)中步脓,Y地址在寫(xiě)每個(gè)字節(jié)之后遞增,Y環(huán)繞到Y(jié)S,X遞增以尋址下一列;
在水平尋址模式(MV=0)中沪编,X地址在寫(xiě)每個(gè)字節(jié)之后遞增,X環(huán)繞到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);? ? ? ? ? ? ? ? ? ? ? //開(kāi)始寫(xiě)數(shù)據(jù)
while(1)
{
? ? LCD_WR_DATA(0xF800);? ? ? ? //寫(xiě)點(diǎn)顏色,紅色
}
? ? ? ? 顯示效果:
? ? ? ? 想了解更多厨幻,具體參見(jiàn)ov7670攝像頭模塊教程相嵌。
? ? ? ? 附帶說(shuō)明一下另一種區(qū)域顯示模式:
? ? ? ? 1.首先開(kāi)啟部分顯示模式;
? ? ? ? 2.再選中垂直顯示區(qū)域况脆;
? ? ? ? 其中一種情形(End Row < Start Row, when MADCTL ML=’0’ )具體操作如下:
int i=0饭宾;
LCD_WR_REG(0x12);? ? //部分模式開(kāi)啟
LCD_WR_REG(0x30);? ? //設(shè)置垂直顯示區(qū)域
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x06);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x02);
LCD_WR_REG(0X2C);? ? ? ? ? ? ? ? ? ? ? //開(kāi)始寫(xiě)數(shù)據(jù)
while(1)
{
? ? LCD_WR_DATA(0xF800);? ? ? ? //寫(xiě)點(diǎn)顏色,紅色
}
? ? ? ? 顯示效果:
? ? ? ? 圖中1格了、2看铆、3行和7、8......160為顯示行,4盛末、5弹惦、6行為空白不顯圖行。
9.11 存儲(chǔ)器數(shù)據(jù)寫(xiě)入/讀取方向
? ? ? ? 通過(guò)MV悄但、MX 棠隐、MY位來(lái)選擇呈現(xiàn)方式,共有2 x 2 x 2 = 8種方式檐嚣。
? ? ? ? 而其中附帶垂直滾屏功能助泽,其中一種具體操作如下:
int i=3;
LCD_SetCursor(0,0);? ? ? ? ? ? ? ? ? ? //設(shè)置坐標(biāo)
POINT_COLOR=RED;? ? ? ? ? ? ? ? ? //設(shè)置字體為紅色
LCD_ShowChar(50,120,'S',12,0); //顯示一個(gè)字符
LCD_WR_REG(0x33);? ? ? ? ? ? ? ? ? //寫(xiě)寄存器
LCD_WR_DATA8(0x00);? ? ? ? ? ? ? ? //寫(xiě)8位數(shù)據(jù)
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(撕裂效應(yīng)嚎京,即畫(huà)面刷新殘留):? ? ?
? ? ? ? 這個(gè)現(xiàn)象多出現(xiàn)在視屏圖像輸入和頁(yè)面刷新顯示不一致時(shí)嗡贺, 刷屏率太低會(huì)導(dǎo)致出現(xiàn)flicker現(xiàn)象(屏閃現(xiàn)象),刷屏率太高會(huì)導(dǎo)致出現(xiàn) Tearing Effect(撕裂效應(yīng))挖藏。在camera圖像顯示在顯示屏上時(shí)就需要注意這個(gè)問(wèn)題暑刃,需要保證顯示一幅圖像后開(kāi)始刷新下一幅,具體參見(jiàn)ov7670攝像頭模塊教程膜眠。
9.17 重置時(shí)序:
? ? ? ? 要注意復(fù)位低電平不要小于5ms:
? ? ? ? 復(fù)位期間尖峰電壓小于20ns岩臣,這一點(diǎn)對(duì)單片機(jī)輸出的reset信號(hào)波紋有要求:
? ? ? ? 還有一點(diǎn)要注意:在釋放resx后要等待5秒鐘,然后再發(fā)送命令宵膨。同時(shí)休眠命令在120毫秒內(nèi)無(wú)效架谎。
三、寄存器配置
下面到了配置寄存器的時(shí)候了(比較重要的寄存器羅列在內(nèi)):
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接口復(fù)位
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位出廠數(shù)據(jù)寄存器
// LCD_WR_REG(0x09); //讀取顯示狀態(tài)辟躏,將數(shù)據(jù)放置在自己定義的數(shù)組中
// LCD_WR_REG(0x0A); //讀取顯示電源模式
// LCD_WR_REG(0x0B); //讀取顯示MADCTL (Memory Data Access Control)
// LCD_WR_REG(0x0C); //Read Display Pixel Format(后面幾個(gè)不常用谷扣,所以直接摘抄英文注釋)
// 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); //進(jìn)入睡眠模式,白屏,要黑屏需要斷開(kāi)LED引腳或電平拉低,否則無(wú)法降低功耗
LCD_WR_REG(0x11); //退出睡眠模式
// LCD_WR_REG(0x12); //部分模式開(kāi)啟
// LCD_WR_REG(0x13); //部分模式關(guān)閉
// LCD_WR_REG(0x20); //顯示反轉(zhuǎn)關(guān)閉,RGB二進(jìn)制值反轉(zhuǎn)
// LCD_WR_REG(0x21); //顯示反轉(zhuǎn)打開(kāi)
// LCD_WR_REG(0x28); //關(guān)閉顯示屏,白屏会涎,不會(huì)破壞RAM數(shù)據(jù)
//------------------------------------ST7735S Frame Rate-----------------------------------------//
LCD_WR_REG(0xB1); //GM[1:0] = “11”時(shí)默認(rèn)值 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”時(shí)默認(rèn)值 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”時(shí)默認(rèn)值 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); //默認(rèn)值
LCD_WR_REG(0xC2); //Power Control 3 (in Normal mode/ Full colors)
LCD_WR_DATA8(0x0D); //(AP)運(yùn)算放大器中的電流量=Large (SAP)運(yùn)算放大器中的電流量=Small
LCD_WR_DATA8(0x00); //默認(rèn)值
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裹匙,色彩飽和度較高,當(dāng)然根據(jù)需求選擇
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
/*非必要參數(shù)末秃,只是后面用的比較多概页,所以直接用結(jié)構(gòu)體定義,方便改動(dòng)*/
lcddev.width=128;
lcddev.height=160;
lcddev.wramcmd=0X2C;
lcddev.setxcmd=0X2A;
lcddev.setycmd=0X2B;
LCD_Clear(WHITE);
}
四练慕、ST7735S和ST7735部分差異
? ? ? ? 再此惰匙,筆者未詳盡對(duì)比,但在對(duì)比芯片特性和下表:
后铃将,改換顯示屏项鬼,顯示效果一致,所以筆者認(rèn)為ST7735S是ST7735的改進(jìn)版本劲阎。
五绘盟、外部電容觸摸擴(kuò)展(后期補(bǔ)充)
后記——凡塵
時(shí)間匆忙,未能用篇幅舉代碼實(shí)例幫大家理解和校對(duì)錯(cuò)誤悯仙,更多的是結(jié)構(gòu)和整體壓縮的內(nèi)容奥此,如有錯(cuò)別字和內(nèi)容不合理的地方歡迎大家批評(píng)指正,如有想深入探討或是項(xiàng)目需求的朋友歡迎加入QQ群:
? ? ? ? 星塵Arduino社區(qū):630581178
? ? ? ? 星塵STM8/32社區(qū):700155855
? ? ? ? 筆者郵箱:fanchen995@gmail.com