Ремонт шлейфа дисплея Nokia 5110 84x48

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#1 Дим » 17 июня 2019, 22:00

phpBB [media]

Спойлер
Ремонт шлейфа дисплея Nokia 5110 84x48.JPG
Ремонт шлейфа дисплея Nokia 5110 84x48

Ремонт шлейфа дисплея Nokia 5110 84x48 3.JPG
Ремонт шлейфа дисплея Nokia 5110 84x48

Ремонт шлейфа дисплея Nokia 5110 84x48 2.JPG
Ремонт шлейфа дисплея Nokia 5110 84x48
Так получилось что этот дисплей пролежал у меня без дела более года. А вчера решив его испробовать обнаружил что он не исправен. Открывать спор с продавцом уже не имеет ни какого смысла и я решил покурочить данный девайс. К сожалении внутренности сфотографировать я не удосужился. А вскрывать повторно потроха дисплея уже нет желания, благо он сейчас работает должным образом. Отогнув четыре защёлки на задней стороне платы, я снял металлическую рамку, которая удерживает сам дисплей. Думая что он не исправен - я особо с ним не церемонился. Оторвав от дисплея контакты (на фото под платой черная приблуда) подумал может заменить их каким либо шлейфом. Но для этого иго нужно было бы приклеить токопроводящим клеем или лаком (коим вроде и были примазана колодка с контактами). При более тщательном разглядывании "стёклышка" дисплея обнаружил что где то я уже видел такие дорожки
дорожки на стекле дисплея.png
дорожки на стекле дисплея
дорожки на стекле дисплея.png (39.2 КБ) 1511 просмотров

Это был дисплей мультиметра. Но там соединение ни на шлейфе ни на контактах, а на какой то резиночке. Это silicone zebra connector - вообщем силиконовый зебра соединитель :grin:
silicone zebra connector -  силиконовый зебра соединитель.png
silicone zebra connector - силиконовый зебра соединитель
silicone zebra connector - силиконовый зебра соединитель.png (72.5 КБ) 1511 просмотров

Но нет худа без добра - тот мультиметр в котором я видел такое соединение, приказал долго жить и без дела лежал в коробочке. Вот из его достав зебру, я вырезал из неё пластиннику нужного мне размера. Сonnector должен плотно прилегать, для этого сделал по высоте его немного побольше. Тщательно зачистив место бедующего прилегания резиночки к стёклышку, установив все детали на место (благо их не много) собрал модуль воедино. Установив нужные библиотеки и залив скетч - любуюсь содеянным.
Немного переделанный скетч из примера к библиотеке Adafruit-PCD8544. Добавлено - функция utf8rus, заменено - падающие звёздочки на снежинки, вставлено - переход goto к отображению русских шрифтов, а также добавлен display.cp437(true).

Код: Выделить всё

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7);

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2

#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH  16

static const unsigned char PROGMEM logo16_glcd_bmp[] =
{
 B00000001, B00000000,
  B00000101, B01000000,
  B00000011, B10000000,
  B00100001, B00001000,
  B11000001, B00000110,
  B00110001, B00011000,
  B01001101, B01100100,
  B00000011, B10000000,
  B00000011, B10000000,
  B01001101, B01100100,
  B00110001, B00011000,
  B11000001, B00000110,
  B00100001, B00001000,
  B00000011, B10000000,
  B00000101, B01000000,
  B00000001, B00000000 };

