Как написать во вторую строку дисплея?

Я получил этот 4-строчный дисплей от Mouser: https://www.gravitech.us/20chbllcd.html, и я получаю его, чтобы работать нормально для линий 1 и 3 (так как линия 3-это только 21-й символ линии 1). Но я изо всех сил стараюсь заставить работать строки 2 и 4. Если я правильно понимаю, это "строка 2" для контроллера HD44780, и я должен установить адрес DDRAM на 0x40, прежде чем писать туда.

Но когда я пытаюсь это сделать, ничего не получается.

Я попытался записать 0x04 в счетчик адресов DDRAM и вижу, как там прыгает курсор, но когда я пишу на этот адрес, никакого текста не появляется. Если я опущу команду, текст появится правильно.

Кроме того, при изменении контрастности дисплея (с помощью потенциометра на выводах Vdd и Vo) только линии 1 и 3 изменяют контрастность.

Мой код:

Этот метод я использую для удобства:

void set(int _rs, int _rw, int _d7, int _d6, int _d5, int _d4, int _d3, int _d2, int _d1, int _d0) { ... }

Чтобы установить адрес DDRAM равным 0x40, выполните следующие действия.

set(0,0,1,1,0,0,0,0,0,0);

Общее время и контроль верны, так как я могу получить текст на дисплее, а также такая функция, как "сдвиг", работает нормально.

, 👍1

Обсуждение

Вы не используете стандартную библиотеку LiquidCrystal.h?, @Majenko

@Majenko нет, еще нет. Если я не смогу заставить это работать сам, я попробую и посмотрю, может ли это сработать. Я посмотрел на исходный код "LiquidCrystal" и не увидел ничего, что я мог бы использовать., @Bart Friederichs

Лично я бы *начал* с известной рабочей, хорошо протестированной и правильно поддерживаемой библиотеки LiquidCrystal.h, а затем сократил бы ее до нужного мне кода (если бы размер кода был проблемой). Как бы то ни было, мы действительно не можем вам помочь, так как не знаем вашего кода или настройки., @Majenko


2 ответа


1
  • Строка 1 начинается с адреса 0x00 | 0x80 0b10000000 и заканчивается на 0x13 | 0x80 0b10010011
  • Строка 2 начинается с адреса 0x40 | 0x80 0b11000000 и заканчивается на 0x53 | 0x80 0b11010011
  • Строка 3 начинается с адреса 0x14 | 0x80 0b10010100 и заканчивается на 0x27 | 0x80 0b10100111
  • Строка 4 начинается с адреса 0x54 | 0x80 0b11010100 и заканчивается на 0x67 | 0x80 0b11100111

Этот 0x80 0b10000000 является командой HD44780 для установки адреса DDRAM. Остальные биты 0b1xxxxxx определяют адрес.

20x4 HD44780 addressing

Вы найдете более подробную информацию на Arduino с символьными ЖК-дисплеями на основе HD44780

,

ДА. Вот что я сказал., @Bart Friederichs


0

Вам необходимо настроить HD44780 в 2-линейном режиме. Команда такова| 0 | 0 | 1 | DL | N | F | X | X | с:

  • DL: 0 = 4-разрядный / 1 = 8-разрядный интерфейс
  • N: 0 = 1 строка / 1 = 2 строки (это бит для установки)
  • F: 0 = 5x7 / 1 = размер шрифта 5x10

Скорее всего, у вас уже есть эта команда в вашей программе для установки ширины интерфейса, но с N = 0.

Примечание: Общий алгоритм состоит в том, чтобы отправить команду 0x33 три раза, чтобы убедиться, что она находится в 8-разрядном режиме. Первая может быть второй частью наполовину выполненной 4-битной команды, возможно, без изменения ширины интерфейса. Затем второй и третий переключатся в 8-битный режим. Если устройство уже находится в 8-битном режиме или попадает в него по ходу, повторять не вредно.

Поскольку в 4-разрядном режиме используются только D7-D4, вы можете изменить 0x33 на 0x38, чтобы включить режим 2 строк.

,