Работа с дисплеем от nokia 3310

Графический LCD дисплей 84×48 – Nokia 5110 и Arduino

Помните те времена, когда мобильные телефоны были “дубовые”, у них была отдельная кнопочная клавиатура и маленький монохромный жидкокристаллический дисплей?

Теперь этот рынок принадлежит всяким iPhone, Galaxy и т.п., но дисплеи находят себе новое применение: diy-проекты!

Черно-белый дисплей 84х48 пикселей, который мы будем рассматривать, использовался в телефонах Nokia 3310. Основное их преимущество – легкость в управлении. Подобный дисплей отлично впишется в ваш проект для интерактивного обмена информацией с пользователем.

В статье мы рассмотрим управление этим графическим дисплеем с помощью Arduino. Рассмотрены все особенности подключения, технические характеристики дисплея и программа для Arduino.

Необходимые материалы

  • Arduino или ее клон.
  • Коннекторы.
  • Монтажная плата.

Ссылки для заказа необходимого оборудования из Китая

  • КУПИТЬ Arduino Uno R3;
  • КУПИТЬ экран nokia 5110;
  • КУПИТЬ Breadboard;

Технические характеристики дисплея Nokia 5110

Перед подключением дисплея и программированием Arduino давайте рассмотрим общую информацию о нем.

Распиновка

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

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

Питание

Вы уже обратили внимание, что на LCD дисплее 5110 два коннектора для питания. Первый – самый важный – питание логики дисплея. В datasheet указано, что оно должно выбираться в диапазоне 2.7 – 3.3 В. В нормальном режиме работы дисплей будет потреблять от 6 до 7 мА.

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

Так что с питанием надо быть аккуратнее. Можно использовать токоограничивающий резистор при подключении пина 'LED' или использовать максимальное напряжение питания 3.3 В. Не забывайте, что светодиоды могут поглощать большие токи! Без ограничения, они потянут около 100 мА при напряжении питания 3.3 В.

Управляющий интерфейс

В дисплее встроен контроллер: Philips PCD8544, который преобразовывает массивный параллельный интерфейс в более удобный серийный. PCD8544 управляется помощью синхронным серийным протоколом, который подобен SPI. Обратите внимание, что есть пины счетчика времени (SCLK) и ввода серийных данных (DN), а также активный-low выбор чипа (SCE).

Выше рассмотренных серийных коннекторов установлен еще один коннектор – D/C, по которому поступает информация о том, могут ли быть отображены данные, которые передаются.

Для перечня команд, ознакомьтесь с разделом “Instructions” из даташита PCD8544 (страница 11). Есть команды, которые очищают дисплей, инвертируют пиксели, отключают питание и т.п.

Сборка и подключение дисплея 5110

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

Сборка

Для “сборки” дисплея вам могут пригодится коннекторы. 8 штук будет достаточно. Можно использовать прямые ноги или расположенные под 90 градусов. Зависит от дальнейшего использования. Если вы планируете использовать монтажную плату, рельса с прямыми коннекторами, скорее всего, будет оптимальным выбором.

LCD дисплей от Nokia 5110, установленный на мини-монтажной плате:

Можно и напрямую запаять переходники к дисплею.

Подключение дисплея 5110 к Arduino

В данном примере мы подключим LCD дисплей к Arduino. Подобную методику можно легко адаптировать к другим платам и микроконтроллерам.

Для подключения пинов передачи данных – SCLK и DN(MOSI) – мы используем SPI пины Arduino, которые обеспечивают быструю передачу данных. Выбор чипа (SCE), перезагрузка (RST), и пин данные/управление (D/C) могут быть подключены к любому цифровому пину.

Выход от светодиода подключается к пину на Arduino, который поддерживает ШИМ-модуляцию. Благодаря этому возможна гибкая настройка яркости подсветки.

К сожалению, максимальное напряжение питания дисплея 5110 может достигать 3.6 вольт, так что подключать напрямую к стандартному выходу 5 V на Arduino нельзя. Напряжение надо настраивать. Соответственно, появляется не колько вариантов подключения.

Прямое подключение к Arduino

Самый простой вариант подключения к Arduino напрямую. В этом случае надо использовать платы Arduino Pro 3.3V/8MHz или 3.3V Arduino Pro Mini. Вариант, предложенный ниже работает с платами Arduino 5V. Это рабочий вариант, но срок работы дисплея может несколько сократиться.

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

