Как отобразить символ º на ЖК-дисплее?
У меня есть ЖК-дисплей 16x2, и я хочу отображать температуру: 23 ºC.
Но символ º отображается неправильно. Вместо символа º отображается странный символ.
@Roby Sottini, 👍13
4 ответа
Лучший ответ:
Это зависит от конкретной модели ЖК-дисплея, который вы используете. Или, точнее, на контроллере/драйвере жидкокристаллического дисплея с точечной матрицей, таком как Hitachi HD44780U, который используется во многих ЖК-дисплеях 16x2.
Для этого драйвера у вас есть таблица собственных символов, например:
В этой таблице символ "°" находится в столбце 0b1101, строка 1111 (0xDF или 223). Но вы должны привести это значение к символу перед отображением, иначе вы получите значение (223), а не символ.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2); // установить адрес ЖК-дисплея на 0x27 для 16-символьного и 2-строчного дисплея
void setup()
{
lcd.init(); // инициализируем ЖК-дисплей
lcd.backlight();
lcd.print("temp 27");
lcd.print((char) 223);
lcd.print(" ");
lcd.print(223);
}
void loop()
{
}
Легко.
Откройте лист данных и выберите символ, который больше всего похож на ваш символ. Char 0b11011111 выглядит лучше всего, но 0b10110000 неплохой.
Пока вы находитесь в таблице данных, проверьте CGRAM.
Некоторые дисплеи имеют другие символы выше 128. Лучше всего создать свой собственный символ.
Это то, что @dannyf упоминает в слове "CGRAM". Пользовательские символы хранятся в CGRAM. Однако нет необходимости читать техническое описание, потому что для этого есть функция в библиотеке Arduino LiquidCrystal.
Начните здесь: справочник по Arduino CreateChar
Существуют даже веб-сайты, которые помогут вам создать символ: omerk и maxpromer.
- Потенциометр 10 кОм против резистора 10 кОм на ЖК-дисплее
- Как заставить ЖК-дисплей отображать китайские и японские иероглифы?
- Wemos: дисплей 16x2 ничего не показывает
- Запись значения на 7-сегментный дисплей max7219
- Адресация HD44780 DDRAM по второй линии
- Чтение текста с SD-карты возвращает странные символы
- Как подключить этот последовательный дисплей SPI к Arduino?
- Serial.print печатает, а lcd.print - нет.
lcd.print()
действительно требует приведения, но вы также можете использоватьlcd.write(0xdf)
. В отличие отprint()
, который в основном предназначен для форматирования данных как ASCII, методwrite()
предназначен для отправки необработанных байтов., @Edgar BonetКак я могу объединить lcd.print("temp 27") и lcd.print((char) 223)? Примерно так: lcd.print("temp 27" + (char) 223), @Roby Sottini
Вы также можете просто сделать
lcd.print("temp 27" "\xDF" "C")
, чтобы показатьtemp 27°C
за один вызов., @gre_gor