void setup()   {
  Serial.begin(9600);

  display.begin();
  display.cp437(true);
// инициализация выполнена

// вы можете изменить контраст вокруг, чтобы адаптировать дисплей
// для лучшего просмотра!
  display.setContrast(50);

  display.display(); // показать заставку
  delay(2000);
  display.clearDisplay();   // очищает экран и буфер

  //goto metka; // russian font

  // нарисовать один пиксель
  display.drawPixel(10, 10, BLACK);
  display.display();
  delay(2000);
  display.clearDisplay();

  //рисовать много линий
  testdrawline();
  display.display();
  delay(2000);
  display.clearDisplay();

  // рисовать прямоугольники
  testdrawrect();
  display.display();
  delay(2000);
  display.clearDisplay();

  //нарисовать несколько прямоугольников
  testfillrect();
  display.display();
  delay(2000);
  display.clearDisplay();

  // нарисовать несколько кругов
  testdrawcircle();
  display.display();
  delay(2000);
  display.clearDisplay();

  // нарисовать круг, радиус 10 пикселей
  display.fillCircle(display.width()/2, display.height()/2, 10, BLACK);
  display.display();
  delay(2000);
  display.clearDisplay();

  testdrawroundrect();
  delay(2000);
  display.clearDisplay();

  testfillroundrect();
  delay(2000);
  display.clearDisplay();

  testdrawtriangle();
  delay(2000);
  display.clearDisplay();
   
  testfilltriangle
();
  delay(2000);
  display.clearDisplay();

  // нарисуйте первые ~ 12 символов в шрифте
  testdrawchar();
  display.display();
  delay(2000);
  display.clearDisplay();

  // тесты отображения текста
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(0,0);
  display.println("Hello, world!");
  display.setTextColor(WHITE, BLACK); //«перевернутый» текст
  display.println(3.141592);
  display.setTextSize(2);
  display.setTextColor(BLACK);
  display.print("0x"); display.println(0xDEADBEEF, HEX);
  display.display();
  delay(2000);

  //пример вращения
  display.clearDisplay();
  display.setRotation(1);  // повернуть на 90 градусов против часовой стрелки, также можно использовать значения 2 и 3, чтобы идти дальше.
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(0,0);
  display.println("Rotation");
  display.setTextSize(2);
  display.println("Example!");
  display.display();
  delay(2000);

  // вернуться обратно без вращения
  display.setRotation(0);

//metka:
  // russian font
  display.clearDisplay();
  display.setTextColor(BLACK);
  display.setCursor(0,0);
  display.setTextSize(1);
  display.println(utf8rus("Шрифт 1"));
  display.setTextSize(2);
  display.println(utf8rus("Шрифт2"));
  display.setTextSize(3);
  display.println(utf8rus("Шр3"));
  display.display();
  delay(5000);

  // миниатюрный растровый дисплей
  display.clearDisplay();
  display.drawBitmap(30, 16,  logo16_glcd_bmp, 16, 16, 1);
  display.display();

  // invert the display
  display.invertDisplay(true);
  delay(1000); 
  display
.invertDisplay(false);
  delay(1000); 

  
// нарисовать растровую иконку и анимировать движение
  testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_WIDTH, LOGO16_GLCD_HEIGHT);
}

void loop() {
}

void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) {
  uint8_t icons[NUMFLAKES][3];
  randomSeed(666);     // какое бы семя
 
  
// инициализировать
  for (uint8_t f=0; f< NUMFLAKES; f++) {
    icons[f][XPOS] = random(display.width());
    icons[f][YPOS] = 0;
    icons[f][DELTAY] = random(5) + 1;
    
    Serial
.print("x: ");
    Serial.print(icons[f][XPOS], DEC);
    Serial.print(" y: ");
    Serial.print(icons[f][YPOS], DEC);
    Serial.print(" dy: ");
    Serial.println(icons[f][DELTAY], DEC);
  }

  while (1) {
    // нарисовать каждый значок
    for (uint8_t f=0; f< NUMFLAKES; f++) {
      display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, BLACK);
    }
    display.display();
    delay(200);
    
    
// затем стереть + переместить
    for (uint8_t f=0; f< NUMFLAKES; f++) {
      display.drawBitmap(icons[f][XPOS], icons[f][YPOS],  logo16_glcd_bmp, w, h, WHITE);
      //подвинь это
      icons[f][YPOS] += icons[f][DELTAY];
      //если его нет, реините
      if (icons[f][YPOS] > display.height()) {
    icons[f][XPOS] = random(display.width());
    icons[f][YPOS] = 0;
    icons[f][DELTAY] = random(5) + 1;
      }
    }
  }
}

