Игровая консоль на stm32 и lcd nokia 5110

Alex_EXE

В своё время уже писал, как применял этот замечательный дисплей с PIC микроконтроллерами . Сейчас попробуем его подключить к STM32.

Применение дисплея nokia1100 с stm32

На самом деле портировать код со своего раннего проекта и оформить его в библиотеку сложности не составило.

Во время проверки схему тоже не изменял – взял свой старый готовый модуль из того же проекта, где подключал его к pic16f628a с гасящими резисторами на 5В логических линях контроллера, и подключил его к установленному на STM32vlDiscovery контроллеру STM32F100RB. Но по уму для STM с питанием и логическим уровнем в 3,3В подключение будет выглядеть следующим образом:

Схема разводки дисплея

Для упрощения подсветку убрал.

Распиновка дисплея

Схема подключения дисплея к контроллеру

Возможности библиотеки:
lcd1100_clear() – очистка дисплея
lcd1100_gotoxy(x, y) – установка курсора
Где: x, y – координаты курсора
lcd1100_putch(c) – вывод символа
lcd1100_putch_inv(c) – вывод инвертированного символа
c — символ в ASCII кодировке
lcd1100_puts(*s) – вывод строки
lcd1100_puts_inv(*s) – вывод инвертированной строки
*s – ссылка на строку (массив из символов)
lcd1100_test() – тестовое заполнение всего дисплея символами из ASCII таблицы
lcd1100_putch_big(col, row, c) – вывод большого символа
col – ширина символа, row – высота символа, c – символ в ASCII
lcd1100_puts_big(col, row, *s) – вывод строки из больших символов
col – ширина символа, row – высота символа, *s – ссылка на строку
Последние две функции, используя те-же ASCII символы 5х8, выводя их в 2, 4 и 8 раз больше (заложено увеличение кратное только 2x).

Таблица ASCII, или шрифт, был вручную прорисован с помощью программы – символьный генератор .

Для работы библиотеки в начале файла lcd-nokia1100.h нужно задать настройки порта и выводов для работы с дисплеем. Для приведенного примера с подключением линий SCLK к PB12, SDA к PB13, CS к PB14 и RES к PB15 инициализация будет выглядеть следующим образом:

// Конфигурация порта // используемый порт #define lcd1100_port GPIOB // используемые выводы #define lcd1100_pin_SCLK GPIO_Pin_12 #define lcd1100_pin_SDA GPIO_Pin_13 #define lcd1100_pin_CS GPIO_Pin_14 #define lcd1100_pin_RST GPIO_Pin_15 // тактирование порта #define lcd1100_RCC RCC_APB2Periph_GPIOB

Настройка рассчитана на управление подключаемым дисплеем с одного порта контроллера.

Код примера работы с дисплеем:

lcd1100_pin_init(); // инициализация выводов дисплея lcd1100_init(); // инициализация дисплея lcd1100_puts_big(2,2,”LCD”); lcd1100_gotoxy(7,0); lcd1100_puts(“Nokia1100”); lcd1100_gotoxy(10,1); lcd1100_puts(“+STM32”); lcd1100_gotoxy(2,3); lcd1100_puts(“96×65 точек”); lcd1100_gotoxy(3,4); lcd1100_puts(“8×16 символов”); lcd1100_gotoxy(2,5); lcd1100_puts(“35×35 мм”); lcd1100_gotoxy(5,7); lcd1100_puts(“alex-exe.ru”); while(1){}

Изменив настройки конфигурации, функцию инициализации и возможно подправив задержку, данную библиотеку можно будет применить для любого микроконтроллера.

Скачать библиотеку

Скачать файлы проекта

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

Alex_EXE | 11.09.2013 | STM32 |

Источник: https://alex-exe.ru/radio/stm32/lcd-nokia1100-stm32/

Ардуино: графический ЖК дисплей Nokia 5110

Символьный дисплей, который мы уже изучили ранее, открыл перед нами большие возможности в плане вывода информации в «человеческом» виде. Можно выводить текстовые сообщения, значения различных параметров, показания датчиков. Если.

захотеть, можно даже отобразить на символьном дисплее «псевдографику».

Но что, если нам требуется ещё больший уровень информативности? Если для понимания процесса нам нужен, например, график? Что, если мы хотим отобразить состояние робота не сигналом светодиода, а картинкой? Изобразить эмоцию?