Хороший и недорогой вариант для обеспечения дополнительной защиты – установка резисторов между пинами пинами передачи данных от Arduino к LCD 5110. Если вы используете Arduino Uno (или подобную 5-ти вольтовую плату), можно использовать резисторы номиналом 10 кОм и 1 кОм. Схема подключения дисплея с использованием резисторов приведена на рисунке ниже:

Подключение такое же как и в первом примере, но в каждой цепи сигнала установлен резистор. Резисторы на 10 кОм установлены между пинами SCLK, DN, D/C и RST. Резистор номиналом 1 кОм – между пинами SCE и пином 7. Ну и 330 Ом остается между пином 9 и пином со светодиодом. and pin 7.

Преобразователи уровня

Третий вариант подключения – с использованием преобразователей уровня для переключения между 5 и 3.3 В. Для этих целей можно использовать модули Bi-Directional Logic Level Converter или TXB0104.

К сожалению, на дисплее пять входов для сигнала 3.3 В, а на преобразователях уровня – четыре. Можно оставить выход RTS в состоянии high (подключив его с использованием резистора на 10 кОм). В результате вы лишаетесь возможности управления перезагрузкой дисплея, но все остальные функции будут доступны.

Первый пример скетча для Arduino: LCD Demo

После благополучного подключения можно переходить к загрузке скетча и отображения данных на дисплее!

Программа для Arduino

Ниже приведена ссылка, по которой вы можете скачать скетч для управления LCD. Копируйте код в Arduino IDE и загружайте на плату:

Источник: http://arduino-diy.com/arduino-graficheskiy-LCD-displey-84×48-Nokia-5110

Слушать и скачать

  • Best Of Atif Aslam Top 20 Songs Jukebox 2018192 Kbps 117.26 MB 01:29:06 132385
  • Atif Aslam Tajdar E Haram Coke Studio Season 8 Episode 1192 Kbps 13.77 MB 00:10:28 1265333
  • Atif Aslam Songs Main Rang Sharbaton Ka Tu Jaane Na Kun Faya Kun Atif Aslam Live Performance192 Kbps 10.05 MB 00:07:38
  • Tere Liye Namaste England Arjun Kapoor Parineeti Chopra Atif Aslam Akanksha Bhandari192 Kbps 3.99 MB 00:03:02 116659
  • Atif A Dekhte Dekhte Song Batti Gul Meter Chalu Shahid K Shraddha K Nusrat Saab Rochak Manoj192 Kbps 3.47 MB 00:02:38 833408
  • Atif Aslam Tera Hua Video Loveyatri Aayush Sharma Warina Hussain Tanishk Bagchi Manoj M192 Kbps 3.93 MB 00:02:59 322096
  • Tera Hua Video Song With Lyrics Atif Aslam Loveyatri Aayush Sharma Warina Hussain Tanishk B192 Kbps 5.09 MB 00:03:52 81006
  • Jab Koi Baat DJ Chetas Full Video Ft Atif Aslam Shirley Setia Latest Romantic Songs 2018192 Kbps 5.55 MB 00:04:13 896815
  • Chalte Chalte Mitron Atif Aslam Jackky Bhagnani Kritika Kamra Tanishk Bagchi192 Kbps 2.94 MB 00:02:14 136802
  • Tum Laila Majnu Atif Aslam Avinash Tiwary Tripti Dimri Niladri Kumar192 Kbps 5.26 MB 00:04:00 11588
  • Dil Diyan Gallan Atif Aslam Neha Kakkar Live Houston 2018192 Kbps 6.69 MB 00:05:05 69336
  • Atif Aslam Pehli Dafa Song Video Ileana D Cruz Latest Hindi Song 2017 T Series192 Kbps 6.21 MB 00:04:43 514502
  • Dil Meri Na Sune Song Video Genius Utkarsh Ishita Atif Aslam Himesh Reshammiya Manoj192 Kbps 4.15 MB 00:03:09 640604
  • Kuch Is Tarah Lyrical Doorie Atif Aslam Mithoon Atif Aslam192 Kbps 6.89 MB 00:05:14 144620
  • The Love Mashup Atif Aslam Arijit Singh 2018 By DJ RHN ROHAN Is This Love Or Pain192 Kbps 8.14 MB 00:06:11 441810
  • Satyameva Jayate PANIYON SA Song John Abraham Aisha Sharma Tulsi Kumar Atif Aslam Rochak K192 Kbps 3.97 MB 00:03:01 716430
  • Tere Bin Lyrical Bas Ek Pal Atif Aslam Mithoon Urmila Juhi Chawla Jimmy Shergill Sanjay192 Kbps 6.71 MB 00:05:06 24834
  • Best Of Atif Aslam Top 10 Songs Jukebox 2018 Top Hits Part 1192 Kbps 54.64 MB 00:41:31 113717
  • Atif Aslam Musafir Song Sweetiee Weds NRI Himansh Kohli Zoya Afroz Palak Palash Muchhal192 Kbps 3.97 MB 00:03:01 534242
  • Doorie Sahi Jaaye Naa Feat Urvashi Sharma Video Song Atif Aslam Album Doorie192 Kbps 4.52 MB 00:03:26 34362
  • Baarish By Atif Aslam Half Girlfriend Arjun Kapoor Shraddha Kapoor Tanishk Bagchi192 Kbps 6.23 MB 00:04:44 97608
  • Top 20 Songs Of Atif Aslam Best Of Atif Aslam Jukebox 2018192 Kbps 121.39 MB 01:32:14 27008
  • Dekhte Dekhte Ll Cover By Thermomax Kalakar Ll Ft Atif Aslam Ll Unplugged Version Ll Song 2018ll192 Kbps 8.77 MB 00:06:40 153
  • Hamain Pyar Hai Pakistan Sae Atif Aslam Defence Day 2018 ISPR Official Song192 Kbps 6.69 MB 00:05:05 26554
  • Dil Diyan Gallan Song Tiger Zinda Hai Salman Khan Katrina Kaif Atif Aslam192 Kbps 4.06 MB 00:03:05 1944703
  • Atif Aslam Lambi Judai Tribute To Reshma192 Kbps 6.43 MB 00:04:53 68631
  • Thaam Lo Video Song By Atif Aslam Parwaaz Hai Junoon Hamza Ali Abbasi Ahad Raza Mir Hania192 Kbps 1.73 MB 00:01:19 44064
  • Lyrical PANIYON SA Satyameva Jayate John Abraham Aisha Tulsi Kumar Atif Aslam Rochak K192 Kbps 5.64 MB 00:04:17 112966
  • Best Of Atif Aslam Top 15 Songs Jukebox 2018192 Kbps 81.55 MB 01:01:58 64015
  • Dekhte Dekhte Atif Aslam Sochta Hoon Ke Woh Kitne Masoom Dekhte Dekhte Batti Gul Meter Chalu192 Kbps 5.31 MB 00:04:02 187986