void testdrawchar(void) {
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(0,0);

  for (uint8_t i=0; i < 168; i++) {
    if (== '\n') continue;
    display.write(i);
    //if ((i > 0) && (i % 14 == 0))
      //display.println();
  }    
  display
.display();
}

void testdrawcircle(void) {
  for (int16_t i=0; i<display.height(); i+=2) {
    display.drawCircle(display.width()/2, display.height()/2, i, BLACK);
    display.display();
  }
}

void testfillrect(void) {
  uint8_t color = 1;
  for (int16_t i=0; i<display.height()/2; i+=3) {
    // alternate colors
    display.fillRect(i, i, display.width()-i*2, display.height()-i*2, color%2);
    display.display();
    color++;
  }
}

void testdrawtriangle(void) {
  for (int16_t i=0; i<min(display.width(),display.height())/2; i+=5) {
    display.drawTriangle(display.width()/2, display.height()/2-i,
                     display.width()/2-i, display.height()/2+i,
                     display.width()/2+i, display.height()/2+i, BLACK);
    display.display();
  }
}

void testfilltriangle(void) {
  uint8_t color = BLACK;
  for (int16_t i=min(display.width(),display.height())/2; i>0; i-=5) {
    display.fillTriangle(display.width()/2, display.height()/2-i,
                     display.width()/2-i, display.height()/2+i,
                     display.width()/2+i, display.height()/2+i, color);
    if (color == WHITE) color = BLACK;
    else color = WHITE;
    display.display();
  }
}

void testdrawroundrect(void) {
  for (int16_t i=0; i<display.height()/2-2; i+=2) {
    display.drawRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, BLACK);
    display.display();
  }
}

void testfillroundrect(void) {
  uint8_t color = BLACK;
  for (int16_t i=0; i<display.height()/2-2; i+=2) {
    display.fillRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, color);
    if (color == WHITE) color = BLACK;
    else color = WHITE;
    display.display();
  }
}
   
void testdrawrect
(void) {
  for (int16_t i=0; i<display.height()/2; i+=2) {
    display.drawRect(i, i, display.width()-2*i, display.height()-2*i, BLACK);
    display.display();
  }
}

void testdrawline() {  
  for 
(int16_t i=0; i<display.width(); i+=4) {
    display.drawLine(0, 0, i, display.height()-1, BLACK);
    display.display();
  }
  for (int16_t i=0; i<display.height(); i+=4) {
    display.drawLine(0, 0, display.width()-1, i, BLACK);
    display.display();
  }
  delay(250);
  
  display
.clearDisplay();
  for (int16_t i=0; i<display.width(); i+=4) {
    display.drawLine(0, display.height()-1, i, 0, BLACK);
    display.display();
  }
  for (int8_t i=display.height()-1; i>=0; i-=4) {
    display.drawLine(0, display.height()-1, display.width()-1, i, BLACK);
    display.display();
  }
  delay(250);
  
  display
.clearDisplay();
  for (int16_t i=display.width()-1; i>=0; i-=4) {
    display.drawLine(display.width()-1, display.height()-1, i, 0, BLACK);
    display.display();
  }
  for (int16_t i=display.height()-1; i>=0; i-=4) {
    display.drawLine(display.width()-1, display.height()-1, 0, i, BLACK);
    display.display();
  }
  delay(250);

  display.clearDisplay();
  for (int16_t i=0; i<display.height(); i+=4) {
    display.drawLine(display.width()-1, 0, 0, i, BLACK);
    display.display();
  }
  for (int16_t i=0; i<display.width(); i+=4) {
    display.drawLine(display.width()-1, 0, i, display.height()-1, BLACK); 
    display
.display();
  }
  delay(250);
}

/* Перекодировать русские шрифты из UTF-8 в Windows-1251 */
String utf8rus(String source)
{
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };

  k = source.length(); i = 0;

  while (< k) {
    n = source[i]; i++;

    if (>= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (== 0x81) { n = 0xA8; break; }
          if (>= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (== 0x91) { n = 0xB8; break; }
          if (>= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
return target;
}
[center]i love you [s]mxIni[/s] Mysql[/center]


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Аппаратная часть»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 3 гостя