Поможет нам в этом деле графический дисплей, а именно Nokia 5110 (или 3310). Этот вид дисплеев широко распространен в мире учебных микроэлектронных платформ, таких как Ардуино. Он легко подключается, и легко управляется даже слабыми микроконтроллерами.

1. Подключение дисплея Nokia 5110

Дисплей монохромный, имеет разрешение 84×48 точек. Как правило, дисплеи Nokia 5110, предназначенные для таких как мы с вами энтузиастов, поставляются на плате в паре с контроллером PCD8544 и штыревым разъемом. У такого дисплейного модуля есть всего 8 ног:

  • RST — сброс (Reset);
  • CE — выбор устройства (Chip Select);
  • DC — выбор режима (Data/Command select);
  • DIn — данные (Data In);
  • Clk — тактирующий сигнал (Clock);
  • Vcc — питание 3 — 5 Вольт;
  • BL — подсветка;
  • Gnd — земля.

Схема подключения к Ардуино:

ЖК дисплей Nokia 5110 RST CE DC DIn Clk Vcc BL Gnd
Ардуино Уно 7 6 5 4 3 +5V +5V GND

2. Программа. Вывод текста

Для управления дисплеем нам потребуется библиотека «Adafruit_GFX_Library», которую можно скачать с официального сайта Adafruit:

https://github.com/adafruit/Adafruit-GFX-Library/archive/master.zip

Устанавливаем библиотеку в Arduino IDE, и пробуем вывести на наш дисплей простой текст «Hello world!»:

#include #include Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7); void setup() { // инициализация и очистка дисплея display.begin(); display.clearDisplay(); display.display(); display.setContrast(50); // установка контраста delay(1000); display.setTextSize(1); // установка размера шрифта display.setTextColor(BLACK); // установка цвета текста display.setCursor(0,0); // установка позиции курсора display.println(“Hello, world!”); display.display(); } void loop() { }

Как видим, все достаточно просто. Функция setContrast — определяет контраст дисплея. Это сродни тому, как если бы мы крутим потенциометр контраста в схеме символьного дисплея. Если после запуска программы у нас на дисплее ничего не видно, или видно плохо — варьируем значение контраста.

Задаем размер шрифта функцией setTextSize. Если указываем 1, то каждая буква шрифта будет размером 5×7 пикселей. Размер 2 увеличит символы ровно в два раза по высоте и ширине.

Следующая полезная функция — setTextColor. У нас есть всего два цвета — черный и белый. Для них определены две константы: BLACK и WHITE.

Наконец, setCursor(x, y) устанавливает курсор в заданные координаты x и y, так же как в программе символьного дисплея.

Непосредственно, сам вывод текста осуществляется уже знакомой функцией println.

Если все сделать правильно, получим такую картинку:

3. Программа. Вывод геометрии

Успешно решив задачу с выводом текста, попробуем теперь поработать с примитивной графикой. Нарисуем треугольники, окружности и прочие фигуры.

За отрисовку окружности отвечает функция drawCircle. Пример вызова функции для окружности с центром в точке {20,20}, радиусом 5 пикселей и черным цветом:

drawCircle(20, 20, 5, BLACK);

Теперь попробуем прямоугольник с координатами верхнего левого угла {10,10}, нижнего правого {20,20}, и цветом BLACK (черный, то бишь).

drawRect(10, 10, 20, 20, BLACK);

Функция drawRoundRect — нарисует прямоугольник со скругленными углами. Также у этих двух функций есть варианты со сплошной заливкой внутренней части фигуры: fillRect и fillRoundRect.

У треугольника следует задать все три пары координат:

drawTriangle(10, 10, 20, 10, 20, 20, BLACK);

И у него тоже есть вариант с заливкой — fillTriangle.

Наконец, просто отрезок из точки {0,0} к точке {20,20}:

drawLine(0, 0, 20, 20, BLACK);

И самое простое, что можно нарисовать — один пиксель:

drawPixel(10, 10, BLACK);

А вот как будет выглядеть программа, если мы захотим нарисовать некоторые из этих фигур, по-очереди:

