2,4-дюймовый TFT ЖК-дисплей (с сенсорным экраном)
1.37 контактов, левый крайний – первый
2.Распиновка шлейфа
Номер контакта |
Определение |
объеснение |
1 |
DB0 |
Данные линий |
2 |
DB1 |
Данные линий |
3 |
DB2 |
Данные линий |
4 |
DB3 |
Данные линий |
Cinq |
GND |
terre |
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 |
Ligne de données |
23 |
DB10 |
Ligne de données |
24 |
DB11 |
Ligne de données |
25 |
DB12 |
Ligne de données |
26 |
DB13 |
Ligne de données |
27 |
DB14 |
Ligne de données |
28 |
DB15 |
Ligne de données |
29 |
DB16 |
Ligne de données |
30 |
DB17 |
Ligne de données |
31 |
#RESET |
Сброс (активный низкий) |
32 |
VCC |
Линия питания 3,3 В |
33 |
VCC |
Линия питания 3,3 В |
34 |
GND |
Terre |
35 |
DB5 |
Ligne de données |
36 |
DB6 |
Ligne de données |
37 |
DB7 |
Ligne de données |
По умолчанию экран после завода, 16 битные:
Высокий 8: DB17- DB10,
Низкий 8: DB7- DB0
Если вы хотите работать в 8-битном режиме, с задней части шлейфа удаляется R2 резистор, припаивается к позицыи R1.
При работе в восьми режимах, шины данных: DB17- DB10
4.внутренний драйвер IC
В икран встроен драйвер OTM3225A или ILI9325 они взаимоземеняемые в интернете есть даташиты.
5. тестовая схема
Я выбрал микроконтроллер AVR Atmega16A, внешний кварцевый резонатор 16МГц и использавал 8 битнцю шину.
инициализация =
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( )
/**************/
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( )
/* ЖК инициализации */
/****************/
// Описание: Эта функция кодавсе ссылки на информацию в Интернете, параметры
//остаоись нетронутыми
void LCD_init(void)
{
/************* Start Initial Sequence **********/
LCD_WR_CMD(0xE3, 0x3008); // Set internal timing
LCD_WR_CMD(0xE7, 0x0012); // Set internal timing
LCD_WR_CMD(0xEF, 0x1231); // Set internal timing
LCD_WR_CMD(0x01, 0x0100); // set SS and SM bit
LCD_WR_CMD(0x02, 0x0700); // set 1 line inversion
LCD_WR_CMD(0x03, 0x1030); // set GRAM write direction and BGR=1.
LCD_WR_CMD(0x04, 0x0000); // Resize register
LCD_WR_CMD(0x08, 0x0202); // set the back porch and front porch
LCD_WR_CMD(0x09, 0x0000); // set non-display area refresh cycle ISC[3:0]
LCD_WR_CMD(0x0A, 0x0000); // FMARK function
LCD_WR_CMD(0x0C, 0x0000); // RGB interface setting
LCD_WR_CMD(0x0D, 0x0000); // Frame marker Position
LCD_WR_CMD(0x0F, 0x0000); // RGB interface polarity
/*************Power On sequence ****************/
LCD_WR_CMD(0x10, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
LCD_WR_CMD(0x11, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
LCD_WR_CMD(0x12, 0x0000); // VREG1OUT voltage
LCD_WR_CMD(0x13, 0x0000); // 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(0x10, 0x1690); // SAP, BT[3:0], AP, DSTB, SLP, STB
LCD_WR_CMD(0x11, 0x0227); // R11h=0x0221 at VCI=3.3V, DC1[2:0], DC0[2:0], VC[2:0]
_delay_ms(50); // Delay 50ms
LCD_WR_CMD(0x12, 0x001C); // External reference voltage= Vci;
_delay_ms(50); // Delay 50ms
LCD_WR_CMD(0x13, 0x1800); // R13=1200 when R12=009D;VDV[4:0] for VCOM amplitude
LCD_WR_CMD(0x29, 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(0x20, 0x0000); // GRAM horizontal Address
LCD_WR_CMD(0x21, 0x0000); // GRAM Vertical Address
/************Adjust the Gamma Curve************/
LCD_WR_CMD(0x30, 0x0007);
LCD_WR_CMD(0x31, 0x0302);
LCD_WR_CMD(0x32, 0x0105);
LCD_WR_CMD(0x35, 0x0206);
LCD_WR_CMD(0x36, 0x0808);
LCD_WR_CMD(0x37, 0x0206);
LCD_WR_CMD(0x38, 0x0504);
LCD_WR_CMD(0x39, 0x0007);
LCD_WR_CMD(0x3C, 0x0105);
LCD_WR_CMD(0x3D, 0x0808);
/************Set GRAM area ************/
LCD_WR_CMD(0x50, 0x0000); // Horizontal GRAM Start Address
LCD_WR_CMD(0x51, 0x00EF); // Horizontal GRAM End Address
LCD_WR_CMD(0x52, 0x0000); // Vertical GRAM Start Address
LCD_WR_CMD(0x53, 0x013F); // Vertical GRAM Start Address
LCD_WR_CMD(0x60, 0xA700); // Gate Scan Line
LCD_WR_CMD(0x61, 0x0001); // NDL,VLE, REV
LCD_WR_CMD(0x6A, 0x0000); // set scrolling line
/************ Partial Display Control ************/
LCD_WR_CMD(0x80, 0x0000);
LCD_WR_CMD(0x81, 0x0000);
LCD_WR_CMD(0x82, 0x0000);
LCD_WR_CMD(0x83, 0x0000);
LCD_WR_CMD(0x84, 0x0000);
LCD_WR_CMD(0x85, 0x0000);
/************ Panel Control ************/
LCD_WR_CMD(0x90, 0x0010);
LCD_WR_CMD(0x92, 0x0000);
LCD_WR_CMD(0x93, 0x0003);
LCD_WR_CMD(0x95, 0x0110);
LCD_WR_CMD(0x97, 0x0000);
LCD_WR_CMD(0x98, 0x0000);
LCD_WR_CMD(0x07, 0x0133); // 262K color and display ON
}
// End of LCD_init( )
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 = 0x00; // Регистрация адреса 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,0x0000,0xffff,0x07ff,0xd343};
LCD_test(void)
{
uint i,j;
LCD_WR_CMD(0x20,0); // Xкоордината
LCD_WR_CMD(0x21,0); // Yкоордината
LCD_WR_REG(0x22); // GRAM регистр выбран
for(i=0; i<8; i++)
for(j=0; j<9600; j++)
couleur[i]); // Запись данных в GRAM
}
/* Выбранный адрес 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( )
/* Записать 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 МГц
-Я могу установить окно быстро назначенный области экрана
Программу с исходниками в качестве примера выложить можно?