Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » 2.8" TFT LCD с тачскрином, контроллер HX8347-G, нужны библиотеки


2.8" TFT LCD с тачскрином, контроллер HX8347-G, нужны библиотеки

Сообщений 1 страница 20 из 20

1

Здравствуйте, уважаемые знатоки!
Приобрел на ali вот такой шилд дисплея с тачскрином и SD-картой от mcufriend.com.

Дисплей

Контроллер дисплея, как оказалось, HX8347-G.
Тачскрин HSD-8706-C1.

LCD_ID_Reader для дисплея выдает идентификатор 0x7575.

Удалось запустить его, подключив к Arduino Mega 2560, вот с этими библиотеками для SPFD5408, жестко прописав идентификатор.

Библиотеки

В сети смог разыскать только библиотеки на С и скетчи для Arduino.

Самостоятельно по даташиту, даже имея под рукой, как образец, библиотеки знаменитого Сергея Шилова MrShilov для других контроллеров, вряд ли смогу написать.

В связи с вышесказанным вопрос, быть может кто-нибудь из завсегдатаев данного форума работал с таким контроллером на BASCOM AVR и сможет поделиться библиотеками для дисплея-тачскрина и шрифтами ?

0

2

Посмотрите здесь

0

3

Sasha_1973, большое спасибо Вам за помощь!
Буду пробовать, по результатам напишу.

0

4

Здравствуйте уважаемые знатоки и завсегдатаи данного форума!

Ниже будет много букв.
Про обещанные результаты, а вернее, мои жалкие попытки их получения.

По указанной Вами, Sasha_1973, ссылке, обнаружил библиотеки для контроллера HX8347-A.

    Вот эта ссылка

(Чтобы скачать сами библиотеки нужно зарегистрироваться на том сайте,
иначе даже не видны, хотя сам сайт отличный).

При попытке их использования "в лоб" дисплей, к сожалению,
запустить не удалось. Белый экран подсветки и ничего.

При последующем поиске на данном сайте был обнаружен шикарный
пакет библиотек для HX8347-A от Сергея Шилова Mrshilov LCD Guru

    Ссылка на пакет библиотек Сергея Шилова

С которым также (в моем случае) дисплей не запустился.

Поначалу возникло предположение о каких-то критичных различиях между HX8347-A и HX8347-G.

Поиск дал вот эти ссылки, где различия подтвердились на уровне регистров.

    Про различие 1

Цитата оттуда от Slider:

"... для справки замечу из PDF серии HX8347x соответствие контроллеров - регистр - ID 
HX8347A r67h   ID 0x47
HX8347B r00h   ID 0x9325 (ID1 ID2 ID3 м.б. в rDAh rDBh rDCh - программируется в OTP режиме)
HX8347D r00h   ID 0x47
HX8347G r00h   ID 0x75
HX8347I   pdf бесплатный не найден
"
и еще

    Про различие 2

Степень критичности различий моделей контроллеров документально
определить не получилось.

Затем возникла мысль просто сопоставить по контактам реальное
физическое подключение и определение пинов в коде программ.

С этого и надо было начинать! - Конечно контакты подключения в реале
и в программах библиотек были разными. Поэтому и не взлетело.

Вот реальное подключение к Arduino моего шилда дисплея.

------------------------------------------
Разъем дисплея

  Контакт - Номер контакта   - Порт
  дисплея   Arduino MEGA2560   ATMEGA2560
------------------------------------------

Разъем J1

  LCD_D0 - 8  - PH5
  LCD_D1 - 9  - PH6
  SD_SS  - 10 - PB4
  SD_DI  - 11 - PB5
  SD_D0  - 12 - PB6
  SD_SCK - 13 - PB7

Разъем J2

  LCD_D2 - 2  - PE4
  LCD_D3 - 3  - PE5
  LCD_D4 - 4  - PG5
  LCD_D5 - 5  - PE3
  LCD_D6 - 6  - PH3
  LCD_D7 - 7  - PH4

Разъем J3

  LCD_RST - A4 - PF4
  LCD_CS  - A3 - PF3
  LCD_RS  - A2 - PF2
  LCD_WR  - A1 - PF1
  LCD_RD  - A0 - PF0

Разъем J4

  GND - GND   
  5V  - 5V
  3V3 - 3.3V

Дальнейшие попытки исправить либо код библиотек по портам, либо
физически подключить контакты разъемов как в коде, принесли еще
одно откровение - найденные библиотеки работают при 16-битном подключении.
Физически же шилд распаян под 8-битный режим, лишних ног-штырей просто нет.

    Выглядит мой шилд вот так

Есть только в торце нераспаянный разъем, насколько я понял, под 17
или 18 проводников, но обозначений на данном разъеме никаких
и что и как туда подведено - неведомо.

В связи с этим, если можно, очередной вопрос: а нет ли аналогичной волшебной
ссылки на BASCOM-AVR библиотеки, но уже под 8-битный режим работы
контроллера HX8347-G ?
Вдруг найдется и такая версия ?

Отредактировано banzay2202 (2017-02-10 09:05:23)

0

5

Господа! У кого есть библиотека под ili9320 ili9341 8 бит 320х240?
Поделитесь пожалуйста! Очень надо! Пришли дисплеи с Китая в разнобой, половина ,ili9325  благодаря библиотеке от Г-на Шилова работают на ура, правда не понятно как управлять яркостью экрана. С тачскрином разобрался по аналоговому подключению, но вроде говорят что есть и цифровой вариант.

Отредактировано RJJ (2018-08-07 22:01:19)

0

6

Тут есть.

Если не можете там скачать то вот ссылка с гугл диска.

0

7

http://s8.uploads.ru/t/KonZl.jpg
http://s5.uploads.ru/t/G98Zl.jpg

zenit написал(а):

Тут есть.

Если не можете там скачать то вот ссылка с гугл диска.

Спасибо! Но в тамошней библиотеке и примере непонятно  как конфигурировать пины экрана.
Есть ли у кого программа для считывания типа контроллера дисплея?
На фото данный девайс просто белый экран и все! Отклеил дисплей  на задней части маркировка 
CL9001-090301-9325
Au-c240-V1A2
До этого покупал дисплеи которые работают с библиотекой ILI9325  работают и с библиотекой. ILI9320 но с мельтешением  по якости а эти дисплеи просто белый экран без всяких признаков. Судя по маркировке контролёр 9325. Что делать? Таких 5 штук!

Отредактировано RJJ (2018-08-11 13:06:35)

0

8

RJJ написал(а):

Что делать?

Не очковать, курить даташит и спокойненько разбираться с проблемой.

0

9

Китайский продавец прислал библиотеку под Ардуино 
он утверждает что контроллер ILI9325
Ардуино для меня темный лес.

Код:
#include "TFTLCD.h"