#include #include Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7); void setup() { // инициализация и очистка дисплея display.begin(); display.clearDisplay(); display.display(); display.setContrast(50); // установка контраста delay(1000); } void loop() { // пиксел display.clearDisplay(); display.drawPixel(10, 10, BLACK); display.display(); delay(1000); // линия display.clearDisplay(); display.drawLine(0, 0, 50, 30, BLACK); display.display(); delay(1000); // прямоугольник display.clearDisplay(); display.drawRect(0, 0, 10, 10, BLACK); display.display(); delay(1000); // прямоугольник залитый display.clearDisplay(); display.fillRect(0, 0, 10, 10, BLACK); display.display(); delay(1000); // треугольник display.clearDisplay(); display.drawTriangle(0, 0, 40, 40, 30, 20, BLACK); display.display(); delay(1000); // окружность в центре display.clearDisplay(); display.drawCircle(display.width()/2, display.height()/2, 10, BLACK); display.display(); delay(1000); }

5. Программа. Подготовка изображений

А теперь, воспользуемся всей мощью графического дисплея — выведем на него изображение!

Чтобы отобразить на дисплее картинку, нам потребуется привести её к нужному размеру и формату. Как уже упоминалось, дисплей Nokia 5110 имеет разрешение 84×48 точек. Значит и наша картинка должна быть точно таким же размером.

Уменьшить и обрезать картинку до требуемых размеров можно в самом простом редакторе mspaint. Там же нужно сохранить картинку в формате BMP с 256 цветами.

Следующий шаг — конвертировать bmp файл в массив нулей и единиц, который мы и вставим в программу для Arduino. Для конвертации воспользуемся онлайн сервисом на нашем сайте: http://git.robotclass.ru/tools/bmptobin.html

Просто выбираем подготовленный bmp файл на локальном компьютере, и указываем одну из систем счисления: двоичную или шестнадцатеричную. Обе одинаково подходят для нашей цели.

Результатом работы этого веб-сервиса станет огромный массив двоичных чисел, который мы должны будем вставить в следующую программу:

#include #include Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7); const unsigned char PROGMEM smileBmp[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x79, 0xc0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x71, 0xc0, 0x0, 0x1, 0xef, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x73, 0xc0, 0x0, 0x1, 0xc7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x73, 0xc0, 0x0, 0x1, 0xc7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x1, 0xef, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0x0, 0x0, 0x0, 0x78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x1, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, 0x0, 0x0, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xfc, 0x0, 0x7, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; void setup() { // инициализация и очистка дисплея display.begin(); display.clearDisplay(); display.display(); // установка контраста display.setContrast(50); delay(1000); // отрисовка изображения display.drawBitmap(0, 0, smileBmp, 84, 44, BLACK); display.display(); } void loop() { }

Читайте также:  Метеостанция на arduino с беспроводным датчиком температуры

Как видим, в этом примере картинка зашифрована шестнадцатеричными числами. Такая запись просто компактнее, чем двоичная. В результате работы такой программы мы увидим уже знакомый нам смайл.

Вот и все на сегодня! В следующем уроке на тему Nokia 5110 мы попробуем анимировать изображение на дисплее. Попробуем даже сделать небольшую игру!

Источник: http://robotclass.ru/tutorials/graphics-lcd-nokia-5110/

nokia 5110 LCD дисплей AVR

Теперь я расскажу как работать с дисплеем от Нокии 5110.

Матрица состоит из 48 × 84 пикселей. 48 строчек, 84 столбца.

Но питать микросхему отвечающую за работу дисплея нужно от 2.7 В до 3.3 В. Подсветка также питается от 3.3 В или можно от 5 В через резистор 1К.

Также советуют ставить резисторы 10К на все остальные выводы, если МК питается от 5 В. Можно работать и с 5 В, но могут быть проблемы с отображением и дисплей быстрее придёт в негодность.

Я заказывал с Ебея и в моём случае для того чтобы включить подсветку нужно было заземлить вывод LED.


Есть несколько вариантов расположения выводов:

Номер выводаОбозначениеФункцияПримечание1VCC2GND3SCE (CE)4RST5D/C (DC)6DN (DIN)7SCLK (CLK)8LED (LIGHT)
Питание
Земля
Выбор чипа можно просто заземлить
RESET активно при лог 0
выбор режима команды лог 0дата лог 1
Дата передаётся байт данных
Serial clock,линия синхронизации
Подсветка 3.3V

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

Когда на SCE лог 0, нужно определиться мы передаем данные D/C = 0 или
команду D/C = 1. На самом деле это считывается когда мы передаём последний бит данных, но нет разницы когда мы выберем работаем ли мы с данными или командами, главное чтобы при передаче последнего (0) бита стояло нужное нам значение.

