===== Эксперимент 30. Пользовательские символы LCD ===== Иногда на дисплее требуется отобразить символы, которых нет в стандартном знакогенераторе. Для таких случаев дисплей поддерживает функцию пользовательских символов. В дисплей встроена память для размещения 8 пользовательских символов. Сначала пользователь записывает в дисплей информацию о дополнительных символах, а потом может использовать их для отображения. Попробуем создать пару своих символов. Вот таких: {{ :products:esp-iot:s.png?nolink |}} Смайлик и буква Ж. На символе смайлика мы подписали цифры 0 и 1. 0 соответствует выключеному пикселю, а 1 - включенному. Теперь, когда мы знаем какими должны быть наши символы, мы можем запрограммировать их и отобразить. ==== Схема эксперимента ==== {{ :products:esp-iot:13-0_mont.png?direct&600 |}} //Рисунок 1. Монтажная схема эксперимента// ==== Программный код эксперимента ==== from machine import I2C, Pin from esp8266_i2c_lcd import I2cLcd _init() DEFAULT_I2C_ADDR = 0x3F # Или 0x27 в зависимости от модели микросхемы на плате i2c = I2C(scl=Pin(5), sda=Pin(4), freq=400000) lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 2, 16) lcd.backlight_on() char1 = [ 0b00000, 0b00000, 0b01010, 0b01010, 0b00000, 0b10001, 0b01110, 0b00000 ] char2 = [ 0b10101, 0b10101, 0b10101, 0b01110, 0b10101, 0b10101, 0b10101, 0b00000 ] lcd.custom_char(0, char1) lcd.custom_char(1, char2) lcd.move_to(0,0) lcd.putchar(chr(0)) lcd.putchar(chr(1)) В программе мы как обычно подключили библиотеки, задали адрес контроллера дисплея на шине I2C, настроили контроллер I2C и дисплей, включили подсветку. После этого мы объявляем массив ''char1'': char1 = [ 0b00000, 0b00000, 0b01010, 0b01010, 0b00000, 0b10001, 0b01110, 0b00000 ] Массив состоит из чисел, записанных в двоичной системе счисления. В этой форме очень удобно записывать, ведь единице соответствует включенный пиксель на данном месте, нулю — выключенный. В массиве 8 чисел — по одному на строку. Чтобы интерпретатор Python понял, что числа записаны в двоичной системе счисления они начинаются со специальных символов ''0b''. Можно было бы записать эти данные и в обычной десятичной системе, но только это не было бы наглядно. Например 0b10001 это десятичное число 17. Таким же образом мы создаем второй символ. Теперь, когда символы созданы, их нужно записать в память дисплея. lcd.custom_char(0, char1) lcd.custom_char(1, char2) Символ из переменной ''char1'' записываем в память дисплея по адресу 0, а символ ''char2'' по адресу 1. Ставим курсор в левый верхний угол, на место первого символа. Это нулевое место нулевой строки так как нумерация мест и строк ведется от нуля: lcd.move_to(0,0) Печатаем на дисплее символы. Они выводятся туда, куда мы поставили курсор: lcd.putchar(chr(0)) lcd.putchar(chr(1)) Первый символ появился на первой строке в первом знакоместе, а второй на втором знакоместе благодаря тому, что курсор автоматически переместился на второе знакоместа после печати первого символа. ==== Дополнительное задание ==== * Создай свой символ, например, подмигивающий или грустный смайлик * Отобрази его на второй строке по середине