LCD от кассовых аппаратов ЭКР и МИНИКА на микросхеме КР1820(analog COP472-3) + Arduino
HTML-код
- Опубликовано: 2 окт 2024
- Результат подключения, варианты дисплеев.
Логическое "не" я срезал и замкнул соответствующие контакты, т.к., судя по всему, он и тактирующий импульс инвертировал, что очень мешало.
Аналогичный проект на MSP430:
geektimes.ru/p...
По причине того, что описание уже написал другой автор я его подробно описывать не буду.
Ещё про ИЖЦ ЭКР
ruclips.net/video/_zjPn4fclbQ/видео.html
ruclips.net/video/OKxM_Um8YhQ/видео.html
А библиотека для ардуины есть?
Нет, для данного конкретного LCD библиотек нет.
День добрый, подскажите, как с Вами можно связаться? Есть вопросы по поводу подключения аналогичного дисплея.
Буду очень благодарен!
Добрый! Пишите вопрос - помогу чем смогу.
Я написал скетч для Ардуино по образу и подобию статьи с Гиктаймс, но дисплей ничего толкового не отображает, вместо этого в произвольном порядке загораются разные сегменты. Есть подозрение, что дисплей (или плата) повреждены, хотя и выглядят целыми.
Хотелось бы проверить на заведомо рабочей программе, чтобы исключить ошибку в программной части. Если есть возможность, не могли бы Вы выложить на файлообменник свой скетч?
Спасибо!
Отдельно не нашёл, постараюсь вычленить из проекта. Если плата такая же, обязательно нужно убрать логическое "НЕ", отсоединив питалово от микросхеме и соединив входа с выходом по даташиту.
#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();
Убери от туда лишнее сам про байты и кнопки. Лень было копаться в этом.