Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:laboratory_iot:exp30 [2020/05/20 17:50] – [Эксперимент 30. Пользовательские символы LCD] labuser29products:laboratory_iot:exp30 [2024/11/14 17:45] (текущий) – [Программный код эксперимента] labuser29
Строка 7: Строка 7:
 Смайлик и буква Ж. На символе смайлика мы подписали цифры 0 и 1. 0 соответствует выключеному пикселю, а 1 - включенному. Теперь, когда мы знаем какими должны быть наши символы, мы можем запрограммировать их и отобразить. Смайлик и буква Ж. На символе смайлика мы подписали цифры 0 и 1. 0 соответствует выключеному пикселю, а 1 - включенному. Теперь, когда мы знаем какими должны быть наши символы, мы можем запрограммировать их и отобразить.
 ==== Схема эксперимента ==== ==== Схема эксперимента ====
-{{ :products:esp-iot:exp13_mont.png?direct&600 |}}+{{ :products:esp-iot:13-0_mont.png?direct&600 |}}
 //Рисунок 1. Монтажная схема эксперимента// //Рисунок 1. Монтажная схема эксперимента//
  
 ==== Программный код эксперимента ==== ==== Программный код эксперимента ====
 <file python Exp30.py[enable_line_numbers="2", start_line_numbers_at="1"]> <file python Exp30.py[enable_line_numbers="2", start_line_numbers_at="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))
 </file> </file>
 +
 +В программе мы как обычно подключили библиотеки, задали адрес контроллера дисплея на шине I2C, настроили контроллер I2C и дисплей, включили подсветку. После этого мы объявляем массив ''char1'':
 +
 +<code python[enable_line_numbers="2", start_line_numbers_at="11"]>
 +char1 = [
 +0b00000,
 +0b00000,
 +0b01010,
 +0b01010,
 +0b00000,
 +0b10001,
 +0b01110,
 +0b00000
 +]
 +</code>
 +
 +Массив состоит из чисел, записанных в двоичной системе счисления. В этой форме очень удобно записывать, ведь единице соответствует включенный пиксель на данном месте, нулю — выключенный. В массиве 8 чисел — по одному на строку. Чтобы интерпретатор Python понял, что числа записаны в двоичной системе счисления они начинаются со специальных символов ''0b''. Можно было бы записать эти данные и в обычной десятичной системе, но только это не было бы наглядно. Например 0b10001 это десятичное число 17.
 +
 +Таким же образом мы создаем второй символ. Теперь, когда символы созданы, их нужно записать в память дисплея. 
 +<code python[enable_line_numbers="2", start_line_numbers_at="33"]>
 +lcd.custom_char(0, char1)
 +lcd.custom_char(1, char2)
 +</code>
 +
 +Символ из переменной ''char1'' записываем в память дисплея по адресу 0, а символ ''char2'' по адресу 1.
 +
 +Ставим курсор в левый верхний угол, на место первого символа. Это нулевое место нулевой строки так как нумерация мест и строк ведется от нуля:
 +<code python[enable_line_numbers="2", start_line_numbers_at="36"]>
 +lcd.move_to(0,0)
 +</code>
 +
 +Печатаем на дисплее символы. Они выводятся туда, куда мы поставили курсор:
 +<code python[enable_line_numbers="2", start_line_numbers_at="38"]>
 +lcd.putchar(chr(0))
 +lcd.putchar(chr(1))
 +</code>
 +
 +Первый символ появился на первой строке в первом знакоместе, а второй на втором знакоместе благодаря тому, что курсор автоматически переместился на второе знакоместа после печати первого символа. 
 +
 +==== Дополнительное задание ====
 +<WRAP center round tip 60%>
 +  * Создай свой символ, например, подмигивающий или грустный смайлик
 +  * Отобрази его на второй строке по середине
 +</WRAP>