#ifdef USE_ADAFRUIT_SHIELD_PINOUT
// special defines for the dataport
 #define DATAPORT1 PORTD
 #define DATAPIN1 PIND
 #define DATADDR1 DDRD

 #define DATAPORT2 
 #define DATAPIN2 PINB
 #define DATADDR2 DDRB

 #define DATA1_MASK 0xD0
 #define DATA2_MASK 0x2F

// for mega & shield usage, we just hardcoded it (its messy)

#else
 // for the breakout board tutorial, two ports are used :/
 #define DATAPORT1 PORTD
 #define DATAPIN1  PIND
 #define DATADDR1  DDRD

 #define DATAPORT2 PORTB
 #define DATAPIN2  PINB
 #define DATADDR2  DDRB

 #define DATA1_MASK 0xFC  // top 6 bits
 #define DATA2_MASK 0x03  // bottom 2 bits


 #define MEGA_DATAPORT PORTA
 #define MEGA_DATAPIN  PINA
 #define MEGA_DATADDR  DDRA
#endifДШ9325


#include "glcdfont.c"
#include <avr/pgmspace.h>
#include "pins_arduino.h"
#include "wiring_private.h"


void TFTLCD::goHome(void) {
  goTo(0,0);
}

uint16_t TFTLCD::width(void) {
  return _width;
}
uint16_t TFTLCD::height(void) {
  return _height;
}

void TFTLCD::goTo(int x, int y) {
  writeRegister(0x0020, x);     // GRAM Address Set (Horizontal Address) (R20h)
  writeRegister(0x0021, y);     // GRAM Address Set (Vertical Address) (R21h)
  writeCommand(0x0022);            // Write Data to GRAM (R22h)
}

void TFTLCD::setCursor(uint16_t x, uint16_t y) {
  cursor_x = x;
  cursor_y = y;
}

void TFTLCD::setTextSize(uint8_t s) {
  textsize = s;
}

void TFTLCD::setTextColor(uint16_t c) {
  textcolor = c;
}

void TFTLCD::write(uint8_t c) {
  if (c == '\n') {
    cursor_y += textsize*8;
    cursor_x = 0;
  } else if (c == '\r') {
    // skip em
  } else {
    drawChar(cursor_x, cursor_y, c, textcolor, textsize);
    cursor_x += textsize*6;
  }
}

void TFTLCD::drawString(uint16_t x, uint16_t y, char *c, 
	uint16_t color, uint8_t size) {
  while (c[0] != 0) {
    drawChar(x, y, c[0], color, size);
    x += size*6;
    c++;
  }
}
// draw a character
void TFTLCD::drawChar(uint16_t x, uint16_t y, char c, 
      uint16_t color, uint8_t size) {
  for (uint8_t i =0; i<5; i++ ) {
    uint8_t line = pgm_read_byte(font+(c*5)+i);
    for (uint8_t j = 0; j<8; j++) {
      if (line & 0x1) {
	if (size == 1) // default size
	  drawPixel(x+i, y+j, color);
	else {  // big size
	  fillRect(x+i*size, y+j*size, size, size, color);
	} 
      }
      line >>= 1;
    }
  }
}

// draw a triangle!
void TFTLCD::drawTriangle(uint16_t x0, uint16_t y0,
	  uint16_t x1, uint16_t y1,
	  uint16_t x2, uint16_t y2, uint16_t color)
{
  drawLine(x0, y0, x1, y1, color);
  drawLine(x1, y1, x2, y2, color);
  drawLine(x2, y2, x0, y0, color); 
}

void TFTLCD::fillTriangle ( int32_t x0, int32_t y0, int32_t x1, int32_t y1, int32_t x2, int32_t y2, uint16_t color)
{
  if (y0 > y1) {
    swap(y0, y1); swap(x0, x1);
  }
  if (y1 > y2) {
    swap(y2, y1); swap(x2, x1);
  }
  if (y0 > y1) {
    swap(y0, y1); swap(x0, x1);
  }

  int32_t dx1, dx2, dx3; // Interpolation deltas
  int32_t sx1, sx2, sy; // Scanline co-ordinates

  sx2=(int32_t)x0 * (int32_t)1000; // Use fixed point math for x axis values
  sx1 = sx2;
  sy=y0;

  // Calculate interpolation deltas
  if (y1-y0 > 0) dx1=((x1-x0)*1000)/(y1-y0);
    else dx1=0;
  if (y2-y0 > 0) dx2=((x2-x0)*1000)/(y2-y0);
    else dx2=0;
  if (y2-y1 > 0) dx3=((x2-x1)*1000)/(y2-y1);
    else dx3=0;

  // Render scanlines (horizontal lines are the fastest rendering method)
  if (dx1 > dx2)
  {
    for(; sy<=y1; sy++, sx1+=dx2, sx2+=dx1)
    {
      drawHorizontalLine(sx1/1000, sy, (sx2-sx1)/1000, color);
    }
    sx2 = x1*1000;
    sy = y1;
    for(; sy<=y2; sy++, sx1+=dx2, sx2+=dx3)
    {
      drawHorizontalLine(sx1/1000, sy, (sx2-sx1)/1000, color);
    }
  }
  else
  {
    for(; sy<=y1; sy++, sx1+=dx1, sx2+=dx2)
    {
      drawHorizontalLine(sx1/1000, sy, (sx2-sx1)/1000, color);
    }
    sx1 = x1*1000;
    sy = y1;
    for(; sy<=y2; sy++, sx1+=dx3, sx2+=dx2)
    {
      drawHorizontalLine(sx1/1000, sy, (sx2-sx1)/1000, color);
    }
  }
}

uint16_t TFTLCD::Color565(uint8_t r, uint8_t g, uint8_t b) {
  uint16_t c;
  c = r >> 3;
  c <<= 6;
  c |= g >> 2;
  c <<= 5;
  c |= b >> 3;

  return c;
}

// draw a rectangle
void TFTLCD::drawRect(uint16_t x, uint16_t y, uint16_t w, uint16_t h, 
      uint16_t color) {
  // smarter version
  drawHorizontalLine(x, y, w, color);
  drawHorizontalLine(x, y+h-1, w, color);
  drawVerticalLine(x, y, h, color);
  drawVerticalLine(x+w-1, y, h, color);
}

// draw a rounded rectangle
void TFTLCD::drawRoundRect(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t r,
	   uint16_t color) {
  // smarter version
  drawHorizontalLine(x+r, y, w-2*r, color);
  drawHorizontalLine(x+r, y+h-1, w-2*r, color);
  drawVerticalLine(x, y+r, h-2*r, color);
  drawVerticalLine(x+w-1, y+r, h-2*r, color);
  // draw four corners
  drawCircleHelper(x+r, y+r, r, 1, color);
  drawCircleHelper(x+w-r-1, y+r, r, 2, color);
  drawCircleHelper(x+w-r-1, y+h-r-1, r, 4, color);
  drawCircleHelper(x+r, y+h-r-1, r, 8, color);
}


