LCD от кассовых аппаратов ЭКР и МИНИКА на микросхеме КР1820(analog COP472-3) + Arduino

Поделиться
HTML-код
  • Опубликовано: 2 окт 2024
  • Результат подключения, варианты дисплеев.
    Логическое "не" я срезал и замкнул соответствующие контакты, т.к., судя по всему, он и тактирующий импульс инвертировал, что очень мешало.
    Аналогичный проект на MSP430:
    geektimes.ru/p...
    По причине того, что описание уже написал другой автор я его подробно описывать не буду.

Комментарии • 11

  • @engineerTomsk
    @engineerTomsk  8 лет назад

    Ещё про ИЖЦ ЭКР
    ruclips.net/video/_zjPn4fclbQ/видео.html
    ruclips.net/video/OKxM_Um8YhQ/видео.html

  • @vasyavasin6365
    @vasyavasin6365 7 лет назад

    А библиотека для ардуины есть?

    • @engineerTomsk
      @engineerTomsk  7 лет назад

      Нет, для данного конкретного LCD библиотек нет.

  • @Slesarrr
    @Slesarrr 6 лет назад

    День добрый, подскажите, как с Вами можно связаться? Есть вопросы по поводу подключения аналогичного дисплея.
    Буду очень благодарен!

    • @engineerTomsk
      @engineerTomsk  6 лет назад

      Добрый! Пишите вопрос - помогу чем смогу.

    • @Slesarrr
      @Slesarrr 6 лет назад

      Я написал скетч для Ардуино по образу и подобию статьи с Гиктаймс, но дисплей ничего толкового не отображает, вместо этого в произвольном порядке загораются разные сегменты. Есть подозрение, что дисплей (или плата) повреждены, хотя и выглядят целыми.
      Хотелось бы проверить на заведомо рабочей программе, чтобы исключить ошибку в программной части. Если есть возможность, не могли бы Вы выложить на файлообменник свой скетч?
      Спасибо!

    • @engineerTomsk
      @engineerTomsk  6 лет назад

      Отдельно не нашёл, постараюсь вычленить из проекта. Если плата такая же, обязательно нужно убрать логическое "НЕ", отсоединив питалово от микросхеме и соединив входа с выходом по даташиту.

    • @engineerTomsk
      @engineerTomsk  6 лет назад

      #define NUM_KEYS 5
      #include
      int adc_key_val[NUM_KEYS] = {30, 150, 360, 535, 760};
      const int CLK=9;
      const int DATA=8;
      const int W1=12;
      const int W2=10;
      byte c;
      byte adres;
      byte opc1;
      byte opc2;
      byte opc3;
      byte opc4;
      byte opc5;
      byte opc6;
      byte opc7;
      byte opc8;
      byte Badres1;
      byte Badres2;
      int int2char(int inn){
      switch(inn){
      case 1 : return B00000110;
      case 2 : return 0x5B;
      case 3 : return 0x4F;
      case 4 : return 0x66;
      case 5 : return 0x6D;
      case 6 : return 0x7D;
      case 7 : return 0x07;
      case 8 : return 0x7F;
      case 9 : return 0x6F;
      case 0 : return 0x3F;
      default: return 0x3F;}
      }
      int char2byte(char ch){
      switch(ch){
      case '1' : return B00000110;
      case '2' : return 0x5B;
      case '3' : return 0x4F;
      case '4' : return 0x66;
      case '5' : return 0x6D;
      case '6' : return 0x7D;
      case '7' : return 0x07;
      case '8' : return 0x7F;
      case '9' : return 0x6F;
      case 'O' :
      case 'o' :
      case '0' : return 0x3F;
      case 'a' :
      case 'A' : return 0x77;
      case 'b' :
      case 'B' : return 0x7C;
      case 'c' :
      case 'C' : return 0x39;
      case 'd' :
      case 'D' : return 0x5E;
      case 'e' :
      case 'E' : return 0x79;
      case 'f' :
      case 'F' : return 0x71;
      case '-' : return 0x40;
      case ' ' : return 0x00;
      case 'p' :
      case 'P' : return 0x73;
      case 'g' :
      case 'G' : return 0x31;
      case 'l' :
      case 'L' : return 0x38;
      case 'h' :
      case 'H' : return 0x76;
      case 'y' :
      case 'Y' : return 0x38;
      case 'r' :
      case 'R' : return 0x50;
      case 'u' : return 0x1C;
      case 'U' : return 0x3E;
      case '|' : return 0x30;
      case '~' : return 0x01; // верхняя черта
      case '_' : return 0x08; // нижняя
      case '=' : return 0x09; // верхняя и нижняя
      case 'j' : return 0x21; // левый верхний угол (тут у меня фантазии не хватило -
      // на клавиатуре jkmn квадратом расположены)
      case 'k' : return 0x03; // правый верхний угол
      case 'm' : return 0x0C; // правый нижний угол
      case 'n' : return 0x18; // левый нижний угол
      default: return 0x00;
      }
      }
      void DISPinit(){
      digitalWrite(W1, HIGH); //Инициализация дисплея
      digitalWrite(W2, HIGH);
      digitalWrite(W1, LOW);
      digitalWrite(W2, LOW);
      shiftOut(DATA, CLK, MSBFIRST, B00000000);
      shiftOut(DATA, CLK, MSBFIRST, B00000000);
      shiftOut(DATA, CLK, MSBFIRST, B00000000);
      shiftOut(DATA, CLK, MSBFIRST, B00000000);
      shiftOut(DATA, CLK, MSBFIRST, B00000111);
      digitalWrite(W1, HIGH);
      digitalWrite(W2, HIGH);
      digitalWrite(W2, LOW);
      shiftOut(DATA, CLK, MSBFIRST, B00000000);
      shiftOut(DATA, CLK, MSBFIRST, B00000000);
      shiftOut(DATA, CLK, MSBFIRST, 0);
      shiftOut(DATA, CLK, MSBFIRST, 0);
      shiftOut(DATA, CLK, MSBFIRST, B00001000);
      digitalWrite(W2, HIGH);
      }
      void DISP(){
      digitalWrite(W1, HIGH); //Отображение информации
      digitalWrite(W2, HIGH);
      digitalWrite(W1, LOW);
      shiftOut(DATA, CLK, MSBFIRST, int2char(opc1));
      shiftOut(DATA, CLK, MSBFIRST, int2char(opc2));
      shiftOut(DATA, CLK, MSBFIRST, int2char(opc3));
      shiftOut(DATA, CLK, MSBFIRST, int2char(opc4));
      shiftOut(DATA, CLK, MSBFIRST, Badres1);
      digitalWrite(W1, HIGH);
      digitalWrite(W2, HIGH);
      digitalWrite(W2, LOW);
      shiftOut(DATA, CLK, MSBFIRST, int2char(opc5));
      shiftOut(DATA, CLK, MSBFIRST, int2char(opc6));
      shiftOut(DATA, CLK, MSBFIRST, int2char(opc7));
      shiftOut(DATA, CLK, MSBFIRST, int2char(opc8));
      shiftOut(DATA, CLK, MSBFIRST, Badres2);
      digitalWrite(W2, HIGH);
      }
      void DISPotkr(){ //Открытие на дисплей
      digitalWrite(W1, LOW);
      shiftOut(DATA, CLK, MSBFIRST, char2byte('O'));
      shiftOut(DATA, CLK, MSBFIRST, char2byte('|')+char2byte('`'));
      shiftOut(DATA, CLK, MSBFIRST, char2byte('k'));
      shiftOut(DATA, CLK, MSBFIRST, char2byte('P'));
      shiftOut(DATA, CLK, MSBFIRST, B00000111);
      digitalWrite(W1, HIGH);
      digitalWrite(W2, HIGH);
      digitalWrite(W2, LOW);
      shiftOut(DATA, CLK, MSBFIRST, char2byte('|'));
      shiftOut(DATA, CLK, MSBFIRST, char2byte('U'));
      shiftOut(DATA, CLK, MSBFIRST, char2byte('A'));
      shiftOut(DATA, CLK, MSBFIRST, char2byte('Y'));
      shiftOut(DATA, CLK, MSBFIRST, B00001000);
      digitalWrite(W2, HIGH);
      }
      void setup() {
      Serial.begin(9600);
      // Badres1 = B00000111;
      // Badres2 = B00001000;
      adres = 0; // режим
      opc1 = 0;
      opc2 = 0;
      opc3 = 0;
      opc4 = 0;
      opc5 = 0;
      opc6 = 0;
      opc7 = 0;
      opc8 = 0;
      READbait();
      pinMode(CLK, OUTPUT);
      pinMode(DATA, OUTPUT);
      pinMode(W1, OUTPUT);
      pinMode(W2, OUTPUT); // обозначили выходы
      // DISPinit(); // Инициализация дисплея
      }
      void loop() {
      int key = get_key(A0);
      switch(key)
      {
      case 2 : {c = (EEPROM.read(adres))-1; adres = constrain(adres,0,8); c = constrain(c,0,9); EEPROM.write(adres, c);} break;
      case 3 : {c = (EEPROM.read(adres))+1; adres = constrain(adres,0,8); c = constrain(c,0,9); EEPROM.write(adres, c);} break;
      case 4 : adres --; break;
      case 5 : adres ++; break;
      }
      adres = constrain(adres,0,8);
      switch (adres)
      {
      case 2 : {Badres1 = B10000110; Badres2 = B00001000;} break;
      case 3 : {Badres1 = B01000110; Badres2 = B00001000;} break;
      case 4 : {Badres1 = B00100110; Badres2 = B00001000;} break;
      case 5 : {Badres1 = B00010110; Badres2 = B00001000;} break;
      case 6 : {Badres1 = B00000110; Badres2 = B10001000;} break;
      case 7 : {Badres1 = B00000110; Badres2 = B01001000;} break;
      case 8 : {Badres1 = B00000110; Badres2 = B00101000;} break;
      case 1 : {Badres1 = B00000110; Badres2 = B00011000;} break;
      case 0 : {Badres1 = B00000110; Badres2 = B00001000;} break;
      }
      Serial.println(opc1);
      READbait();
      // DISP();
      delay(500);
      DISPinit();
      DISP();

    • @engineerTomsk
      @engineerTomsk  6 лет назад

      Убери от туда лишнее сам про байты и кнопки. Лень было копаться в этом.