2,4-дюймовий TFT РК-дисплей (з сенсорним екраном)

1.37 контактів, лівий крайній – перший

2.Распіновка шлейфу

Номер контакту

Визначення

об’есненіе

1

DB0

Дані ліній

2

DB1

Дані ліній

3

DB2

Дані ліній

4

DB3

Дані ліній

5

GND

земля

6

VCC

Лінія живлення 3,3 В

7

#CS

Чіп-сигнал вибору (активний низький)

8

RS

Реєстрація вибору

9

#WR

Запис сигналу (активний низький)

10

#RD

Читайте сигналу (активний низький)

11

NC

Пуста нога

12

TP_X+

Сенсорний екран X +

13

TP_Y+

Сенсорний екран Y +

14

TP_X-

Сенсорний екран X-

15

TP_Y-

Сенсорний екран Y-

16

LED_VCC

Світлодіодне підсвічування 3,3 В

17

LED1_GND

Світлодіодне підсвічування

18

LED2_GND

Світлодіодне підсвічування

19

LED3_GND

Світлодіодне підсвічування

20

LED4_GND

Світлодіодне підсвічування

21

NC

Пуста нога

22

DB4

Лінія даних

23

DB10

Лінія даних

24

DB11

Лінія даних

25

DB12

Лінія даних

26

DB13

Лінія даних

27

DB14

Лінія даних

28

DB15

Лінія даних

29

DB16

Лінія даних

30

DB17

Лінія даних

31

#RESET

Скидання (активний низький)

32

VCC

Лінія живлення 3,3 В

33

VCC

Лінія живлення 3,3 В

34

GND

Земля

35

DB5

Лінія даних

36

DB6

Лінія даних

37

DB7

Лінія даних

3.Шіна даних 8/16

Типово екран після заводу, 16 бітові:
Високий 8: DB17-DB10,
Низький 8: DB7-DB0
Якщо ви хочете працювати в 8-бітному режимі, з задньої частини шлейфу видаляється R2 резистор, припаюється до позіциі R1.
При роботі у восьми режимах, шини даних: DB17-DB10

4.внутренній драйвер IC
У ікра вбудований драйвер OTM3225A або ILI9325 вони взаімоземеняемие в інтернеті є даташіта.

5. тестова схема
Я вибрав мікроконтролер AVR Atmega16A, зовнішній кварцовий резонатор 16МГц і іспользаванной 8 бітнцю шину.

5.1.Программное забезпечення:

ініціалізація =

5.2.Программний код та опис

Програмний код на C, середовище розробки: AVR Studio4.18 + WinAVR 20100110 (AVR GCC)

5.2.1.MCU порт ініціалізація:

#defineF_CPU 16000000UL

#include<avr\io.h>

#include<avr\interrupt.h>

#include<util\delay.h>

#define RESET_1 PORTD |= _BV(PD5)

#define RESET_0 PORTD &= ~_BV(PD5)

#define CS_1 PORTC |= _BV(PC5)

#define CS_0 PORTC &= ~_BV(PC5)

#define RS_1 PORTC |= _BV(PC4)

#define RS_0 PORTC &= ~_BV(PC4)

#define WR_1 PORTC |= _BV(PC3)

#define WR_0 PORTC &= ~_BV(PC3)

#define RD_1 PORTC |= _BV(PC2)

#define RD_0 PORTC &= ~_BV(PC2)

/**************/

/ * Ініціалізація * /

/**************/

init_IO(void)

{

DDRA = _BV(PA4) | _BV(PA3) | _BV(PA1);

DDRB = 0XFF;

DDRC = 0XFF;

DDRD = _BV(PD5);

RESET_1;

CS_1;

RS_0;

WR_1;

RD_1;

}

// End of init_IO( )

5.2.2. LCD_reset

/**************/

LCD_reset */

/**************/

LCD_reset(void)

{

RESET_0;

_delay_ms (50); / / Відповідно до delay.h, более60 мс

_delay_ms(50);

RESET_1;

_delay_ms(50);

_delay_ms(50);

}

// End of LCD_reset( )

5.2.3 РК-екран ініціалізація / **************** /

/ * РК ініціалізації * /

/****************/

/ / Опис: Ця функція кодавсе посилання на інформацію в Інтернеті, параметри