// fill a rounded rectangle
void TFTLCD::fillRoundRect(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t r,
	   uint16_t color) {
  // smarter version
  fillRect(x+r, y, w-2*r, h, color);

  // draw four corners
  fillCircleHelper(x+w-r-1, y+r, r, 1, h-2*r-1, color);
  fillCircleHelper(x+r, y+r, r, 2, h-2*r-1, color);
}

// fill a circle
void TFTLCD::fillCircle(uint16_t x0, uint16_t y0, uint16_t r, uint16_t color) {
  writeRegister(TFTLCD_ENTRY_MOD, 0x1030);
  drawVerticalLine(x0, y0-r, 2*r+1, color);
  fillCircleHelper(x0, y0, r, 3, 0, color);
}


// used to do circles and roundrects!
void TFTLCD::fillCircleHelper(uint16_t x0, uint16_t y0, uint16_t r, uint8_t cornername, uint16_t delta,
	uint16_t color) {

  int16_t f = 1 - r;
  int16_t ddF_x = 1;
  int16_t ddF_y = -2 * r;
  int16_t x = 0;
  int16_t y = r;

  while (x<y) {
    if (f >= 0) {
      y--;
      ddF_y += 2;
      f += ddF_y;
    }
    x++;
    ddF_x += 2;
    f += ddF_x;
  
    if (cornername & 0x1) {
      drawVerticalLine(x0+x, y0-y, 2*y+1+delta, color);
      drawVerticalLine(x0+y, y0-x, 2*x+1+delta, color);
    }
    if (cornername & 0x2) {
      drawVerticalLine(x0-x, y0-y, 2*y+1+delta, color);
      drawVerticalLine(x0-y, y0-x, 2*x+1+delta, color);
    }
  }
}


// draw a circle outline

void TFTLCD::drawCircle(uint16_t x0, uint16_t y0, uint16_t r, 
	uint16_t color) {
  drawPixel(x0, y0+r, color);
  drawPixel(x0, y0-r, color);
  drawPixel(x0+r, y0, color);
  drawPixel(x0-r, y0, color);

  drawCircleHelper(x0, y0, r, 0xF, color);
}

void TFTLCD::drawCircleHelper(uint16_t x0, uint16_t y0, uint16_t r, uint8_t cornername,
	uint16_t color) {
  int16_t f = 1 - r;
  int16_t ddF_x = 1;
  int16_t ddF_y = -2 * r;
  int16_t x = 0;
  int16_t y = r;


  while (x<y) {
    if (f >= 0) {
      y--;
      ddF_y += 2;
      f += ddF_y;
    }
    x++;
    ddF_x += 2;
    f += ddF_x;
    if (cornername & 0x4) {
      drawPixel(x0 + x, y0 + y, color);
      drawPixel(x0 + y, y0 + x, color);
    } 
    if (cornername & 0x2) {
      drawPixel(x0 + x, y0 - y, color);
      drawPixel(x0 + y, y0 - x, color);
    }
    if (cornername & 0x8) {
      drawPixel(x0 - y, y0 + x, color);
      drawPixel(x0 - x, y0 + y, color);
    }
    if (cornername & 0x1) {
      drawPixel(x0 - y, y0 - x, color);
      drawPixel(x0 - x, y0 - y, color);
    }
  }
}

// fill a rectangle
void TFTLCD::fillRect(uint16_t x, uint16_t y, uint16_t w, uint16_t h, 
      uint16_t fillcolor) {
  // smarter version
  while (h--)
    drawHorizontalLine(x, y++, w, fillcolor);
}


void TFTLCD::drawVerticalLine(uint16_t x, uint16_t y, uint16_t length, uint16_t color)
{
  if (x >= _width) return;

  drawFastLine(x,y,length,color,1);
}

void TFTLCD::drawHorizontalLine(uint16_t x, uint16_t y, uint16_t length, uint16_t color)
{
  if (y >= _height) return;
  drawFastLine(x,y,length,color,0);
}

void TFTLCD::drawFastLine(uint16_t x, uint16_t y, uint16_t length, 
	  uint16_t color, uint8_t rotflag)
{
  uint16_t newentrymod;

  switch (rotation) {
  case 0:
    if (rotflag)
      newentrymod = 0x1028;   // we want a 'vertical line'
    else 
      newentrymod = 0x1030;   // we want a 'horizontal line'
    break;
  case 1:
    swap(x, y);
    // first up fix the X
    x = TFTWIDTH - x - 1;
    if (rotflag)
      newentrymod = 0x1000;   // we want a 'vertical line'
    else 
      newentrymod = 0x1028;   // we want a 'horizontal line'
    break;
  case 2:
    x = TFTWIDTH - x - 1;
    y = TFTHEIGHT - y - 1;
    if (rotflag)
      newentrymod = 0x1008;   // we want a 'vertical line'
    else 
      newentrymod = 0x1020;   // we want a 'horizontal line'
    break;
  case 3:
    swap(x,y);
    y = TFTHEIGHT - y - 1;
    if (rotflag)
      newentrymod = 0x1030;   // we want a 'vertical line'
    else 
      newentrymod = 0x1008;   // we want a 'horizontal line'
    break;
  }
  
  writeRegister(TFTLCD_ENTRY_MOD, newentrymod);

  writeRegister(TFTLCD_GRAM_HOR_AD, x); // GRAM Address Set (Horizontal Address) (R20h)
  writeRegister(TFTLCD_GRAM_VER_AD, y); // GRAM Address Set (Vertical Address) (R21h)
  writeCommand(TFTLCD_RW_GRAM);  // Write Data to GRAM (R22h)


  *portOutputRegister(csport) &= ~cspin;
  //digitalWrite(_cs, LOW);
  *portOutputRegister(cdport) |= cdpin;
  //digitalWrite(_cd, HIGH);
  *portOutputRegister(rdport) |= rdpin;
  //digitalWrite(_rd, HIGH);
  *portOutputRegister(wrport) |= wrpin;
  //digitalWrite(_wr, HIGH);

  setWriteDir();
  while (length--) {
    writeData_unsafe(color); 
  }

  // set back to default
  *portOutputRegister(csport) |= cspin;
  //digitalWrite(_cs, HIGH);
  writeRegister(TFTLCD_ENTRY_MOD, 0x1030);
}



