Эксперимент 30. Пользовательские символы LCD

Иногда на дисплее требуется отобразить символы, которых нет в стандартном знакогенераторе. Для таких случаев дисплей поддерживает функцию пользовательских символов. В дисплей встроена память для размещения 8 пользовательских символов. Сначала пользователь записывает в дисплей информацию о дополнительных символах, а потом может использовать их для отображения. Попробуем создать пару своих символов. Вот таких:

Смайлик и буква Ж. На символе смайлика мы подписали цифры 0 и 1. 0 соответствует выключеному пикселю, а 1 - включенному. Теперь, когда мы знаем какими должны быть наши символы, мы можем запрограммировать их и отобразить.

Схема эксперимента

Рисунок 1. Монтажная схема эксперимента

Программный код эксперимента

Exp30.py
  1. from machine import I2C, Pin
  2. from esp8266_i2c_lcd import I2cLcd
  3. _init()
  4.  
  5. DEFAULT_I2C_ADDR = 0x3F
  6.  
  7. i2c = I2C(scl=Pin(5), sda=Pin(4), freq=400000)
  8. lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 2, 16)
  9. lcd.backlight_on()
  10.  
  11. char1 = [
  12. 0b00000,
  13. 0b00000,
  14. 0b01010,
  15. 0b01010,
  16. 0b00000,
  17. 0b10001,
  18. 0b01110,
  19. 0b00000
  20. ]
  21.  
  22. char2 = [
  23. 0b10101,
  24. 0b10101,
  25. 0b10101,
  26. 0b01110,
  27. 0b10101,
  28. 0b10101,
  29. 0b10101,
  30. 0b00000
  31. ]
  32.  
  33. lcd.custom_char(0, char1)
  34. lcd.custom_char(1, char2)
  35.  
  36. lcd.move_to(0,0)
  37.  
  38. lcd.putchar(chr(0))
  39. lcd.putchar(chr(1))

В программе мы как обычно подключили библиотеки, задали адрес контроллера дисплея на шине I2C, настроили контроллер I2C и дисплей, включили подсветку. После этого мы объявляем массив char1:

  1. char1 = [
  2. 0b00000,
  3. 0b00000,
  4. 0b01010,
  5. 0b01010,
  6. 0b00000,
  7. 0b10001,
  8. 0b01110,
  9. 0b00000
  10. ]

Массив состоит из чисел, записанных в двоичной системе счисления. В этой форме очень удобно записывать, ведь единице соответствует включенный пиксель на данном месте, нулю — выключенный. В массиве 8 чисел — по одному на строку. Чтобы интерпретатор Python понял, что числа записаны в двоичной системе счисления они начинаются со специальных символов 0b. Можно было бы записать эти данные и в обычной десятичной системе, но только это не было бы наглядно. Например 0b10001 это десятичное число 17.

Таким же образом мы создаем второй символ. Теперь, когда символы созданы, их нужно записать в память дисплея.

  1. lcd.custom_char(0, char1)
  2. lcd.custom_char(1, char2)

Символ из переменной char1 записываем в память дисплея по адресу 0, а символ char2 по адресу 1.

Ставим курсор в левый верхний угол, на место первого символа. Это нулевое место нулевой строки так как нумерация мест и строк ведется от нуля:

  1. lcd.move_to(0,0)

Печатаем на дисплее символы. Они выводятся туда, куда мы поставили курсор:

  1. lcd.putchar(chr(0))
  2. lcd.putchar(chr(1))

Первый символ появился на первой строке в первом знакоместе, а второй на втором знакоместе благодаря тому, что курсор автоматически переместился на второе знакоместа после печати первого символа.

Дополнительное задание

  • Создай свой символ, например, подмигивающий или грустный смайлик
  • Отобрази его на второй строке по середине