/ / Остаоісь недоторканими

void LCD_init(void)

{

/************* Start Initial Sequence **********/

LCD_WR_CMD(0xE3, 0×3008); // Set internal timing

LCD_WR_CMD(0xE7, 0×0012); // Set internal timing

LCD_WR_CMD(0xEF, 0×1231); // Set internal timing

LCD_WR_CMD(0×01, 0×0100); // set SS and SM bit

LCD_WR_CMD(0×02, 0×0700); // set 1 line inversion

LCD_WR_CMD(0×03, 0×1030); // set GRAM write direction and BGR=1.

LCD_WR_CMD(0×04, 0×0000); // Resize register

LCD_WR_CMD(0×08, 0×0202); // set the back porch and front porch

LCD_WR_CMD(0×09, 0×0000); // set non-display area refresh cycle ISC[3:0]

LCD_WR_CMD(0x0A, 0×0000); // FMARK function

LCD_WR_CMD(0x0C, 0×0000); // RGB interface setting

LCD_WR_CMD(0x0D, 0×0000); // Frame marker Position

LCD_WR_CMD(0x0F, 0×0000); // RGB interface polarity

/*************Power On sequence ****************/

LCD_WR_CMD(0×10, 0×0000); // SAP, BT[3:0], AP, DSTB, SLP, STB

LCD_WR_CMD(0×11, 0×0007); // DC1[2:0], DC0[2:0], VC[2:0]

LCD_WR_CMD(0×12, 0×0000); // VREG1OUT voltage

LCD_WR_CMD(0×13, 0×0000); // VDV[4:0] for VCOM amplitude

_delay_ms(50); // Dis-charge capacitor power voltage

_delay_ms(50);

_delay_ms(50);

_delay_ms(50);

LCD_WR_CMD(0×10, 0×1690); // SAP, BT[3:0], AP, DSTB, SLP, STB

LCD_WR_CMD(0×11, 0×0227); // R11h=0×0221 at VCI=3.3V, DC1[2:0], DC0[2:0], VC[2:0]

_delay_ms(50); // Delay 50ms

LCD_WR_CMD(0×12, 0x001C); // External reference voltage= Vci;

_delay_ms(50); // Delay 50ms

LCD_WR_CMD(0×13, 0×1800); // R13=1200 when R12=009D;VDV[4:0] for VCOM amplitude

LCD_WR_CMD(0×29, 0x001C); // R29=000C when R12=009D;VCM[5:0] for VCOMH

LCD_WR_CMD(0x2B, 0x000D); // Frame Rate = 91Hz

_delay_ms(50); // Delay 50ms

LCD_WR_CMD(0×20, 0×0000); // GRAM horizontal Address

LCD_WR_CMD(0×21, 0×0000); // GRAM Vertical Address

/************Adjust the Gamma Curve************/

LCD_WR_CMD(0×30, 0×0007);

LCD_WR_CMD(0×31, 0×0302);

LCD_WR_CMD(0×32, 0×0105);

LCD_WR_CMD(0×35, 0×0206);

LCD_WR_CMD(0×36, 0×0808);

LCD_WR_CMD(0×37, 0×0206);

LCD_WR_CMD(0×38, 0×0504);

LCD_WR_CMD(0×39, 0×0007);

LCD_WR_CMD(0x3C, 0×0105);

LCD_WR_CMD(0x3D, 0×0808);

/************Set GRAM area ************/

LCD_WR_CMD(0×50, 0×0000); // Horizontal GRAM Start Address

LCD_WR_CMD(0×51, 0x00EF); // Horizontal GRAM End Address

LCD_WR_CMD(0×52, 0×0000); // Vertical GRAM Start Address

LCD_WR_CMD(0×53, 0x013F); // Vertical GRAM Start Address

LCD_WR_CMD(0×60, 0xA700); // Gate Scan Line

LCD_WR_CMD(0×61, 0×0001); // NDL,VLE, REV

LCD_WR_CMD(0x6A, 0×0000); // set scrolling line

/************ Partial Display Control ************/

LCD_WR_CMD(0×80, 0×0000);

LCD_WR_CMD(0×81, 0×0000);

LCD_WR_CMD(0×82, 0×0000);

LCD_WR_CMD(0×83, 0×0000);

LCD_WR_CMD(0×84, 0×0000);

LCD_WR_CMD(0×85, 0×0000);

/************ Panel Control ************/

LCD_WR_CMD(0×90, 0×0010);

LCD_WR_CMD(0×92, 0×0000);

LCD_WR_CMD(0×93, 0×0003);

LCD_WR_CMD(0×95, 0×0110);

LCD_WR_CMD(0×97, 0×0000);

LCD_WR_CMD(0×98, 0×0000);

LCD_WR_CMD(0×07, 0×0133); // 262K color and display ON

}