Для вашего поискового запроса MP3 мы нашли 1000000 песни, соответствующие вашему запросу, но показывающие только 10 лучших результатов. Теперь мы рекомендуем загрузить первый результат Best Of Atif Aslam Top 20 Songs Jukebox 2018 MP3 который загружен Technobb размером 117.26 MB , длительность  1 ч, 29 мин и 6 сек и битрейтом 192 Kbps .

Обратите внимание: 

Перед загрузкой вы можете просмотреть любую песню, наведите курсор Слушать и нажмите «Воспроизвести» или «Нажмите здесь»  Скачать для загрузки mp3-файлов высокого качества. Первые результаты поиска – с YouTube, который будет сначала преобразован, после чего файл можно загрузить, но результаты поиска из других источников могут быть сразу же загружены в MP3-файл без какого-либо преобразования или пересылки. 

Источник: https://mp3itune.ru/songs/%D0%A3%D1%80%D0%BE%D0%BA-18-%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-%D0%B4%D0%B8%D1%81%D0%BF%D0%BB%D0%B5%D0%B5%D0%BC-%D0%BE%D1%82-Nokia-3310/

Подключение дисплея от nokia 5110/3310 к AVR, блокнот Мульти

Итак, наконец-то повезло приобрести телефон nokia 5110. В телефоне много разных вкусностей, но нас интересует дисплей.

Если вы используете AVR-GCC / WinAvr, то вам нужна эта библиотека. Настоятельно рекомендую изучить эту статью.

 Рисунок 1 – Телефон, собственно

Разбираем телефон и добираемся до дисплея.

Дисплей с печаткой соединяется резиновым шлейфом. Также под дисплеем располагаются светодиоды. Лучше всего отпилить часть печатки с дисплеем и припаять шлейф с коннектором, как я и поступил.

На плате с дисплеем я напаял несколько перемычек, дабы уменьшить количество проводов.Рисунок 5 – Распиновка дисплея

Рисунок 6 – Распиновка на печатке, вид сверху

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

Рисунок 7 – Подключение к МК

Я использовал ATmega8, но подойдут и многие другие микроконтроллеры семейства AVR. Пины можно изменить в программе. Схему я питал напряжением 3.3в, но для питания от пяти нужно сделать коммутацию на резисторах. Драйвер собран из нескольких источников. Код для CodeVisionAvr. Русские буквы в набор входят 🙂