// bresenham's algorithm - thx wikpedia
void TFTLCD::drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, 
      uint16_t color) {
  // if you're in rotation 1 or 3, we need to swap the X and Y's

  int16_t steep = abs(y1 - y0) > abs(x1 - x0);
  if (steep) {
    swap(x0, y0);
    swap(x1, y1);
  }

  if (x0 > x1) {
    swap(x0, x1);
    swap(y0, y1);
  }

  int16_t dx, dy;
  dx = x1 - x0;
  //dy = abs(y1 - y0);
  dy = abs(y1 - y0);

  int16_t err = dx / 2;
  int16_t ystep;

  if (y0 < y1) {
    ystep = 1;
  } else {
    ystep = -1;}

  for (; x0<=x1; x0++) {
    if (steep) {
      drawPixel(y0, x0, color);
    } else {
      drawPixel(x0, y0, color);
    }
    err -= dy;
    if (err < 0) {
      y0 += ystep;
      err += dx;
    }
  }
}


void TFTLCD::fillScreen(uint16_t color) {
  goHome();
  uint32_t i;
  
  i = 320;
  i *= 240;
  
  *portOutputRegister(csport) &= ~cspin;
  //digitalWrite(_cs, LOW);
  *portOutputRegister(cdport) |= cdpin;
  //digitalWrite(_cd, HIGH);
  *portOutputRegister(rdport) |= rdpin;
  //digitalWrite(_rd, HIGH);
  *portOutputRegister(wrport) |= wrpin;
  //digitalWrite(_wr, HIGH);

  setWriteDir();
  while (i--) {
    writeData_unsafe(color); 
  }

  *portOutputRegister(csport) |= cspin;
  //digitalWrite(_cs, HIGH);
}

void TFTLCD::drawPixel(uint16_t x, uint16_t y, uint16_t color)
{
  // check rotation, move pixel around if necessary
  switch (rotation) {
  case 1:
    swap(x, y);
    x = TFTWIDTH - x - 1;
    break;
  case 2:
    x = TFTWIDTH - x - 1;
    y = TFTHEIGHT - y - 1;
    break;
  case 3:
    swap(x, y);
    y = TFTHEIGHT - y - 1;
    break;
  }
    
  if ((x >= TFTWIDTH) || (y >= TFTHEIGHT)) return;
  writeRegister(TFTLCD_GRAM_HOR_AD, x); // GRAM Address Set (Horizontal Address) (R20h)
  writeRegister(TFTLCD_GRAM_VER_AD, y); // GRAM Address Set (Vertical Address) (R21h)
  writeCommand(TFTLCD_RW_GRAM);  // Write Data to GRAM (R22h)
  writeData(color);
}

static const uint16_t _regValues[] PROGMEM = {
0x00e5,0x8000,
0x0000,0x0001,

0x0001,0x0100,
0x0002,0x0700,
0x0003,0x1030,
0x0004,0x0000,
0x0008,0x0202,
0x0009,0x0000,
0x000a,0x0000,	
0x000c,0x0000,2
0x000d,0x0000,
0x000f,0x0000,
//*********************************************Power On
0x0010,0x0000,
0x0011,0x0000,
0x0012,0x0000,
0x0013,0x0000,

0x0010,0x17b0,
0x0011,0x0037,

0x0012,0x0138,

0x0013,0x1700,
0x0029,0x000d,

0x0020,0x0000,
0x0021,0x0000,
//*********************************************Set gamma
0x0030,0x0001,
0x0031,0x0606,
0x0032,0x0304,
0x0033,0x0202,
0x0034,0x0202,
0x0035,0x0103,
0x0036,0x011d,
0x0037,0x0404,
0x0038,0x0404,
0x0039,0x0404,
0x003c,0x0700,
0x003d,0x0a1f,
//**********************************************Set Gram aera
0x0050,0x0000,
0x0051,0x00ef,
0x0052,0x0000,
0x0053,0x013f,
0x0060,0x2700,
0x0061,0x0001,
0x006a,0x0000,
//*********************************************Paratial display
0x0090,0x0010,
0x0092,0x0000,
0x0093,0x0003,
0x0095,0x0101,
0x0097,0x0000,
0x0098,0x0000,
//******************************************** Plan Control
0x0007,0x0021,

0x0007,0x0031,

0x0007,0x0173,

//LLCD_WRITE_CMD(0x0022,

  // Display On
  TFTLCD_DISP_CTRL1, 0x0133,     // Display Control (R07h)
};

void TFTLCD::initDisplay(void) {
  uint16_t a, d;

  reset();
  
  for (uint8_t i = 0; i < sizeof(_regValues) / 4; i++) {
    a = pgm_read_word(_regValues + i*2);
    d = pgm_read_word(_regValues + i*2 + 1);

    if (a == 0xFF) {
      delay(d);
    } else {
      writeRegister(a, d);
      //Serial.print("addr: "); Serial.print(a); 
      //Serial.print(" data: "); Serial.println(d, HEX);
    }
  }
}

uint8_t TFTLCD::getRotation(void) {
  return rotation;
}

void TFTLCD::setRotation(uint8_t x) {
  writeRegister(TFTLCD_ENTRY_MOD, 0x1030);

  x %= 4;  // cant be higher than 3
  rotation = x;
  switch (x) {
  case 0:
    _width = TFTWIDTH; 
    _height = TFTHEIGHT;
    break;
  case 1:
    _width = TFTHEIGHT; 
    _height = TFTWIDTH;
    break;
  case 2:
    _width = TFTWIDTH; 
    _height = TFTHEIGHT;
    break;
  case 3:
    _width = TFTHEIGHT; 
    _height = TFTWIDTH;
    break;
 }
}

/********************************* low level pin initialization */

TFTLCD::TFTLCD(uint8_t cs, uint8_t cd, uint8_t wr, uint8_t rd, uint8_t reset) {
  _cs = cs;
  _cd = cd;
  _wr = wr;
  _rd = rd;
  _reset = reset;
  
  rotation = 0;
  _width = TFTWIDTH;
  _height = TFTHEIGHT;

  // disable the LCD
  digitalWrite(_cs, HIGH);
  pinMode(_cs, OUTPUT);  
  
  digitalWrite(_cd, HIGH);
  pinMode(_cd, OUTPUT);  
  
  digitalWrite(_wr, HIGH);
  pinMode(_wr, OUTPUT);  
  
  digitalWrite(_rd, HIGH);
  pinMode(_rd, OUTPUT);  

  digitalWrite(_reset, HIGH); 
  pinMode(_reset, OUTPUT); 

  csport = digitalPinToPort(_cs);
  cdport = digitalPinToPort(_cd);
  wrport = digitalPinToPort(_wr);
  rdport = digitalPinToPort(_rd);

  cspin = digitalPinToBitMask(_cs);
  cdpin = digitalPinToBitMask(_cd);
  wrpin = digitalPinToBitMask(_wr);
  rdpin = digitalPinToBitMask(_rd);

  cursor_y = cursor_x = 0;
  textsize = 1;
  textcolor = 0xFFFF;
}


/********************************** low level pin interface */

void TFTLCD::reset(void) {
  if (_reset)
    digitalWrite(_reset, LOW);
  delay(2); 
  if (_reset)
    digitalWrite(_reset, HIGH);

  // resync
  writeData(0);
  writeData(0);
  writeData(0);  
  writeData(0);
}