Передача данных происходит следующим образом: Мы передаём байт данных по выводу DN, начиная с последнего 7 бита.

Нужно выставить этот бит и установить на SCLK лог 1, в этот момент начинает передаваться информация к контроллеру, затем нужно сбросить SCLK, выставить 6 бит на DN, снова выставить 1 на SCLK и продолжать так до тех пор пока не передадим целый байт.

Рис. 1. Передача 1 байта

После этого можно сразу передавать следующий байт, если произошла ошибка и вы передали не тот бит или просто нужно отменить команду последний бит которой ещё не отправлен, то для этого нужно подать лог 0 на RST. Команда не передастся и можно сразу начать передачу новой команды.

Рис. 2. Передача нескольких байт

Рис. 3. Отмена передачи

Не позже чем через 30 мс после подачи питания, необходимо подать отрицательный импульс на RESET длиной 100 нс, иначе можно испортить дисплей ! Таким образом происходит начальная инициализация дисплея.

В принципе ширина всех импульсов

Источник: http://4a4ik.blogspot.com/2014/07/nokia-5110-lcd.html

Мини отладка на STM32 + набор дополнительных модулей

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

В итоге решил упростить себе задачу и взять небольшой набор модулей и сделать свой гигрометр! Что из этого вышло можно поглядеть под катом.

Посылка пришла за обычные для меня 28 дней и содержала следующий набор:

Получил вот такой набор:

Мини отладка на базе STM32F103C8

ARM Cortex-M3 32-битный микроконтроллер Максимальная частота ядра: 72МГц Объем флешь памяти: 64КБ Объем SRAM: 20КБ Напряжение питания: 2.0-3.6В Периферия: UART, I2C, SPI, ADC, CAN, USB

Информационная страница: ССЫЛКА

Ссылка в магазине: ССЫЛКА, цена $7.11

Датчик температуры/влажности DHT22(AM2302)

Диапазон измеряемой температуры: -40 — 80С ( максимальная погрешность +-1С ) Диапазон измеряемой влажности: 0-99.9% ( погрешность при температуре +25C — +-2% ) Датчик идет уже с 3-мя проводами типа DuPont и минимально рекомендуемой обвязкой ( резистор подтяжки линии данных и конденсатор по питанию ).

Ссылка в магазине: ССЫЛКА, цена $6.57

Дисплей от NOKIA 5110

Популярный дисплей от NOKIA 5110. Расположен на плате с необходимой обвязкой и подсветкой ( синего цвета ). Разрешение дисплея: 84х48 пикселей Интерфейс: SPI Контроллер дисплея: PCD8544 Напряжение питания: 3-5В ( рекомендуется 3.3В )

Ссылка в магазине: ССЫЛКА, цена $3.66

Адаптер microSD карты

Разъем карты расположен на плате, модуль позволяет работать с microSD картой в режиме SPI.

Ссылка в магазине: ССЫЛКА, цена $1.97

Теперь мы можем соединить всё воедино

Собранное устройство

Таблица соединения модулей с платой микроконтроллера

Модуль microSD карты:
3V3 -> 3V3 CS -> PB12 ( SPI2_NSS ) MOSI -> PB15 ( SPI2_MOSI ) CLK -> PB13 ( SPI2_SCK ) MISO -> PB14 ( SPI2_MISO ) GND -> GND Модуль температуры/влажности + -> 3.

3V OUT -> PA1 – -> GND Модуль дисплея NOKIA5100 RST -> PA2 CE ->PA4 ( SPI1_NSS ) DC -> PA3 Din -> PA7 ( SPI1_MOSI ) Clk -> PA5 ( SPI1_SCK ) Vcc -> 3.3V BL -> 3.3V Gnd -> GND

Удобно, что не потребовался паяльник и модули соединяются обычными проводами DuPont.

Соответственно менять конфигурацию нашей сборки можно с легкостью. Питание платы ( а соответственно и подключенных модулей ) через разъем miniUSB. Программу можно написать используя среду разработки IAR ARM, Kickstart версия которой доступна абсолютно бесплатно.

Загрузить микропрограмму в сам чип можно двумя способами, через JTAG/SWD программатор либо через UART загрузчик встроенный в сам чип по средством какого нибудь uart ttl адаптера ( подробнее ТУТ ).

