Кто-нибудь модифицировал ЖК-экран 16x2 для работы с Arduino DUE?

Поскольку DUE работает от напряжения 3,3 В, кто-нибудь успешно модифицировал ЖК-экран 16x2 на 5 В для работы с Arduino DUE? Я думаю, что 3,3 В будет рассматриваться как логическая «1». экраном ЖК-дисплея 5 В, и нет выходов 5 В, которые возвращают напряжение 3,3 В, поскольку линия R/~W на ЖК-дисплее просто заземлена.

Хотелось бы услышать чьё-либо мнение по этому поводу.

Спасибо, Чарли

, 👍3

Обсуждение

Линия чтения/записи оборвана или всегда заземлена? Во время запуска контакты плавают, что ЖК-дисплей может интерпретировать как ВЫСОКИЙ, выдавая 5 В на контакты данных. На всякий случай вы можете добавить к этому выводу внешний понижающий резистор. В остальном вы совершенно правы. Без проблем., @Gerben


1 ответ


3

Я понимаю, что это тема для восьмилетних пользователей, однако мой ответ может кому-то помочь. Я подключил немодифицированный ЖК-экран без какой-либо марки к Arduino DUE, и он работает отлично — единственное, что мне пришлось изменить, — это аналоговые пороги для идентификации кнопок. Просто загрузите скетч и считайте реальные значения на дисплее, а затем введите средние значения между соседними кнопками в функции read_LCD_buttons.

//Пример с использованием библиотеки LiquidCrystal
#include <LiquidCrystal.h>

/*******************************************************

This program will test the LCD panel and the buttons
Mark Bramwell, July 2010

********************************************************/

// выбираем контакты, используемые на ЖК-панели
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// определяем некоторые значения, используемые панелью и кнопками
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5

// читаем кнопки
int read_LCD_buttons()
{
adc_key_in = analogRead(0); // считываем значение с датчика

if (adc_key_in < 90) return btnRIGHT;
if (adc_key_in < 297) return btnUP;
if (adc_key_in < 533) return btnDOWN;
if (adc_key_in < 814) return btnLEFT;
if (adc_key_in < 1000) return btnSELECT;

return btnNONE; // когда все остальные терпят неудачу, возвращаем это...
}

int button_count=1;

// На большинстве плат Arduino к контакту 13 подключен светодиод.
// даем ему имя:
int led = 13;

int i;

void setup()
{
lcd.begin(16, 2); // запускаем библиотеку
lcd.setCursor(0,0);
lcd.print("Push the buttons"); // печатаем простое сообщение

// инициализируем цифровой вывод как выход.
pinMode(led, OUTPUT);

}

void loop()
{
  delay(100);
  lcd.setCursor(9,1); // перемещаем курсор на вторую строку "1" и 9 пробелов больше
  lcd.print("        ");
  lcd.setCursor(9,1); // перемещаем курсор на вторую строку "1" и 9 пробелов больше
  lcd.print(analogRead(0)); // отображаем аналоговый вход A0 для калибровки значений

  lcd.setCursor(0,1); // переходим в начало второй строки
  lcd_key = read_LCD_buttons(); // читаем кнопки

  switch (lcd_key) // в зависимости от того, какая кнопка была нажата, выполняем действие
  {
    case btnRIGHT:
        lcd.print("RIGHT ");
        button_count = 2;
        break;

    case btnLEFT:
        lcd.print("LEFT ");
        button_count = 3;
        break;

    case btnUP:
        lcd.print("UP ");
        button_count = 4;
        break;

    case btnDOWN:
        lcd.print("DOWN ");
        button_count = 5;
        break;

    case btnSELECT:
        lcd.print("SELECT");
        button_count = 6;
        break;

    case btnNONE:
        lcd.print("NONE ");
        button_count = 1;
        break;
  }


}
,