inline void TFTLCD::setWriteDir(void) {
#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined (__AVR_ATmega328) || (__AVR_ATmega8__)
  DATADDR2 |= DATA2_MASK;
  DATADDR1 |= DATA1_MASK;
#elif defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__) 

  #ifdef USE_ADAFRUIT_SHIELD_PINOUT
  DDRH |= 0x78;
  DDRB |= 0xB0;
  DDRG |= _BV(5);
  #else
  MEGA_DATADDR = 0xFF;
  #endif
#else
  #error "No pins defined!"
#endif
}

inline void TFTLCD::setReadDir(void) {
#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined (__AVR_ATmega328) || (__AVR_ATmega8__)
  DATADDR2 &= ~DATA2_MASK;
  DATADDR1 &= ~DATA1_MASK;
#elif defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__) 

  #ifdef USE_ADAFRUIT_SHIELD_PINOUT
  DDRH &= ~0x78;
  DDRB &= ~0xB0;
  DDRG &= ~_BV(5);
  #else
  MEGA_DATADDR = 0;
  #endif
#else
  #error "No pins defined!"
#endif
}

inline void TFTLCD::write8(uint8_t d) {
#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined (__AVR_ATmega328) || (__AVR_ATmega8__)

  DATAPORT2 = (DATAPORT2 & DATA1_MASK) | 
    (d & DATA2_MASK);
  DATAPORT1 = (DATAPORT1 & DATA2_MASK) | 
    (d & DATA1_MASK); // top 6 bits
  
#elif defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__) 


#ifdef USE_ADAFRUIT_SHIELD_PINOUT

  // bit 6/7 (PH3 & 4)
  // first two bits 0 & 1 (PH5 & 6)
  PORTH &= ~(0x78);
  PORTH |= ((d&0xC0) >> 3) | ((d&0x3) << 5);

  // bits 2 & 3 (PB4 & PB5)
  // bit 5 (PB7)
  PORTB &= ~(0xB0); 
  PORTB |= ((d & 0x2C) << 2);

  // bit 4  (PG5)
  if (d & _BV(4))
    PORTG |= _BV(5);
  else
    PORTG &= ~_BV(5);

  #else
     MEGA_DATAPORT = d;  
  #endif

#else
  #error "No pins defined!"
#endif
}

inline uint8_t TFTLCD::read8(void) {
 uint8_t d;
#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined (__AVR_ATmega328) || (__AVR_ATmega8__)

 d = DATAPIN1 & DATA1_MASK; 
 d |= DATAPIN2 & DATA2_MASK; 

#elif defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) || defined(__AVR_ATmega2560__)  || defined(__AVR_ATmega1280__) 

#ifdef USE_ADAFRUIT_SHIELD_PINOUT

  // bit 6/7 (PH3 & 4)
  // first two bits 0 & 1 (PH5 & 6)
 d = (PINH & 0x60) >> 5;
 d |= (PINH & 0x18) << 3;

  // bits 2 & 3 & 5 (PB4 & PB5, PB7)
 d |= (PINB & 0xB0) >> 2;

  // bit 4  (PG5)
  if (PING & _BV(5))
    d |= _BV(4);

#else
 d = MEGA_DATAPIN;  
#endif

#else

  #error "No pins defined!"

#endif

 return d;
}

/********************************** low level readwrite interface */

// the C/D pin is high during write
void TFTLCD::writeData(uint16_t data) {
  volatile uint8_t *wrportreg = portOutputRegister(wrport);

  *portOutputRegister(csport) &= ~cspin;
  //digitalWrite(_cs, LOW);
  *portOutputRegister(cdport) |= cdpin;
  //digitalWrite(_cd, HIGH);
  *portOutputRegister(rdport) |= rdpin;
  //digitalWrite(_rd, HIGH);
  
  *wrportreg |=  wrpin;
  //digitalWrite(_wr, HIGH);

  setWriteDir();
  write8(data >> 8);
  
  *wrportreg &= ~wrpin;
  //digitalWrite(_wr, LOW);
  *wrportreg |=  wrpin;
  //digitalWrite(_wr, HIGH);

  write8(data);

  *wrportreg &= ~wrpin;
  //digitalWrite(_wr, LOW);
  *wrportreg |=  wrpin;
  //digitalWrite(_wr, HIGH);

  *portOutputRegister(csport) |= cspin;
  //digitalWrite(_cs, HIGH);
}

// this is a 'sped up' version, with no direction setting, or pin initialization
// not for external usage, but it does speed up stuff like a screen fill
inline void TFTLCD::writeData_unsafe(uint16_t data) {
  volatile uint8_t *wrportreg = portOutputRegister(wrport);

  write8(data >> 8);

  *wrportreg &= ~wrpin;
  //digitalWrite(_wr, LOW);
  *wrportreg |=  wrpin;
  //digitalWrite(_wr, HIGH);

  write8(data);

  *wrportreg &= ~wrpin;
  //digitalWrite(_wr, LOW);
  *wrportreg |=  wrpin;
  //digitalWrite(_wr, HIGH);
}

// the C/D pin is low during write
void TFTLCD::writeCommand(uint16_t cmd) {
  volatile uint8_t *wrportreg = portOutputRegister(wrport);

  *portOutputRegister(csport) &= ~cspin;
  //digitalWrite(_cs, LOW);
  *portOutputRegister(cdport) &= ~cdpin;
  //digitalWrite(_cd, LOW);
  *portOutputRegister(rdport) |= rdpin;
  //digitalWrite(_rd, HIGH);
  
  *wrportreg |=  wrpin;
  //digitalWrite(_wr, HIGH);

  setWriteDir();
  write8(cmd >> 8);

  *wrportreg &= ~wrpin;
  //digitalWrite(_wr, LOW);
  *wrportreg |=  wrpin;
  //digitalWrite(_wr, HIGH);

  write8(cmd);

  *wrportreg &= ~wrpin;
  //digitalWrite(_wr, LOW);
  *wrportreg |=  wrpin;
  //digitalWrite(_wr, HIGH);

  *portOutputRegister(csport) |= cspin;
}

uint16_t TFTLCD::readData() {
 uint16_t d = 0;
 
  *portOutputRegister(csport) &= ~cspin;
  //digitalWrite(_cs, LOW);
  *portOutputRegister(cdport) |= cdpin;
  //digitalWrite(_cd, HIGH);
  *portOutputRegister(rdport) |= rdpin;
  //digitalWrite(_rd, HIGH);
  *portOutputRegister(wrport) |= wrpin;
  //digitalWrite(_wr, HIGH);
  
  setReadDir();

  *portOutputRegister(rdport) &= ~rdpin;
  //digitalWrite(_rd, LOW);

  delayMicroseconds(10);
  d = read8();
  d <<= 8;

  *portOutputRegister(rdport) |= rdpin;
  //digitalWrite(_rd, HIGH);
  *portOutputRegister(rdport) &= ~rdpin;
  //digitalWrite(_rd, LOW);

  delayMicroseconds(10);
  d |= read8();

  *portOutputRegister(rdport) |= rdpin;
  //digitalWrite(_rd, HIGH);
  
  *portOutputRegister(csport) |= cspin;
  //digitalWrite(_cs, HIGH);
   
  return d;
}