Функции приведены ниже

void lcd_init(void); //инициализация дисплея void lcd_contrast(unsigned char contrast); //установить контраст void lcd_clear(void); //очистить диплей void lcd_clear_area(unsigned int line, unsigned char startX, unsigned char endX); //очистить поле void lcd_clear_line(unsigned int line); //очистить линию void lcd_gotoxy(unsigned int x, unsigned int y); //переместить курсов в заданную позицию void lcd_putch(char chr); //вывод символа void lcd_str(char *str); //вывод строки void lcd_image( flash unsigned char img[]); //вывод изображения из программы Image generate void lcd_extrachar(int num); //вывод дополнительных символов (пока только значок заряда, 7×10)

Пины меняются в заголовочном файле lcd.h

#define LCD_CLK_PIN     PORTB.0 #define LCD_DATA_PIN    PORTB.1 #define LCD_DC_PIN      PORTB.2 #define LCD_RST_PIN     PORTB.3

Стоит напомнить, что префикс flash перед переменной означает, что она сохраняется не в оперативной памяти, а во flash памяти МК. Использовал по причине нехватки памяти при хранении изображений.

Ну и демонстрация работы

Ссылки:

Архив с исходником

Модель для Proteus

Тут я нашёл распиновку

Программа Image Generate

Программа GLCD Font Creator

Прочие источники: раз, два

Источник: http://mmote.ru/nokia5110-lcd-connection

Дисплей Nokia 3310

10 Alex   (20.07.2014 23:32)Это конечно хорошо! Но я бы не стал так делать, ведь питание проходит через сигнальные провода к контроллеру дисплея и не известно как долго он выдержит. Следуйте даташиту и ваш дисплей будет жить долго и счастливо

0Спам11 Бегемот   (21.07.2014 12:06)спасибо большое за ответ, очень помогли, а то уже собрался так и паять без него)))

7 Alex   (20.07.2014 22:35)Vcc (1-ый) по даташиту напряжение питания 3.3В. Без него никак нельзя. Может вы имели ввиду Vout?  А подсветку нужно самому организовать.

0Спам8 Бегемот   (20.07.2014 22:57)нет, именно Vcc, первый. я подключил дисплей, всё заработало, захотел проверить заработает ли от 5 В, вместо 3,3 В, отсоединил провод, а дисплей продолжал работать.

0Спам9 Бегемот   (20.07.2014 23:12)вот фото подключения, 1-й контак зеленый к ардуине не подключен http://s019.radikal.ru/i606/1407/87/d67a450f9679.jpg

5 Alex   (20.07.2014 16:34)Без заранее написанного в библиотеке русского шрифта не получится. Нужно отдельно нарисовать каждую русскую букву, и присвоить ей код, а затем обращаться к ней.В теме http://easymcu.ru/publ/12-1-0-116 используется другая библиотека u8glib. Внизу есть оригинальная версия, попробуйте адаптировать ее под ваш дисплей. В файл u8g_font_data добавить русский шрифт: my5x7rusфайл

0Спам6 Бегемот   (20.07.2014 22:20)я  вначале просто дописал символы (нашел где-то библиотеку с русским шрифтом, но она без описания и не смог разобраться с командами, оттуда выдрал для кирилицы нарисованные буквы), ничего не получилось, потом подставил кирилицу вместо исходного текста, пошли русские буквы, потом дошло как всё работает, теперь пилю библиотеку. спасибо за статью вашу и за помощь!ещё один вопрос: дисплей Nokia 3310, как в статье, настоящий (бывают клоны), вывод Vcc вообще никакой роли не играет – что с ним, что без него ничего не меняется (дисплей рабочий, выводит всё как надо), что он питает? подсветки диодной нету вроде у 3310

0Спам4 Бегемот   (20.07.2014 16:28)я кажется понял как её сделать, попробую сам, не подсказывайте пока, если совсем ничего не получится, то вернусь за советом

0Спам3 Бегемот   (20.07.2014 15:14)а где её взять?простое добавление в ASCII.h дополнительно кирилических символов ничего не дает

2 Alex   (20.07.2014 14:18)Нужно подключить библиотеку с русским шрифтом.

0Спам1 Бегемот   (20.07.2014 12:58)Здравствуйте, скажите, а как русский язык использовать?

Источник: http://easymcu.ucoz.ru/publ/12-1-0-101

Ардуино: графический ЖК дисплей 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() { }

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

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

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

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