Накидал небольшую программку, которая считывает и отображает значение влажности/температуры один раз в секунду. Сохранение на SD карту в формате CSV происходит один раз в десять секунд.

Вот так выглядит отображение на дисплее:На дисплее отображаются актуальные данные: C — температура в градусах Цельсия F — температура по Фаренгейту H — влажность в %

Hi — индекс температуры ( humiture, heat index ) это значение температуры в градусах Цельсия как это воспринимает человек с учетом текущей влажности, подробнее на WIKI

График температуры/влажности за примерно 11 часов.( в комнате )

Читайте также:  Переключатель освещения. основной свет или ночник - одним выключателем

График 1

Изначально датчик был на подоконнике, а потом положил в комнату, поэтому вначале графика виден рост температуры и падения влажности.График снятый в ванне. Сразу видно, когда включается душ.

График 2

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

По просьбе romskiy добавил скриншот среды разработки IAR ARM.

Скриншот

Скачать исходные коды проекта можно тут: ССЫЛКА

п.с: набор был предоставлен бесплатно на обзор ^_^

Источник: https://mysku.me/blog/china-stores/29490.html

Как подключить LCD дисплей для Nokia 5110 к Arduino

Вам понадобится

  • – Arduino;
  • – ЖК дисплей для Nokia 5110/3310;
  • – соединительные провода.

Инструкция

Подключим ЖК экран от Nokia 5110 к Arduino по приведённой схеме.

Для работы с этим LCD экраном написано много библиотек. Предлагаю воспользоваться этой: http://www.rinkydinkelectronics.com/library.php?id=44 (скачивание файла LCD5110_Basic.zip).

Для установки разархивируем файл в директорию Arduino IDE/libraries/.Библиотека поддерживает следующие возможности.

LCD5110(SCK, MOSI, DC, RST, CS); – объявление ЖК экрана с указанием соответствия пинам Arduino;

InitLCD([contrast]); – инициализация дисплея 5110 с опциональным указанием контрастности (0-127), по умолчанию используется значение 70;
setContrast(contrast); – задаёт контрастность (0-127);
enableSleep(); – переводит экран в спящий режим;
disableSleep(); – выводит экран из спящего режима;
clrScr(); – очищает экран;
clrRow(row, [start], [end]); – очистка выбранной строки номер row, от позиции start до end;
invert(true); и invert(false); – включение и выключение инверсии содержимого LCD экрана;
print(string, x, y); – выводит строку символов с заданными координатами; вместо x-координаты можно использовать LEFT, CENTER и RIGHT; высота стандартного шрифта 8 точек, поэтому строки должны идти с интервалами через 8;
printNumI(num, x, y, [length], [filler]); – вывести целое число на экран на заданной позиции (x, y); length – желаемая длина числа; filler – символ для заполнения “пустот”, если число меньше желаемой длины; по умолчанию это пустой пробел ” “;
printNumF(num, dec, x, y, [divider], [length], [filler]); – вывести число с плавающей запятой; dec – число знаков после запятой; divider – знак десятичного разделителя, по умолчанию точка “.”;
setFont(name); – выбрать шрифт; встроенные шрифты называются SmallFont и TinyFont; вы можете определить свои шрифты в скетче;
invertText(true); и invertText(false); – инверсия текста вкл./выкл.;
drawBitmap(x, y, data, sx, sy); – вывести картинку на экран по координатам x и y; data – массив, содержащий картинку; sx и sy – ширина и высота рисунка.

Напишем такой скетч. Сначала подключаем библиотеку, затем объявляем экземпляр класса LCD5110 с назначением выводов.
В процедуре setup() инициализируем ЖК экран.
В процедуре loop() очищаем экран и пишем маленьким шрифтом произвольный текст, под ним – средним шрифтом выводим счётчик секунд.

Давайте выведем на экран картинку. Для этого подготовим монохромное изображение, которое хотим вывести на экран Nokia 5110. Помните, что разрешение экрана 48 на 84 точки, и картинка должна быть не больше. На странице http://www.rinkydinkelectronics.

com/t_imageconverter_mono.php преобразуем изображение в массив битов. Скачаем полученный файл с расширением “*.c” и добавим его к проекту через меню: Эскиз -> Добавить файл…

или просто поместим файл в директорию скетча, а затем перезагрузим среду разработки Arduino IDE.