/************************************* medium level data reading/writing */

uint16_t TFTLCD::readRegister(uint16_t addr) {
   writeCommand(addr);
   return readData();
}

void TFTLCD::writeRegister(uint16_t addr, uint16_t data) {
   writeCommand(addr);
   writeData(data);
}

0

10

RJJ написал(а):

LCD_ID_Reader ВЫДАЕТ ID 0X0000  У ДРУГОГО ID 0X9797. КРАСНАЯ ЗАСТАВКА ДО ПОЛОВИНЫ ЭКРАНА ДАЛЕЕ СВЕТЛЕЕТ ДО БЕЛОГО

0

11

RJJ написал(а):

скачал читалку по Arduino  _ID_ReadAllreg_v5.2_graphicstest  ID читается 0x0000 но в тесте запускается в зеркальном отображении. Скачал библиотеку под spdf5408  драйвер ili9341 дисплей нормально за работал (приложеная тестовая программа)  библиотека взята с сайта https://www.mcselec.com/index2.php?opti … p;id=3764.  Где найти  библиотеку под spdf5408  драйвер ili9341 для Bascom? Есть ли у кого?
другой дисплей IDn 9797, все как описано выше.

0

12

Так у вас spdf5408  или ili9341?

0

13

bulat943 написал(а):

Так у вас spdf5408  или ili9341?

Вообще библиотека arduino  под spdf5408 и в ней по умолчанию стоит ili9341
не понятно, что там стоят оба? Если ставлю библиотеку ili9341 дисплей не работает!

0

14

Библиотека ардуино поддерживает много (более 20) дисплеев,в самой программе выбираете один-единственный тип дисплея
Где то в компе что-то было,если найду-выложу

я не доделал тот проект,извините,вот только осталось это

Код:
$regfile = "m328pdef.dat"
$crystal = 16000000
$hwstack = 56
$swstack = 32
$framesize = 48
$baud = 9600
'/* LCD color */
Const White = &HFFFF
Const Black = &H0000
Const Blue = &H001F
Const Blue2 = &H051F
Const Red = &HF800
Const Magenta = &HF81F
Const Green = &H07E0
Const Cyan = &H7FFF
Const Yellow = &HFFE0
Const X_const = 240
Const Y_const = 320
Rs Alias Portc.0
Wr Alias Portc.1
Cs Alias Portc.3
Rst Alias Portc.4

Declare Sub Write_command(byval Cmd As Word)
Declare Sub Write_data(byval Ldata As Word)
Declare Sub Write_command_data(byval Cmd As Word , Byval Ldata As Word)
Declare Sub Lcd_init()
'Declare Sub Set_xy(byval X0 As Word , Byval Y0 As Word , Byval X1 As Word , Byval Y1 As Word)
Declare Sub Set_xy()
Declare Sub Pant(byval Color As Word)
Declare Sub Lcd_clear()
Declare Sub Touch_init()
Declare Sub Touch_writedata(byval Ldata As Byte)
Declare Sub Touch_readdata()
Declare Sub Touch_read()
Dim W As Word
Dim X0 As Word , X1 As Word , Y0 As Word , Y1 As Word
Lcd_init
Waitms 50
Lcd_clear
Call Pant(&Hffff)
Call Pant(&H0000)
Wait 1
Call Pant(&Hf800)
Call Pant(&H07e0)
Call Pant(&H001f)
Call Pant(&Hffff)
Wait 1
Call Pant(cyan)

Do
Loop
'===============================================================================
Sub Write_command(byval Cmd As Word)
   Cs = 0
   Rs = 0
   Portd = High(cmd)
   Portb.0 = Portd.0
   Portb.1 = Portd.1
   Wr = 0
   Waitus 3
   Wr = 1
   Cs = 1
   Waitus 3
   Cs = 0
   Rs = 0
   Portd = low(cmd)
   Portb.0 = Portd.0
   Portb.1 = Portd.1
   Wr = 0
   Waitus 3
   Wr = 1
   Cs = 1


End Sub
Sub Write_data(byval Ldata As Word)
   Cs = 0
   Rs = 1
   Portd = High(Ldata)
   Portb.0 = Portd.0
   Portb.1 = Portd.1
   Wr = 0
   Waitus 3
   Wr = 1
   Cs = 1
   waitus 3
   Cs = 0
   Rs = 1
   Portd = low(Ldata)
   Portb.0 = Portd.0
   Portb.1 = Portd.1
   Wr = 0
   Waitus 3
   Wr = 1
   Cs = 1


End Sub
Sub Write_command_data(byval Cmd As Word , Byval Ldata As Word)
   Call Write_command(cmd)
   Call Write_data(ldata)
End Sub
Sub Lcd_init()
   Config Rs = Output
   Config Wr = Output
   Config Cs = Output
   Config Rst = Output
   Ddrd = $ff
   Ddrb = $ff
   Rst = 1
   Waitms 15
   Rst = 0
   Waitms 15
   Wr = 1
   Cs = 1
   Rst = 1
   Waitms 20
   Call Write_command_data(&H0000 , &H0001)
   Call Write_command_data(&H0003 , &HA8A4)
   Call Write_command_data(&H000c , &H0000)
   Call Write_command_data(&H000d , &H080C)
   Call Write_command_data(&H000e , &H2B00)
   Call Write_command_data(&H001e , &H00B7)
   Call Write_command_data(&H0001 , &H2B3F)
   Call Write_command_data(&H0002 , &H0600)
   Call Write_command_data(&H0010 , &H0000)
   Call Write_command_data(&H0011 , &H6070)
   Call Write_command_data(&H0005 , &H0000)
   Call Write_command_data(&H0006 , &H0000)
   Call Write_command_data(&H0016 , &HEF1C)
   Call Write_command_data(&H0017 , &H0003)
   Call Write_command_data(&H0007 , &H0233)
   Call Write_command_data(&H000b , &H0000)
   Call Write_command_data(&H000f , &H0000)
   Call Write_command_data(&H0041 , &H0000)
   Call Write_command_data(&H0042 , &H0000)
   Call Write_command_data(&H0048 , &H0000)
   Call Write_command_data(&H0049 , &H013F)
   Call Write_command_data(&H004a , &H0000)
   Call Write_command_data(&H004b , &H0000)
   Call Write_command_data(&H0044 , &HEF00)
   Call Write_command_data(&H0045 , &H0000)
   Call Write_command_data(&H0046 , &H013F)
   Call Write_command_data(&H0030 , &H0707)
   Call Write_command_data(&H0031 , &H0204)
   Call Write_command_data(&H0032 , &H0204)
   Call Write_command_data(&H0033 , &H0502)
   Call Write_command_data(&H0034 , &H0507)
   Call Write_command_data(&H0035 , &H0204)
   Call Write_command_data(&H0036 , &H0204)
   Call Write_command_data(&H0037 , &H0502)
   Call Write_command_data(&H003a , &H0302)
   Call Write_command_data(&H003b , &H0302)
   Call Write_command_data(&H0023 , &H0000)
   Call Write_command_data(&H0024 , &H0000)
   Call Write_command_data(&H0025 , &H8000)
   Call Write_command_data(&H004f , &H0000)
   Call Write_command_data(&H004e , &H0000)
   Call Write_command(&H0022)