Разбираемся с подключением жидкокристаллического монохромного дисплея с разрешением 84×48 точек от Nokia 5110 к Arduino.

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

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

Схема подключения ЖК экрана Nokia 5110 к Arduino

Пин ArduinoПин экрана Nokia 5110НазваниеФункция
3,3 V 1 Vcc Питание экрана, от 2,7 до 3,3 В
GND 2 GND Земля
3 3 SCE Enable, активный LOW
4 4 Reset Reset, активный LOW
5 5 D/C Выбор «Данные/команда»:”0″ – данные, “1” – команда
6 6 SDN Вход данных
7 7 SCLK Вход тактовых импульсов
3,3 V 8 LED Светодиодная подсветка экрана

Будьте внимательны, некоторые модификации экрана (китайские копии), имеют другую нумерацию выводов. Также на некоторых модификациях экрана вывод подсветки подключается к GND, а не Vcc.

2Библиотека для работы с LCD дисплеем Nokia 5110

Для работы с этим LCD экраном написано много библиотек. Предлагаю воспользоваться вот этой библиотекой. Скачаем и разархивируем скачанный файл в директорию 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 – ширина и высота рисунка.

3Скетч для вывода текста на ЖК экран Nokia 5110

Напишем такой скетч.

#include // подключаем библиотеку LCD5110 myGLCD(7,6,5,4,3); // объявляем номера пинов LCD extern uint8_t SmallFont[]; // малый шрифт (из библиотеки) extern uint8_t MediumNumbers[]; // средний шрифт для цифр (из библиотеки) int seconds = 0; // счётчик секунд void setup() { myGLCD.InitLCD(); // инициализация LCD дисплея } void loop() { myGLCD.clrScr(); // очистка экрана myGLCD.setFont(SmallFont); // задаём размер шрифта myGLCD.print(“Hello,”, LEFT, 0); // выводим на строке 0, равнение по левому краю myGLCD.print(“SolTau.ru :-)”, CENTER, 16); // выводим в строке 16 myGLCD.setFont(MediumNumbers); // задаём размер шрифта myGLCD.print(String(seconds), CENTER, 34); // выводим в строке 34 seconds += 1; // инкрементируем счётчик delay (1000); // задержка 1 сек }

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

Вывод текстовых данных на LCD экран Nokia 5110 с помощью Arduino

4Скетч для вывода изображения на ЖК экран Nokia 5110

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

Воспользуемся онлайн-инструментом для преобразования изображения в массив битов. Скачаем полученный файл с расширением “*.

c” и добавим его к проекту через меню: Эскиз Добавить файл… или просто поместим файл в директорию скетча, а затем перезагрузим среду разработки Arduino IDE.

Добавление файла к проекту Arduino

Дополним наш скетч работой с изображением.

#include LCD5110 myGLCD(7,6,5,4,3); extern uint8_t SmallFont[]; extern uint8_t MediumNumbers[]; extern uint8_t mysymb[]; // массив из точек изображения int seconds = 0; void setup() { myGLCD.InitLCD(); } void loop() { myGLCD.clrScr(); // очистка экрана myGLCD.drawBitmap(CENTER, 0, mysymb, 48, 48); // выводим изображение delay (1000); // задержка 1 сек myGLCD.clrScr(); myGLCD.setFont(SmallFont); myGLCD.print(“Hello,”, LEFT, 0); myGLCD.print(“SolTau.ru :-)”, CENTER, 16); myGLCD.setFont(MediumNumbers); myGLCD.print(String(seconds), CENTER, 34); delay (1000); seconds += 1; }

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

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

Вывод изображения на ЖК экран Nokia 5110 с помощью ArduinoLCD экран Nokia 5110 и Arduino

Источник: https://soltau.ru/index.php/arduino/item/379-kak-podklyuchit-lcd-displej-dlya-nokia-5110-k-arduino

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

Дисплей – удобное средство вывода разнообразной информации. На них можно не только выводит различную необходимую информацию, но и визуализировать процессы работы приборов.

Большую пользу они могут принести на стадии отладки или диагностики устройства.

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

Дисплей от Nokia 1100

В этой статье расскажу о том, как подключить к микроконтроллеру и использовать в текстовом режиме дисплей от сотового телефона nokia 1100.

В ранних статьях уже рассматривался дисплей от nokia 3310. По сравнению с ним у этого дисплея есть небольшой недостаток – меньший размер (35×35 мм), но есть свои плюсы.

Плюсы дисплея:

  • Маленький дисплей с относительно большим разрешением 96х65 (символами размера 5х8 можно заполнить 8 строк по 16 знаков)
  • Встроенная подсветка
  • 4 линии управления
  • Дешевый – 40 рублей