// End of LCD_init( )

5.2.4.Функція LCD_WR_CMD () Ця функція звернутися до тимчасової діаграмі запису регістрів (див. малюнок). (Тимчасова діаграма еталонний драйвер IC Datasheet)

typedef unsigned charuchar;

typedef unsigned int uint;

#define WR_DATA PORTB

/******************************/

/ * Опис функції: * /

/ * 16-бітові параметри * /

/ * Індексний регістр. * /

/******************************/

/ * Параметр1: індекс, тип: 8bit * /

/ * Параметри: адреса призначення регістрів * /

/*******************************

/ * Параметр 2: величина тип: 16bit * /

/ * Параметри: дані повинні бути записані * /

/*******************************/

LCD_WR_CMD(uchar index,uint val)

{

RS_0; / / Запис реєстрації

CS_0; / / Вибір кристала дійсна

/ / WR_DATA = 0 × 00; / / Реєстрація адреси 8bit

WR_0;

WR_1; / / Створення імпульсів запису

WR_DATA = index; / / Написати молодші 8

WR_0;

WR_1;

RS_1; / / запис даних

WR_DATA = (uchar) (val >> 8) ;/ / Запис 8

WR_0;

WR_1;

WR_DATA = (uchar) val; / / Написати молодші 8

WR_0;

WR_1;

CS_1; / / Вибір кристала є неприпустимим

}

// End of LCD_WR_CMD( )

5.2.5.Цветние смуги на дісплей

Після завершення ініціалізації вище, РК-дисплей в нормальному режимі работи.Следующій код демонструє равномернийе кольорові смужки на екрані.

uint color[]={0xf800,0x07e0,0x001f,0xffe0,0×0000,0xffff,0x07ff,0xd343};

LCD_test(void)

{

uint i,j;

LCD_WR_CMD (0 × 20,0); / / Xкоордіната

LCD_WR_CMD (0 × 21,0); / / Yкоордіната

LCD_WR_REG (0 × 22); / / GRAM регістр обраний

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

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

color[I]); / / Запис даних у GRAM

}

5.2.6.Опісаніе функції LCD_WR_REG( )/**********************/

/ * Обраний адресу index * /

/ * Реєструвати * /

/**********************/

LCD_WR_REG(uchar index)

{

RS_0;

CS_0;

WR_0;

WR_1;

WR_DATA= index;

WR_0;

WR_1;

CS_1;

}

// End of LCD_WR_REG( )

5.2.7.Опісаніе функцій LCD_WR_DATA( )/**********************/

/ * Записати 16bit даних * /

/**********************/

LCD_WR_DATA(uint val)

{

RS_1;

CS_0;

WR_DATA= val8;

WR_0;

WR_1;

WR_DATA = val;

WR_0;

WR_1;

CS_1;

RS_0;

}

// End of LCD_WR_DATA( )

Як видно, справді, функція LCD_WR_REG (index) і LCD_WR_DATA (val) працюють спільно c функцією LCD_WR_CMD (index, val). Мета розділяючи їх для того, щоб прискорити запис в GRAM. Звичайно є й інший спосіб.

5.2.7.Для більш глибокого розуміння, як працювати з екраном, будь ласка, прочитайте специфікацію, а також в Інтернеті відкритий вихідний код

Кодексу. Деякі плюси екрану:
– ЖК-дисплей з роздільною здатністю 240 × 320, за замовчуванням початок координат у верхньому лівому куті екрану
– GRAM принемает формат даних для RGB565
– Швидкість запесі швидше (# WR запису імпульсів) ≥ 8 МГц
-Я можу встановити вікно швидко призначений області екрану