End Sub
'Sub Set_xy(byval X0 As Word , Byval Y0 As Word , Byval X1 As Word , Byval Y1 As Word)
Sub Set_xy()
Local I As Word , J As Word
   I = Low(x1)
   Rotate I , Left , 8
   J = I + X0
   Call Write_command_data(&H0044 , J)
   Call Write_command_data(&H0045 , Y0)
   Call Write_command_data(&H0046 , Y1)
   Call Write_command_data(&H004e , X0)
   Call Write_command_data(&H004f , Y0)
   Call Write_command(&H0022)
End Sub
Sub Pant(byval Color As Word)
Local I As Word , J As Word
   X0 = 0 : Y0 = 0 : X1 = 239 : Y1 = 319
   Call Set_xy()
   For I = 0 To 319
     For J = 0 To 239
       Call Write_data(color)
     Next J
   Next I
End Sub
Sub Lcd_clear()
Local I As Word , J As Word
   X0 = 0 : Y0 = 0 : X1 = 239 : Y1 = 319
   Call Set_xy()
   For I = 0 To 319
     For J = 0 To 239
       Call Write_data(&H0000)
     Next J
   Next I
End Sub

Отредактировано bulat943 (2018-09-11 15:59:43)

0

15

bulat943 написал(а):

Библиотека ардуино поддерживает много (более 20) дисплеев,в самой программе выбираете один-единственный тип дисплея
Где то в компе что-то было,если найду-выложу

я не доделал тот проект,извините,вот только осталось это

Отредактировано bulat943 (Сегодня 13:59:43)


Спасибо!!!
вот кусок кода этой библиотеки
обратите внимание на последнюю строчку

Код:
#include <SPFD5408_Adafruit_GFX.h>    // Core graphics library
#include <SPFD5408_Adafruit_TFTLCD.h> // Hardware-specific library
#include <SPFD5408_TouchScreen.h>
// *** SPFD5408 change -- End

// The control pins for the LCD can be assigned to any digital or
// analog pins...but we'll use the analog pins as this allows us to
// double up the pins with the touch screen (see the TFT paint example).
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0

#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin

// When using the BREAKOUT BOARD only, use these 8 data lines to the LCD:
// For the Arduino Uno, Duemilanove, Diecimila, etc.:
//   D0 connects to digital pin 8  (Notice these are
//   D1 connects to digital pin 9   NOT in order!)
//   D2 connects to digital pin 2
//   D3 connects to digital pin 3
//   D4 connects to digital pin 4
//   D5 connects to digital pin 5
//   D6 connects to digital pin 6
//   D7 connects to digital pin 7
// For the Arduino Mega, use digital pins 22 through 29
// (on the 2-row header at the end of the board).

// Assign human-readable names to some common 16-bit color values:
#define	BLACK   0x0000
#define	BLUE    0x001F
#define	RED     0xF800
#define	GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// If using the shield, all control and data lines are fixed, and
// a simpler declaration can optionally be used:
// Adafruit_TFTLCD tft;

// -- Setup