Минусы дисплея:

  • Маленький размер
  • 3,3 В линии связи и питание (при использование 5В)

Как уже упомянул в плюсах – для подключения к контроллеру достаточно 4-х линий (SCLK, SDA, CS, Reset), что существенно экономит выводы МК.

Распиновка

Из упомянутых минусов (при работе от 5В) это 3,3В питание и логические уровни, поэтому была разработана небольшая плата переходник.

Сопряжении с МК

Для подключения к контроллеру, с питанием от 5В, предлагаю следующий вариант:

Схема сопряжения

С цепи стабилизации, выполненной на стабилитроне, одновременно запитан сам дисплей и его подсветка. Связь с дисплеем используется только односторонняя, поэтому делители напряжений на линиях управления состоят из резисторов по 4,7кОма. Такой вариант включения считаю не идеальным, но рабочим.

Печатка

Плата сопряжения

Подключение к PIC16F628A

Дисплей был подключен к микроконтроллеру PIC16F628A следующим способом

Схема подключения к PIC16F628A

Как видно на схеме, выводы сопрягаются следующим образом: RES – RB4, CS – RB5, SDA – RB6, SCLK – RB7.

Прошивка

Как было сказана в начале статьи, работа с дисплеем реализована только в текстовом режиме. За основы были взяты наработки, полученные при работе с экраном от nokia 3310.

Для рабы с дисплеем доступны следующие функции:

  • lcd_init() – инициализация дисплея
  • lcd_clear() – очистка дисплея
  • lcd_test() – функция проверки дисплея (заполняет весь экран символами)
  • lcd_putch(char) – функция вывода символа размером 5х8
  • lcd_puts(const char *s) – вывод строки при помощи функции lcd_putch(char)
  • lcd_gotoxy(int X, int Y) – переход к символу расположенному в Y строке, на X позиции

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

ASCII

ещё 31 строчная буква Великого и Могучего, к сожалению, не влезли.

Для работы понадобятся следующие дефайны:

01.#define SetBit(x,y) (x|=(1

Источник: http://radiokomp.ucoz.ru/load/skhemy_na_mikrokontrollerakh/primenenie_displeja_ot_nokia1100/2-1-0-24

Отображение графики на дисплее Nokia 5110

 Освоить принципы вывода графики на типовой LCD-дисплей используемый в телефонах Nokia 5110 с помощью микроконтроллера

Решение задачи разделяется на две части – микроконтроллер и его программирование, дисплей LCD Nokia 5110 и особенноти его использования.

В данный момент, на рынке существует богатый ассортимент микроконтроллеров (МК) с различными характеристиками: от PIC-контроллеров, до МК, программируемых на высокоуровневых языках с платами, на которых уже присутствует всё для работы.

Одими из подобных контроллеров являются контроллеры выпускаемые под маркой Arduino  и их “клоны''.

Arduino — торговая марка аппаратно-программных средств для построения простых систем автоматики и робототехники, ориентированная на непрофессиональных пользователей.

Программная часть состоит из бесплатной программной оболочки (IDE) для написания программ, их компиляции и программирования аппаратуры. Аппаратная часть представляет собой набор смонтированных печатных плат, продающихся как официальным производителем, так и сторонними производителями.

Полностью открытая архитектура системы позволяет свободно копировать или дополнять линейку продукции Ардуино [wikiArd].

В нашей стране Ардуино имеет широкое распространение и большое сообщество.

Кроме того, в открытых источниках доступны различные примеры кода готового к использованию, что и повлияло на выбор Arduino как платформы для управления дисплеем.

Компания Arduino имеет несколько готовых вариантов плат.

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

Рис.1: Внешний вид платы Arduino UNO

 Технически плата Arduino Uno (рис. 1) построена на базе микроконтроллера ATmega328. Платформа имеет 14 цифровых вход/выходов (6 из которых могут использоваться как выходы ШИМ), 6 аналоговых входов, кварцевый генератор 16 МГц, разъем USB, силовой разъем, разъем ICSP и кнопку перезагрузки. Для работы необходимо подключить платформу к компьютеру посредством кабеля USB, либо подать питание при помощи адаптера AC/DC или батареи[ArdSpec].

Рис. 2: Две различимые модификации дисплеев Nokia 5110 из Китая