Теперь нужно в коде программы объявить массив с данными изображения (у меня в коде это строка extern uint8_t mysymb[];), а затем используем функцию drawBitmap() для вывода изображения в нужном месте экрана.

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

Источники:

  • Спецификация на LCD дисплей для Nokia 5110
  • Подготовка массива бит из файла изображения
  • Купить дисплей Nokia 5110 LCD с белой подсветкой по цене 85 грн

Источник: https://www.kakprosto.ru/kak-918983-kak-podklyuchit-lcd-displey-dlya-nokia-5110-k-arduino

STM32F4: GNU AS: Подключение дисплея на PCD8544 (Часть 7)

Поскольку мигающим светодиодом интерфейс пользователя построить сложно, решил подключить к STM32F407 простенький SPI дисплей из Китая.

Интерфейс дисплея PCD8544, подключение по SPI, на aliexpress и ebay обычно ищется по строке LCD nokia 5110, питание дисплея как раз от 2.7 до 3,3 вольт.

По информации полученной из даташита частота SPI дисплея не должна превышать 4 Мгц, однако все имеющиеся у меня экземпляры надежно работали при такте SPI в 21 Мгц…

Описание проекта, исходные тексты программы, настроенный файл автоматической компиляции и сборки проекта под «катом»:

в проект из шестой части публикации добавил работу с счетчиком тактов микроконтроллера DWT (честно взято с www.stm32asm.ru и переформатировано в модуль под раздельную компиляцию). Теперь в каталоге периферии микроконтроллера три модуля:

В корень проекта добавил папку devices — в нее планирую размещать модули подключаемых к микроконтроллеру устройств:

Из устройств самым необходимым сейчас являются FullHD монитор + PC клавиатура + Мышь простой LCD дисплей — чтобы можно было наконец получать информацию не с горящих светодиодов, а читая с экрана.

Поэтому в папке devices появилась папка LCD со следующим содержимым:

Файл lcd_func.

asm это модуль графических функций которые не зависят от «железа», в настоящий момент содержит в себе следующие функции:

@ *************************************************************************** @ * МОДУЛЬ ДОПОЛНИТЕЛЬНЫХ ФУНКЦИЙ МОДУЛЯ LCD * @ *************************************************************************** @ * Процедуры: * @ * LCD_PUTSTR: Вывод строки по координатам: * @ * R0:Y, R1:X, R2:COLOR R4:ADR_TEXT * @ * Текст должен заканчиваться нулевым символом * @ * Управляющий код: 0x01, .short Y, .short X, .word col * @ * * @ * LCD_PUTHEX: Вывод шестнадцатеричного числа: * @ * R0:Y, R1:X, R2:COLOR R4:HEXVal, R5:DigitCol * @ * * @ * LCD_PUTDEC: Вывод десятичного числа: * @ * R0:Y, R1:X, R2:COLOR R4:DECVal, R5:DigitCol * @ * * @ * LCD_LINE: Вывод линии: * @ * R0:Y1, R1:X1, R2:COLOR R3:Y2, R4:X2 * @ * * @ * LCD_RECT: Вывод прямоугольника: * @ * R0:Y1, R1:X1, R2:COLOR R3:Y2, R4:X2 * @ * * @ * ПРИМЕЧАНИЕ ! * @ * – Все процедуры не портят регистры! * @ * * @ * – допустимые координаты и шаг печати native процедурами определяются * @ * в файле lcd_param.inc который должен лежать рядом с файлом модуля * @ * * @ * – Драйвер дисплея должен содержать функции определенные как .global: * @ * LCD_CHAR: (R0:Y, R1:X, R2:Color, R3:Char) – native вывод символа * @ * LCD_PIXEL: (R0:Y, R1:X, R2:Color) – native вывод пиксела * @ * * @ ***************************************************************************

Поскольку модуль планируется использовать для различных типов дисплея, то процедуры старался сразу написать в расчете на разнообразное применение, например, под кодирование цвета отвел 32 бита (регистр R2) — для монохромного дисплея конечно многовато (достаточно было одного бита), но вот для цветных дисплеев с 16-ти битной палитрой в самый раз.

Для рисования линий применил алгоритм Брезенхейма — могу сказать что ассемблер ARM в этом себя показал просто великолепно!!! возможность условного исполнения команд присваивания и арифметических действий сделала код рисования линии не намного большим процедуры вывода символа! Вывод десятичного числа написан с использованием блока деления на 10 при помощи арифметики и сдвигов — тоже получилось очень компактно.