void setup(void) {
  
  Serial.begin(9600);
  
  progmemPrintln(PSTR("TFT LCD test"));

#ifdef USE_ADAFRUIT_SHIELD_PINOUT
  progmemPrintln(PSTR("Using Adafruit 2.8\" TFT Arduino Shield Pinout"));
#else
  progmemPrintln(PSTR("Using Adafruit 2.8\" TFT Breakout Board Pinout"));
#endif

  tft.reset();
 
  // *** SPFD5408 change -- Begin

// Original code commented

//  uint16_t identifier = tft.readID();
//
//  if(identifier == 0x9325) {
//    Serial.println(F("Found ILI9325 LCD driver"));
//  } else if(identifier == 0x9328) {
//    Serial.println(F("Found ILI9328 LCD driver"));
//  } else if(identifier == 0x7575) {
//    Serial.println(F("Found HX8347G LCD driver"));
//  } else if(identifier == 0x9341) {
//    Serial.println(F("Found ILI9341 LCD driver"));
//  } else if(identifier == 0x8357) {
//    Serial.println(F("Found HX8357D LCD driver"));
//  } else {
//    Serial.print(F("Unknown LCD driver chip: "));
//    Serial.println(identifier, HEX);
//    Serial.println(F("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
//    Serial.println(F("  #define USE_ADAFRUIT_SHIELD_PINOUT"));
//    Serial.println(F("should appear in the library header (Adafruit_TFT.h)."));
//    Serial.println(F("If using the breakout board, it should NOT be #defined!"));
//    Serial.println(F("Also if using the breakout, double-check that all wiring"));
//    Serial.println(F("matches the tutorial."));
//    return;
//  }
//
//  tft.begin(identifier);

  // Code changed to works 
  
  tft.begin(0x9341); // SDFP5408

0

16

RJJ написал(а):

может кому пригодится
дисплеи от сотиков
марка дисплея - контролер

Свернутый текст

CHSH_H#### NT35601
CHSH24_NT# NT35702
CHSH255### NT35702
CHSH26#### NT35702
CS24A##### ILI9325
CS24AD#### ILI9325
CS24AD#### ILI9325
CS24B##### ILI9328
CS24BD#### ILI9328
CS24BD#### ILI9328
CTD28N#### LGDP4535
CTD28NB### LGDP4535
DJ28A##### ILI9320
EAGLE28F## HX8347
EAGLE28FD# HX8347
EAGLE28FD# HX8347
FEIGEDA### ILI9225
FHC28D#### ILI9320
FHC28D#### ILI9320
HJM20##### ILI9225
HJM26A#### ILI9335
HLT28A#### ILI9325
HLT28AD### ILI9325
HLT28AD### ILI9325
HLW_H##### HX8340B
HONGTAO### ILI9327
HSD26##### ILI9328
HSTAR26### ILI9328
HT28###### ILY9328
HT28_D#### ILY9328
HT30###### R61509V
HUARUI#### LG4538
IMAGE28A## R61580
IMAGE28AD# R61580
IMAGE28AD# R61580
INNOL28F## HX8347
INNOL28FD# HX8347
INNOL28FD# HX8347
JCL24A#### R61505W
JINXIN#### NT35601
JL26A##### SPFD5408B
JQ24###### ILI9328
JQ24A##### ST7781
JQ26A##### ILI9335
JQ28###### SSD1297
JT24###### ILI9328
JYD220176# ILI9225
JYD22A#### ILI9481
JYD24AD### SPDF5408B
JYD24B#### ILI9325
JYD26A#### HX8368
LJJ24##### ILI9328
LJJ26A#### R61505W
LJJ26A#### R61580
LQ26A##### ILI9338
LSG26##### R61505W
POWERTIP## ILI9325
POWERTIPD# ILI9325
POWERTIPD# ILI9325
PWRTIP24## R61505U
QC24A##### LGDP4532
QC24AD#### LGDP4532
QC24AD#### LGDP4532
QC24B##### BF6813
QC24BD#### BF6813
QC24BD#### BF6813
QC26A##### ILI9328
QC28A##### BF6813
QIXIAN#### ST7725R
QXQ20##### OTM3225A
RRK24A#### ILI9325
RXD24A#### ST7781
RXD24AD### ST7781
RXD24AD### ST7781
RXD24B#### ST7781
SHTENG_H## NT35601
SHTX###### R61505U
SONA24#### NT39116B
SONA24A### ILI9325
SX28A##### ILI9325
SYO24##### FT1505C
SYO24##### ILI9320
TECHTRON## ILI3225
TECHTRON## ILI9225
TIANCH_HV# ILI9225
TIANCUANG# ILI9225
TIANCUANG# S6D02A1
TKTEL24A## ILI9325
TKTEL26### SSD1297
TKTEL26D## SSD1297
TKTEL26D## SSD1297 
TKTEL28### HX8347
TKTEL28N## ILI9325
TKTEL28ND# HX8347
TKTEL28ND# HX8347
TKTEL28ND# ILI9325
TKTEL28ND# ILI9325
TM24A##### ILI9325
TM24A##### ILI9328
TM24AD#### ILI9325
TM24AD#### ILI9325
TM24B##### ILI9328
TM24C##### ILI9328
TOVIS28ND# ILI9325
TRULY24A## LGDP4532
TRULY24AD# LGDP4532
TRULY24AD# LGDP4532
TRULY24BD# HX8367
TRULY24BD# HX8367
TRULY24H## ILI9325
TRULY26F## S6D0154
TRULY26FD# S6D0154
TRULY26FD# S6D0154
TRULY26HD# ILI9325
TRULY26HD# ILI9325
TRULY28A## HX8347D
TRULY28A## HX8347D
TRULY28A## R61505U
TRULY28A## S6D0139
TRULY28D## R61505V
TRULY28N## R61505V
TRULY30A## SSD1289
TRULY32A## SSD1289Z
TRUST22### SSD1289Z
TRUST26### ILI9335
TRUST26A## S6D1121
VISUS28A## ILI9331
VP24A##### FT1505C
VP24A##### ILI9320
VP28A##### S6D0154
VSS26A#### LGDP4535
WISTR24### ILI9320
WISTR24A## ILI9325
WISTR28N## ILI9325
WISTR28ND# ILI9325
WISTR28ND# ILI9325
WSL24A#### ILI9325
WTD24A#### ILI9325
WTD24A#### ST7781
WTD24AD### ST7781
WTD24B#### ILI9325
WTD24B#### ST7781
WTD24BD### ILI9325
WTD24BD### ILI9325
WTD24BD### ST7781
WTD24BD### ST7781
WTD24C#### ST7781
WTD26A#### SSD1297 
WTD26A#### SSD1297 
WTD28A#### SPDF5408B
WTD28N#### HX8347
WTD28ND### HX8347
WTD28ND### HX8347
XJDSH##### HX8340B
XL24A##### ST7785
XP26A##### ST7783
XP26A##### ST7783
XXD####### ILI9325
XXD####### OTM3225
XY24###### NT35702
XY24A##### ILI9320 
XY24BD#### ILI9325
XY24BD#### ILI9325
XY24C##### ILI9328
XY24CD#### ILI9328
XY24CD#### ILI9328
XY24E##### FT1505C
XY24ED#### FT1505C
XY24ED#### FT1505C
XZ26A##### ILI9325
XZ28A##### NV3016
XZ28B##### NV3016
YAOYU24### ILI9325
YASSY24### R61513
YDE26A#### ILI9328
YIX24A#### ILI9328
YJD26A#### ILI9328
YJD26A#### ILI9335
YJD26A#### OTM3225
YJD26AD### ILI9335
YJD26AD### ILI9335
YS24A##### ILI9325
YS24B##### ILI9325
YT24A##### S6D1121
YT24B##### ILI9325
YT26A##### HX8347D
YT26A##### NT39116B
YT26A##### OTM3225
YT26A8B### HX8347D
YT26AD#### OTM3225
YT26AD#### OTM3225
YT26B##### HX8347D
YT26C##### HX8347D
YTF26A#### HX8347D
YXD24A#### ILI9325
YXD26A#### ILI9325
YXD26A#### ILI9328
YXD26A#### NT35702
YXD26A#### NT39116B
ZX24A##### SPFD5408B
ZX24B##### SPFD5408B

bulat943 написал(а):

Portd = High(cmd)
   Portb.0 = Portd.0
   Portb.1 = Portd.1
поясните пожалуйста эти строки.

0

17

это же азы...
Portb.0 =0-подать лог 0
Portb.0 =1-подать лог 1

0

18

Разве?
Portb.0 = Portd.0
Portb.1 = Portd.1
Portb.0 установить в  состояние порта  Portd.0
Portb.1 установить в  состояние порта Portd.1
Для чего?

какой порт для данных lcd?
Понятно что это сделано под ваш проект но для меня то  непонятно вот и прошу вас объяснить.

0

19

Почему библиотеки под ILI9341 Arduino работают а под BASCOM не работают?
Булат Вы как с ARDUINO ?  Я ни когда не занимался да и с библиотеками BASCOM то же.

0

20

RJJ написал(а):

Разве?
Portb.0 = Portd.0
Portb.1 = Portd.1
Portb.0 установить в  состояние порта  Portd.0
Portb.1 установить в  состояние порта Portd.1
Для чего?

какой порт для данных lcd?
Понятно что это сделано под ваш проект но для меня то  непонятно вот и прошу вас объяснить.

у  вас в руке дисплей,воткните в ардуино уно и увидите какой порт куда идет,неужто так трудно?

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » 2.8" TFT LCD с тачскрином, контроллер HX8347-G, нужны библиотеки