Дисплей от телефона Nokia 5110 доступен в различных вариантах: из старых телефонов и от китайских производителей. Первый вариант имеет сложности, т.к. телефон этой модели уже не выпускается, и даже если заполучить такой телефон, то дисплей подключен к плате с помощью специфичной контактной группы, которая затрудняет его монтаж и использование. Но у дисплеев фирмы Nokia есть неоспоримое преимущество: они сделаны на контроллере Philips PCD8544.

Дисплеи от китайских производителей более доступны, они продаются перекупщиками и доступны для заказа из Китая. Существует две отличимые внешне модификации: на синем и на красном текстолите (рис. 2).

Эти две модификации отличаются порядком вывода контактов и у “красной'' модификации есть возможность подключения контактов сверху. Но, несмотря на доступность этих модулей, существует один неизвестный элемент: контроллер дисплея.

До сих пор не известно, какой контроллер находится в китайских дисплея. С некоторыми исправлениями программный код совместим. 

Подробнее о дисплее: контроллер PCD8544 разработан компанией Philips и спецификация находитя в открытом доступе. Дисплей обладает рядом особенностей[aterlux]:

  •  Контроллер работает только в режиме отображения. Что значит нельзя узнать в каком состоянии диплей находится сейчас. Это требует точного соблюдения таймингов при выводе информации. К счастью контроллер может работать на достаточно большой скорости и это не является проблемой.
  • Невозможно работать с изображением в режиме «чтение-изменение-запись». Вывод сложного изображения, где потребуется совмещение разной графической информации, может быть осуществлён только с использованием внеэкранного буфера, или предварительного полного расчёта совмещения изображений.
  • В то же время, контроллер обеспечивает крайне низкое энергопотребление:
    менее 300~мкА (с типичными дисплеями Nokia) в рабочем режиме, и около 1,5~мкА в режиме отключения.
  • Контроллер имеет встроенный генератор повышенного напряжения, поэтому отдельно подводить напряжение для питания дисплея не требуется.

Несмотря на то, что рабочим напряжением является напряжение 2,7-3,3 Вольта и все вводы необходимо подключать через делители (как в случае с Arduino, где рабочее напряжение 5 В) –  вводы дисплея лояльны к 5 В, но питание мк дисплея все равно надо подключать к допустимому напряжению. Скорее всего, это может сказываться на сроке службы дисплея, но в рамках этой курсовой работы и простоты подключения к Arduino – делители напряжения будут отсутствовать.

Дисплей обладает 8 контактами: землей (GND), питанием (GND), питание подсветки  (Light) и 5 контактами для обмена данными.

  • SCLK – тактовый импульс для передачи данных.
  • SDIN – передаваемые данные.
  • D/C – выбор типа передаваемых данных: высокий уровень – графические данные, низкий – инструкция.
  • SCE – выбор чипа. Передача данных осуществляется при низком уровне на этой линии. При высоком уровне данные игнорируются.
  • RES – сброс. При низком уровне происходит аппаратный сброс контроллера.

Фирменному дисплею соответствует Область отображения 84х48 точек (что позволяет разместить 6 строк текста по 14 символов 5×7 в каждой), интерфейс SPI с пропускной способностью до 4 Mbit/s.  Но надо учитывать, что в китайских дисплеях той же области экрана соответствует блок памяти для 102х64 точки[radiokot29]. Так же, стоит учитывать случай, если частота работы МК превышает 8МГц, следует ограничить максимальную скорость передачи. Кроме линий передачи данных, на модуле с дисплеем обычно присутствует вход управления подсветкой, соединённый с катодом светодиодов. Аноды же через ограничивающие резисторы подключены к линии питания. Для постоянно работающей подсветки можно данный вход подключить напрямую, или через резистор к «земле». Для управления от МК подсветка может быть подключена через транзистор. Поскольку подсветка потребляет менее 20мА, при подключении к МК AVR возможно также подключать её напрямую к выводу МК. Команды передаются контроллеру дисплея, когда на линии D/C̅ низкий уровень. Контроллер работает с двумя наборами команд: обычным и расширенным. Обычный абор команд задает режим работы дисплея и положение вывода изображения. В расширенном наборе команд присутствует выбор режима температурной коррекции напряжения.

 Инициализация

Перед работой дисплей должен быть инициализирован в течении 30~мс после появления питания.

  1. Выполнить аппаратный сброс, установив на линии RES низкий уровень минимум на 100нс;
  2. Включить дисплей и выбрать расширенный набор команд, послав 0x21;
  3. Установить схему смещения напряжения, команда 0x13;
  4. Установить режим температурной коррекции, команда 0x04;
  5. Включить генератор повышенного напряжения на уровне 6.42 Вольта, команда 0xB8;
  6. Вернуться в стандартный набор команд, послав 0x20;
  7. Включить вывод графической информации на дисплей командой 0x0C.