Файл настроек для модуля lcd_func.asm под драйвер дисплея pcd8544 выглядит пока так:

Источник: http://savepearlharbor.com/?p=273171

LCD дисплей от nokia 5110 и Arduino

В данном примере будем подключать LCD дисплей от Nokia 5110 к Arduino. Данный дисплей очень удобно использовать для вывода различного рода информации, в нашем случае мы будем выводить изображение формата BMP. LCD экран имеет очень удобные выводы (пины) для подключения, все что вам нужно сделать это взять провода и подключить дисплей к нашей Arduino, и ничего паять не придется.

С подключение проблемвозникнуть не должно, нижи приведена таблица соответствия выводов. Важно помнить что экран питается от напряжения в 3.3 Вольта.

Изображение для вывода рисуется в обычном ворде.

В нашем примере мы выводим изображение – эллипс, размер 84 на 48 пикселей. После того как рисунок нарисован его необходимо перевести в код, для этого используется программа LCD Assistant для windows.

После того как мы в программе сгенерирован код изображения, нам необходимо преобразовать его к определенному виду (пример ниже) и сохранить в файл “thename.c”.

#include const unsigned char graphic [] PROGMEM= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xE0, 0xF0, 0xF0, 0xF8, 0xF8, 0xFC, 0xFC, 0xF8, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFE, 0xFE, 0xFE, 0xFC, 0xFC, 0xFC, 0xF8, 0xF8, 0xF0, 0xC0, 0xE0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0F, 0x1F, 0x1F, 0x3F, 0x3F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x3F, 0x3F, 0x1F, 0x1F, 0x0F, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };

После это в среде Arduino создаем новый проект и сохраняем его по нужной дериктории, в эту дерикторию копируем ранее созданный файл”thename.c”

Источник: http://www.radio-magic.ru/arduino-projects/247-nokia5110-arduino

Купить ЖК-модуль Nokia 5110 по цене 209 руб. в Интернет-магазине с доставкой | Москва

Nokia5110 LCD модуль использует последовательный интерфейс обмена данными с процессором

Nokia5110 LCD модуль использует последовательный интерфейс обмена данными с процессором

Параметры:

  • Напряжение: 2.7 В-3.3 В
  • Интерфейс данных: 2.7 – 3.3 В
  • Подсветка: высокий уровень 3.3 В
  • Габариты модуля: 43.6 х 43.1 мм (ширина х высота)
  • Диаметр установки: 2 мм
  • Подключение:
  • RST ——— сброс
  • CE ———- выбор чипа
  • DC ———- выбор данные / команда
  • DIN ——— последовательная линия передачи данных
  • CLK ——— тактовая частота
  • 3.3 В ——– VCC
  • LIGHT ——- терминал управления задней подсветкой
  • GND ——— земля
  • 84 x 84 LCD дисплей с возможностью демонстрации 4 строк символов
  • ЖК-модуль Nokia 5110 использует последовательный интерфейс обмена данными с процессором, количество сигнальной линии интерфейса значительно снижается, только 8 сигнальных линий. Поддержка различных типов MCU, такие как Arduino, AVR, PIC, STM32, STC MSP430 и так далее. Скорость передачи данных до 4 Мбит, возможно полное отображение скорости записи данных без времени ожидания
  • Можно использовать проводящий клей для подключения модуля с печатной платы, без подключения кабеля. Металлическими крючками на модуле можно зафиксировать модуль на печатной плате, которая очень проста в установке и замене
  • ЖК чип контроллера / драйвер связан с ЖК-чипом
  • При низкой мощности (ток ниже, чем 200 А), имеет режим отключения питания
  • Купить Nokia5110 LCD модуль можно в нашем интернет-магазине по оптовым ценам

Комплектация:
1 х 5110 ЖК-модуль

Без коробки. Упаковано в безопасный пакет из пузырчатой пленки

Доставка ЖК-модуль Nokia 5110 и других товаров категории Другое в Москве осуществляется в течение 15-20 дней. Стоимость доставки от 99 руб. (рассчитывается автоматически при оформлении заказа)

Оплатить покупку товаров вы можете картой, со счета мобильного телефона, в терминале, наличными через банк или любой электронной валютой.

