Как написать во вторую строку дисплея?
Я получил этот 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);
Общее время и контроль верны, так как я могу получить текст на дисплее, а также такая функция, как "сдвиг", работает нормально.
2 ответа
- Строка 1 начинается с адреса 0x00 | 0x80
0b10000000
и заканчивается на 0x13 | 0x800b10010011
- Строка 2 начинается с адреса 0x40 | 0x80
0b11000000
и заканчивается на 0x53 | 0x800b11010011
- Строка 3 начинается с адреса 0x14 | 0x80
0b10010100
и заканчивается на 0x27 | 0x800b10100111
- Строка 4 начинается с адреса 0x54 | 0x80
0b11010100
и заканчивается на 0x67 | 0x800b11100111
Этот 0x80 0b10000000
является командой HD44780 для установки адреса DDRAM. Остальные биты 0b1xxxxxx
определяют адрес.
Вы найдете более подробную информацию на Arduino с символьными ЖК-дисплеями на основе HD44780
ДА. Вот что я сказал., @Bart Friederichs
Вам необходимо настроить 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 строк.
- Как отображать переменные на 0,96-дюймовом OLED-дисплее с библиотекой u8glib?
- Как отобразить символ º на ЖК-дисплее?
- Путаница между SPI и I2C для SSD1306 OLED
- Потенциометр 10 кОм против резистора 10 кОм на ЖК-дисплее
- Не могу заставить 4 значный 7 сегментный дисплей показывать разные значения
- Сделать CS (chip select) для работаты в SPI (для и SD карты и OLED)
- Запуск 7-контактного OLED-дисплея с 4 контактами (I2C)
- Как отобразить переменные с плавающей запятой на OLED-дисплее (0,96 дюйма)
Вы не используете стандартную библиотеку LiquidCrystal.h?, @Majenko
@Majenko нет, еще нет. Если я не смогу заставить это работать сам, я попробую и посмотрю, может ли это сработать. Я посмотрел на исходный код "LiquidCrystal" и не увидел ничего, что я мог бы использовать., @Bart Friederichs
Лично я бы *начал* с известной рабочей, хорошо протестированной и правильно поддерживаемой библиотеки LiquidCrystal.h, а затем сократил бы ее до нужного мне кода (если бы размер кода был проблемой). Как бы то ни было, мы действительно не можем вам помочь, так как не знаем вашего кода или настройки., @Majenko