Підключаємо китайська LCD до ATMega16
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 МГц
-Я можу встановити вікно швидко призначений області екрану
Сподобалася стаття? Натисни "+1"! :
Ще статті:
- УМЗЧ на мікросхемі РАхх (0)
- Автоматичний реєстратор - вимикач освітлення (0)
- Проміжний підсилювач для звукової карти комп'ютера (0)
- УМЗЧ на базі операційного підсилювача КР544УД2 (0)
- Харчування радіоапаратури від бортової мережі автомобіля (0)
- Електронний пароль (початок) (0)
- Саморобний підсилювач на TDA 7294 (0)
Ваш відгук