Пример кода инициализации:
 void Adafruit_GFX::drawBitmap(int16_t x, int16_t y,
                              const uint8_t *bitmap, int16_t w, int16_t h,
                              uint16_t color) {   int16_t i, j, byteWidth = (w + 7) / 8;   for(j=0; j (i & 7))) {
        drawPixel(x+i, y+j, color);
      }
    }
  }
}

Вывод графической информации

Дисплей имеет размер 84х48 пикселей. Информация выводится Информация выводится вертикальными блоками высотой 8 пикселей, значения которых определяются значениями бит в выводимом байте. Младший бит кодирует верхний пиксель (рис. 3).

Рис.

3: Схема соответствия памяти и пикселей дисплея

Таким образом, графическая область дисплея представлена в виде шести строк, каждая по 8 пикселей в высоту. Команды 1xxxxxxx и 01000yyy определяют координаты курсора – строку и позицию, в которых будет отображены следующие 8 бит данных.

После того как байт выведен, курсор смещается на соседнюю позицию. Если командой 00100PVH выбран горизонтальный режим адресации (V = 0), то курсор смещается вправо и следующий байт данных будет отображён на соседней позиции справа. Когда достигнут правый край экрана, курсор перемещается на начало следующей строки.

Если же выбрана вертикальная адресация (V = 1), то курсор смещается вниз, на следующую строку, а после последней строки курсор смещается на одну горизонтальную позицию вправо и устанавливается на верхнюю строку.Программирование платы Arduino происходит в специальной среде Arduino IDE.

Для работы дисплея используетя готовая библиотека – Adafruit\_GFX\_Librarycite{adafruit}​. Библиотека свободно распространяется по BSD-лицензии. Она реализует общение между ардуино и дисплеем по протоколу SPI.

В библиотеки реализован ряд функций необходимых для работы с дисплеем (такие как инициализация дисплея, сброс) и функции облегчающие труд разработчика (попиксельное рисование, рисование линий, латинский шрифт и другие).

Для вывода попиксельного изображения на дисплей в данной курсовой используется функция drawBitmap.

Код функции drawBitmap: 

 void Adafruit_GFX::drawBitmap(int16_t x, int16_t y,
                              const uint8_t *bitmap, int16_t w, int16_t h,
                              uint16_t color) {   int16_t i, j, byteWidth = (w + 7) / 8;   for(j=0; j (i & 7))) {
        drawPixel(x+i, y+j, color);
      }
    }
  }
}

С использованием этой библиотеки, реализация программы для Arduino сводится к объявлению попиксельного изображения, команд инициализации и команды вывода изображения.

// pin 3 – Serial clock out (SCLK)
// pin 4 – Serial data out (DIN)
// pin 5 – Data/Command select (D/C)
// pin 6 – LCD chip select (CS)
// pin 7 – LCD reset (RST)
#include
#include
 Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7); const static unsigned char PROGMEM logoBmp[] =
{B00000000, B11000000,
  B00000001, B11000000,
  B00000001, B11000000,
  B00000011, B11100000,
  B11110011, B11100000,
  B11111110, B11111000,
  B01111110, B11111111,
  B00110011, B10011111,
  B00011111, B11111100,
  B00001101, B01110000,
  B00011011, B10100000,
  B00111111, B11100000,
  B00111111, B11110000,
  B01111100, B11110000,
  B01110000, B01110000,
  B00000000, B00110000 }; void setup() {
  Serial.begin(9600);
  display.begin();              // Инициализация дисплея
  display.setContrast(60);      // Устанавливаем контраст
  display.setTextColor(BLACK);  // Устанавливаем цвет текста
  display.setTextSize(1);       // Устанавливаем размер текста
  display.clearDisplay();       // Очищаем дисплей
  display.display();
  delay(1000); } void loop() {
  // Рисуем заранее подготовленное лого
  // Подготовлен массив из 16 пар байтов
  // каждый байт состоит из 8 битов, соответсвенно
  // получаем матрицу 16х16 битов, 1-черный цвет, 0-белый цвет
  // drawBitmap(x, y, logo, w, h, color )
    display.drawBitmap(10, 10, logoBmp, 24, 16, BLACK);
    display.display();
    delay(2000);
    // Очищаем дисплей
    display.clearDisplay();
    display.display();
    delay(1000); }

Источник: http://binarysmile.blogspot.com/2016/09/nokia-5110.html

Ссылка на основную публикацию
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}