1.44인치 TFT LCD에 이미지 표시

지난번
1.44 인치 TFT LCD 128 x 128 ST7735 작동 확인 메모
htps : // 코 m / 산타로 6 / ms / 7f2946 굳이 918245049440
계속

이미지를 표시하고 싶습니다.
※소스는, 나중에, 업합니다

결과로부터 나타내면, 이하와 같이 낼 수 있었다.


절차는
1) 표시하는 화상 파일로부터, 기입용의 데이터를 작성한다
2) 데이터를 EEPROM에 기록
3) EEPROM의 데이터를 읽으면서 TFT 액정에 그리기

좀 더 세밀하게 쓰면,

1) 표시하는 화상 파일로부터, 기입용의 데이터를 작성한다

1-1) 128 × 128 픽셀의 비트 맵 (bmp) 이미지 준비
1-2) bmp에서 각 xy 좌표의 RGB 데이터를 검색합니다.
1-3) 24bit의 RGB 데이터를 16bit의 RGB 데이터로 변환하고, 16진 표기하고, 텍스트화한다

24bit일 때, R=1byte(8bit), G=1byte(8bit), B=1byte(8bit)
(3byte : RRRRRRRRGGGGGGGGBBBBBBBBB)
16bit일 때, R=(5bit), G=(6bit), B=(5bit)
(2byte:RRRRRGGGGGGBBBBB)
이 변환은
R과 B는, 0~255를, 0~31로 변환. (예:r1=r0/256*32)
G는, 0~255를, 0~63으로 변환. (예: g1=g0/256*64)

2) 데이터를 EEPROM에 기록

쓰기는 여기를 참조했습니다.

htps //w w. 페치 t 몬테. 이 m/로보 t/호 w와_예 p로m_이 2c. HTML
htp://라지오펜 ch. bぉg96. FC2. 소 m/bぉg-엔트리-574. html

메모리는 이것입니다.
EEPROM 24FC1025
htp // 아키즈키덴시. 코 m/타타 g/g/기-03570/

1024Kbit이므로 128Kbyte 쓸 수 있다.
(1화면당, 128 x 128 x 2byte = 32Kbyte이므로, 4장분 들어간다.)

※발췌

write_eeprom.ino
for (i=( (m_x * stp)); i<((m_x * (stp+1))); i++){  
  Wire.beginTransmission(DEVICE_ADDRESS);    
  Wire.write(i >> 8);     // Address(High Byte)   
  Wire.write(i & 0x00FF); // Address(Low Byte)
  int id1;
  id1 = pgm_read_byte(IMAGE_DATA1 + id_ad);
  Wire.write(id1); 
  id_ad ++;
  Wire.endTransmission();
  delay(5);
}


3) EEPROM의 데이터를 읽으면서 TFT 액정에 그리기

※발췌

tft_drawPixel.ino
 for (int16_t y=0; y < tft.height(); y+=1) {
  for (int16_t x=0; x < tft.width(); x+=1) {

  int16_t ad1 = (y * 256) + (x * 2);
  int16_t ad2 = (y * 256) + (x * 2) + 1;

    Wire.beginTransmission(DEVICE_ADDRESS);
    Wire.write(ad1 >> 8);     // Address(High Byte)   
    Wire.write(ad1 & 0x00FF); // Address(Low Byte)
    Wire.endTransmission();
    Wire.requestFrom(DEVICE_ADDRESS, 1); 
    while (Wire.available() == 0 ){}
    unsigned char a1 = Wire.read();

    Wire.beginTransmission(DEVICE_ADDRESS);
    Wire.write(ad2 >> 8);     // Address(High Byte)   
    Wire.write(ad2 & 0x00FF); // Address(Low Byte)
    Wire.endTransmission();
    Wire.requestFrom(DEVICE_ADDRESS, 1); 
    while (Wire.available() == 0 ){}
    unsigned char a2 = Wire.read();

    unsigned short int c1 = (a1 << 8) + a2;
    tft.drawPixel(x, y, c1);
    delay(0);
  }
 }

좋은 웹페이지 즐겨찾기