Оплата

Доставка

  • Доставка в Москве, по всей России и СНГ
  • Доставка = 99 руб.(на весь заказ) + 20% от стоимости товара 
  • Почтой на ближайшее к Вам почтовое отделение 
  • Отправка со склада в Китае 
  • Срок доставки около 15 рабочих дней 
  • Отслеживание посылки через Интернет

Гарантии

  • 1 месяц на возврат товара/денег 
  • Страховка от потери на Почте – БЕСПЛАТНО 
  • Страховка от повреждения при доставке – БЕСПЛАТНО 
  • Возврат стоимости товара при неполучении 
  • Возврат стоимости товара при несоответствии описанию
  • АндрейКупить Nokia 5110 04/03/14Отличный ЖК модуль. Сделал на нем LC метр получился отличный прибор. Работает как положено. Я доволен покупкой.

Наши менеджеры работают для Вас с 10.00 до 19.00 по Московскому времени в будние дни.

Вы можете связаться с нами с помощью следующих контактных данных:

Email: order@opt-in-china.ru

Свяжитесь с нами через мессенджеры:

Мы ОНЛАЙН Пн-Пт с 10 до 19 по МСК

Источник: https://Opt-in-China.ru/product/zhk-modul-nokia-5110/

Nokia 5110 LCD

This board is a really inexpensive part (less than 4$ on ebay). It’s quite easy to connect to any micro controller with SPI protocol.

The features are limited but unbeatable for that price.

Resolution is 48 rows and 84 columns. The memory is organized in 6 banks. A byte is mapped with 8 vertical pixels. The memory size is 8 * 84 = 672 bytes.

Simple when you write a font with an height of 8 or 16 pixels. A little more complicated for other size or if you want to manage bitmaps.

Wiring

Not much to say. Just follow what’s written on the PCB. It may vary according the vendor. In my case, 8 pins are used :

Pin #NameDescription
1 RST (Reset). Keep low and then set high.
2 CE (Chip enable). When low the chip is active.
3 DC (Data or Command). When Low a command is sent, when high a data is sent
4 DIN (Data In). The pin that send serial data.
5 CLK (Clock). The SPI clock.
6 VCC Power supply. 3.3v
7 LIGHT Return path for the four blue leds used for backlight. Set to ground to allow current to go through. STM32F4 are rated for 25 ma sink. Documentation states that the backlight consumption is around 20 ma. So i tight this pin directly to an IO pin.
8 GND Ground

Controller basics

The embedded controller is PCD8544. There are few commands:

  • Power Down
  • Video inversion
  • Vertical/Horizontal addressing
  • Extended functions (set contrast…)/Regular function (display)
  • Set memory location (coordinates)
  • Set voltage adjustment / temperature
  • Set LCD contrast
  • Set system bias

Code sample content

I don’t use SPI module. SPI protocol is handled by code. Without optimization the clock speed is 1 Mhz. The module stands 4Mhz clock speed.
In this basic sample, the main module is almost empty. We just have to initialize the chip (set clock) and define the Systick interruption to fire every 1 ms. This enables an accurate Delay() function instead of a basic loop.

LCD functions are put in a separate file. For the moment there are only basic functions:

  • Low level function (SPI interface and Pin control)
  • Set cursor position
  • Write a string to screen
  • Write a char to screen
  • Write an integer value to screen
  • Clear the screen

There is only one font (6×8).

I will had picture drawing later…

Dependencies

You have to configure a project with the following modules:

  • stm32f4xx_gpio
  • stm32f4xx_rcc
  • stm32f4xx_syscfg
  • stm32f4xx_pwr
  • misc

Initialization

The following sequence is applied:

  1. Configure IO pins
  2. Set Reset pin to low level at power startup (don’t wait more than 30ms after power goes up)
  3. Keep reset low at least 100 ns (use milliseconds as practical values)
  4. Switch module to extended instruction set
  5. Set LCD voltage (try various value : too low you won’t see nothing, too high the screen will be black)
  6. Set temperature coefficient for LCD voltage (to maintain the same contrast as temperature varies)
  7. Set Bias level
  8. Clear screen (ram is filled with random values after reset)
  9. Enable display (display on in normal mode)

Source code

The source are available for download here. or you can browse Github repository

Источник: https://stm32f4.wordpress.com/lcd-modules/nokia-5110-lcd-board/

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}