Подключение и использование lcd nokia 3310 (5110) к avr-микроконтроллеру

Подключение дисплея от 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

Подключение lcd от телефона Nokia3310

   В интернете довольно много микроконтроллерных проектов с применением LCD от телефона Nokia3310. Причина большой популярности дисплея в его дешевизне и простоте использования.

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

–    Напряжение питания 2,7 – 3,3 В
–    Встроенный контроллер Philips PCD8544-    Интерфейс SPI –    Размер дисплея 38х35 мм-    Размер активной области 30х22 мм-    Разрешение 84х48 пикселей-    Диапазон рабочих температур –27…+70 0С

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

   Питание схемы 3,3 В. Если понадобится подключать экран к схеме с 5 вольтовым питанием, нужно будет делать схему согласования уровней. Скорее всего, она будет выглядеть так. Сам не проверял, поправьте, если ошибаюсь.

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

    Библиотека оказалась очень тяжеловесной, и IAR не захотел ее компилировать для  ATMega8535. В программе был организован видео-буфер на 504 байта и компилятор ругался на нехватку ОЗУ. Зачем нужен видео-буфер? Дело в том, что контроллер этого дисплея позволяет записывать данные в свою память, но не позволяет их считывать.

Это сильно ограничивает возможности по работе с дисплеем – нельзя, например, наложить одно изображение на другое. Один из путей решения проблемы – буфер в ОЗУ микроконтроллера, хранящий все, что в данный момент отображается на экране.

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

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

Исходник библиотеки.
Тестовый проект.
Описание на контроллер дисплея.Собственно для работы с дисплеем достаточно трех функций

void LCDInit(void)

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

void LCDClear(void)  Полностью очищает дисплей.

void LCDStr(unsigned char x, unsigned char row, unsigned char *dataPtr )

  Выводит текстовую строку на дисплей. X – знакоместо. Принимает значения от 0 до 13. Если строка не помещается на дисплее, оставшаяся часть просто не выводится. Row –  номер строки. Может принимать значения от 0 до 5. Верхняя строка считается нулевой.

Пример:LCDStr(0, 2, “lcd Nokia3310” );

Источник: http://chipenable.ru/index.php/item/22

Источник: http://cxema21.ru/publ/mikrokontrollery/bascom_avr/rabota_s_displeem_nokia_5110/23-1-0-227

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

Автор: Погребняк Дмитрий

Самара, 2014.

О дисплеях

Популярные в своё время сотовые телефоны фирмы Nokia, такие модели, как 3210 3310 3315 3330 3350 3410 5110 5120 5130 5160 6150 6210, обладали монохромными графическими дисплеями, с экраном 84×48 точек, на базе контроллера PCD8544.

Куплен был как то на Aliexpress дисплей Nokia 5110, совместимый с дисплеем от Nokia 3310, в которых используются одинаковые контроллеры.

Таким образом, можно было предположить, что этот дисплей должен быть полностью совместим с родным дисплеем от Nokia3310, в принципе, все так и есть. Разрешение дисплея составляет 48х84 пикселя.

Основой является контроллер PCD8544 выполненный по технологии COG – Chip On Glass, чип на стекле, по этому дисплей очень хрупкий, это следует учитывать при установки, пайки и креплении.

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

Тот дисплей, который «заведется» с использованием библиотек дисплея (размещенных на сайте) для Bascom’а, без какой – либо их доработки, можно будет считать соответствующим оригиналу.

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

Дисплей 5110 заказанный с китая:

Если смотреть на лицевую сторону дисплея контактами к вверху то выводы считаются с права на лево от 1 до 8. Работает дисплей от 3 вольт (я про оригинал), модули заказанные с китая работают от 5вольт.

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

Хочу заметить, что распиновка и название некоторых выводов 5110 от 3310 отличается! Вариантов подключения 3310 на других ресурсах полно, а вот работы с 5510 мною замечено не было…

Порядок подключения дисплея к микроконтроллеру следующий:

Вывод din  – portb.4, Вывод scl – portb.3 , Вывод dc – portb.5, Вывод ce –  portc.0 , Вывод reset – vcc

Код программы:

Компилируем, прошиваем и радуемся:

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

Видео работы:

Команды для работы с 5110(3310):

Все файлы с архива размещайте в одной папке, нужно чтобы код программы в BASCOM и библиотеки были в одной папке, иначе работать не будет.

файлы проекта (~20кб.)

Модуль с дисплеем Nokia 5110

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

Сейчас на ebay можно за порядка 100 рублей (вместе с доставкой) купить такой дисплей, установленный на печатную плату 45х45мм, которая также обеспечивает подсветку.

О подключении таких дисплеев, на базе контроллера PCD8544, и пойдёт речь ниже.

О контроллере

Контроллер PCD8544 разработан фирмой PHILIPS. Документацию на него можно скачать здесь

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

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

– Невозможно работать с изображением в режиме «чтение-изменение-запись». Вывод сложного изображения, где потребуется совмещение разной графической информации, может быть осуществлён только с использованием внеэкранного буфера, или предварительного полного расчёта совмещения изображений.

В то же время, контроллер обеспечивает крайне низкое энергопотребление: менее 300мкА (с типичными дисплеями Nokia) в рабочем режиме, и около 1.5мкА в режиме отключения.

Контроллер имеет встроенный генератор повышенного напряжения, поэтому отдельно подводить напряжение для питания дисплея не требуется.

Сам же контроллер работает при напряжении 2,7 – 3,3 Вольта.

Подключение

Подключение модуля дисплея на базе PCD8544

Как упоминалось выше, контроллер работает на напряжении 2,7 – 3,3 Вольта. Это значит что сопряжённый микроконтроллер должен либо работать на том же напряжении, либо же как-то согласовать уровни на выводах, например, при помощи делителей.

Кроме «земли» и «питания», к контроллеру дисплея должны идти 5 линий:

* SCLK – тактовый импульс для передачи данных.

* SDIN – передаваемые данные.

* D/C̅ – выбор типа передаваемых данных: высокий уровень – графические данные, низкий – инструкция.

* S̅C̅E̅ – выбор чипа. Передача данных осуществляется при низком уровне на этой линии. При высоком уровне данные игнорируются.

* R̅E̅S̅ – сброс. При низком уровне происходит аппаратный сброс контроллера.

Поскольку, согласно спецификации (см п.8.1) аппаратный сброс является необходимым для инициализации дисплея, линия R̅E̅S̅ также должна быть подключена.

В принципе, линия S̅C̅E̅ может быть притянута постоянно к земле, но в этом случае, если по какой либо причине контроллер дисплея потерял синхронизацию с МК, это никак не удастся обнаружить. При подключении к МК, рекомендую притягивать эту линию к высокому уровню подтягивающим резистором 100-500кОм, чтобы исключить реакцию контроллера на помехи, пока МК находится в состоянии сброса.

Обратная сторона модуля

Передача осуществляется по протоколу SPI, но только в одном направлении. При работе с микроконтроллерами AVR, удобно использовать UART в режиме SPI-master, когда включен только передатчик. Режим SPI-3 (CPHA=1, CPOL=1).

Это значит, что пока обмен отсутствует, на линии SCLK должен присутствовать высокий уровень, а чтение данных с линии SDIN контроллер осуществляет по нарастающему фронту на линии SCLK в течение 100нс.

При этом они должны быть выставлены минимум за 100 нс до нарастания фронта. Передача осуществляется по 8 бит, сначала старший.

Уровень на линии D/C̅ определяет, как трактовать полученные данные. Высокий уровень означает, что переданные данные должны быть выведены на дисплей, низкий уровень – что передана команда.

Контроллер читает значение на этой линии вместе с последним (младшим) битом каждого переданного байта данных. При использовании асинхронной аппаратной передачи с этим могут возникнуть трудности.

Перед установкой уровня необходимо дождаться завершения передачи предыдущего байта.

Максимальная частота, на которой может осуществляться обмен с PCD8544 – 4 МГц. При программном формировании импульсов это, обычно не является проблемой, но при использовании аппаратной передачи, в случае если частота работы МК превышает 8МГц, следует ограничить максимальную скорость передачи.

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

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

Поскольку подсветка потребляет менее 20мА, при подключении к МК AVR возможно также подключать её напрямую к выводу МК.

Пример кода взаимодействия с дисплеем

#include #define PCD8544_SCK (1

Источник: http://aterlux.ru/article/pcd8544

Red-Resistor.ru/library/mc/lcd_nokia_5110

Подключение LСD дисплея Nokia 5110 к микроконтроллеру ATtiny25

Как-то на Али прикупил я себе три дисплея Nokia 5110. Раз прикупил, то надо научится ими пользоваться. Погуглив тему о подключении этих устройств к МК я понял, что подавляющее большинство примеров, это подключение их к ATmega8 с применением большого количества библиотек, которые упрощают задачу программирования, но в тоже время загружают контроллер так, что он уже не в состоянии ничего делать кроме как рисовать на экране кружочки, и конечно же выводить монументальное «Здравствуй мир» на английском. Более того, в статьях обычно ничего не написано о том, как осуществляется передача данных. Наверное, авторы, не без основания, считают, что подходить к изучению работы дисплея необходимо уже зная такие мелочи как передача данных по последовательному интерфейсу. Но как быть тем, у кого подключение этого дисплея сопряжено с первым знакомством со SPI? …

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

А чтобы не было желания увеличивать код до безобразия, я усложнил себе задачу и подключил дисплей не к Меге8 у которой 8 Кбайт флэш и 1 Кбайт оперативки, а к Тини 25 которая имеет более чем скромные объемы памяти.

Да еще в довесок и обрезанный SPI.

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

Конечно с помощью неё, написать «Hello World» в коде программы и вывести сточку на экран не получится, но с другой стороны, когда пишется программа под какое-то конкретное устройство на МК, работа со строковыми переменными в явном виде это скорей редкое исключение, которое должно иметь очень серьезное обоснование. Но, все по порядку.

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

Подключение дисплея к МК я проводил по классической схеме к ногам встроенного USI интерфейса. Чтобы не делать плату сопряжения я запитал всё устройство от стабилизатора 3,3V.

Это сильно облегчает подключение дисплея и практически не ограничивает работу МК.

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

Для тех, кто только делает первые шаги в освоении электроники необходимо знать, что LСD дисплей – это не просто ЖК матрица, это ещё и контроллер, который управляет выводимым на экран изображением. То есть мы подключаем наш МК к другому контроллеру, который понимает команды, обеспечивает хранение данных и выводит их на ЖК экран.

Для полного подключения дисплея необходимо задействовать шесть линий связи, не включая VCC – питание и GND – землю:
1. CE (SCE) – Включение дисплея.

Эта линия, как я понял, нужна для указания контроллеру дисплея на то, что данные передаваемые по линии DIN предназначаются именно ему. Активный уровень низкий.
2. RST (RESET) – Сброс. Линия необходима при инициализации дисплея в начале его работы.
3.

DC (D/C) – Флаг данные/команда. Линия указывает контроллеру дисплея как надо интерпретировать входящие данные. Низкий уровень (0) – команда, высокий (1) – данные.
4. DIN (SDIN) – Вход интерфейса. Линия приема данных.
5. CLC (SCLC) – Тактовый сигнал.

Линия тактирования принимаемых данных.
6. BL (LED) – подсветка. Линия включения подсветки дисплея.

Я изначально не планировал какие-либо дополнительные подключения к МК кроме LСD дисплея. Поэтому немного упростил как само подключение, так и программное обеспечение.

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

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

К тому же после подключения дисплея к Тини25 у МК осталась одна свободная линия на которую, как я уже говорил, у меня большие планы.

LCD модули, которые я купил, были с интегрированными навесными элементами поэтому ичего припаивать в цепи управления мне не пришлось.

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

А также необходимо обратить внимание на наличие ограничительного резистора на линии подсветки. И поставить, если вдруг китайские товарищи решили на нем сэкономить.

Итак, собрав схему, я приступил к изучению передачи данных по SPI. Надо сказать о том, что в МК семейства Tiny нет полноценного последовательного периферийного интерфейса (SPI) его замещает модуль универсального последовательного интерфейса (USI).

Это сильно упрощённый SPI предоставляющий минимально необходимые аппаратные ресурсы для осуществления последовательного обмена данными.

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

Обязательно надо упомянуть о том, что наименование выводов MOSI и MISO не имеют к модулю USI никакого отношения. Для подключения надо ориентироваться на название выводов DO и DI. Надо быть внимательным потому как там, где у Тини25 вход данных (MISO – мастер вход / подчиненный выход) у модуля USI выход (DO – данные выход).

Я, начитавшись описания работы SPI, подключил линию MOSI к DIN и потом долго не мог понять почему ни чего не работает. Только после того как были подключены светодиоды к выходам контроллера и пошагово пройдена подпрограмма пересылки данных с фиксацией состояния выводов МК ко мне пришло понимания того, что я плохо разобрался в описании работы модуля.

Потом пришлось немного скорректировать дорожки и все встало на свои места.

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

//Подпрограмма пересылки данных через USI attiny 25 1. void usi_send (unsigned char data, unsigned char dc){ 2. LSD_PORT.LSD_DC = dc; 3. USIDR = data; 4. USISR |= (1

Источник: http://red-resistor.ru/library/mc/lcd_nokia_5110.html

Графический 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

Электроника и автоматика на МК

Источник: http://www.picbasic.ru/publ/inicializacija_lcd_nokia_3310_i_vyvod_graficheskoj_informacij/4-1-0-102

Страничка эмбеддера » Подключение LCD NOKIA 3310 к MSP430F2274

Сие повествование о том как подключить LCD экран от NOKIA 3410/3310 к микроконтроллерам серии MSP430, а в частности к MSP430f2274 (на целевой плате из набора EZ430-RF2500).

Знакомство с микроконтроллерами, как и у всех, у меня началось с «подмигивания» светодиодом. Это очень быстро надоело и я начал искать более информативные девайсы для представления информации.

Под руку подвернулась моя старая палёная нокия. Немного погуглив, выяснилось, что не один я хотел использовать экран от этого телефона, но готового проекта для моего МК я не нашёл.

Да и интересно было самому разобраться, как работают с дисплеями и шрифтами на самом низком уровне.

Основные плюсы.

  1. Питание 3.3 вольта. Такое же как и на микроконтроллере, что избавляет от преобразования напряжения.

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

  3. Интерфейс обмены с МК — SPI. Даже если у МК нет SPI, его можно без проблем реализовать программно.

  4. Доступность документации. Контроллер дисплея используется PCD8544. разрешение матрицы 48х84 пикселя.

  5. Скорость интерфейса SPI по документации составляет 4 мегабита, но на практике мне удавалось работать и на скоростях почти в три раза быстрее номинала. (ай-яй-яй —BSVi)

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

Знакомство с микроконтроллерами, как и у всех, у меня началось с «подмигивания» светодиодом. Это очень быстро надоело и я начал искать более информативные девайсы для представления информации. Под руку подвернулась статья в интернете про термометр на основе LCD дисплея от Nokia 3310.

Немного погуглив, выяснилось, что не один я хотел использовать экран от этого телефона, но готового проекта понятного написанного на языке Pro picBasic я не нашёл. Да и интересно было самому разобраться, как работают с LCD дисплеями и шрифтами на самом низком уровне.
LCD дисплей от Nokia 3310 (Рис.

1) (Datasheet для Nokia 3310). Это графический чёрно-белый ЖК дисплей, использующий контроллер PCD8544 с разрешение матрицы 84х48 точек, имеет последовательный интерфейс SPI с максимальной скоростью обмена 4 мбит/с. Напряжение питания +2.7в…+3.6в.
Рис.1 Рис.2Обозначения выводов приведены в таблице: Вывод..

Название..Функция 1..| VDD..| Питание +2.7…+3.3В 2..|SCLK..|Тактовый сигнал SPI 3..|SDIN..|Линия данных SPI 4..|DC….|Режим: данные(HIGH)/команда(LOW) 5..|SCE….|Выбор кристалла (LOW) 6..|GND …|Земля 7..|VOUT .|Внутреннее напряжение 8..|RES….

|Сброс (LOW/HIGH) Для подсоединения проводов к контактам надо постараться сделать (найти) разъём, но в крайнем случае можно припаять проводки прямо к контактам. При этом нужно быть крайне осторожным дабы не перегреть контакты и не испортить стекло.

Дисплей питается от 3,3 вольтах.

Чтобы подключить дисплей к микроконтроллеру, который питается от 5 вольт понадобиться небольшая развязка(Рис.2). Между выводом 7 VOUT и землёй дожен быть подключен конденсатор ёмкостью 1..10 мкФ(керамика или электролит) – фильтр для внутреннего источника питания LCD. Вывод 5 SCE можно сразу подцепить на землю.

При нуле на SCE – чип дисплея принимает данные с входящей линии, при единице – находится в состоянии высокого импеданса, то есть отключён от линии.(сигнал ноль-активен).Назначение остальных выводом узнаем по ходу статьи.

Немного теории о том, как организована работа контроллера этого экрана.

Сразу после подачи питания экран необходимо сбросить, подав на вывод RES “0”. Это нужно сделать обязательно, иначе можно повредить контроллер! После сброса (перевод RES “0”->”1″) контроллер готов к записи. Чтение из контроллера не предусмотрено.

Применяется стандартный SPI протокол: на вывод SCE подаётся активный низкий уровень, и по линии SDIN вводятся биты данных. Защёлкивание бита осуществляется по переднему фронту SCLK, сдвиг по заднему, данные передаются старшим битом вперёд (MSB).

Если во время передачи последнего бита из восьми на выводе D/C логическая “1”, то запись производится в память данных, иначе в управляющие регистры. Для задания режима работы служат несколько управляющих регистров. Запись в них происходит при “0” на выводе DC…..

( LOW DC )

ссылка на таблицу управляющих регистров

Reserved приведённый регистор команд являются резервированными и его использование недопустимо и далее где будет такой регистр мы будем его пропускать так он не предоставляет нам интереса(хотя практически им тоже можно побаловаться можите почитать тут).

Function set 0 0010 0PVH управление питанием, способ ввода, выбор расширенных инструкций. Команда Function Set изменяет 3 управляющих бита контроллера: • P – PowerDown; P=0 – кристалл включен; P=1 – кристалл в режиме низкого эн.потребления • V – адресация; V=1 – увеличивается указатель адреса строк(вертикальная адресация); V=0 – столбцов(горизонтальная адресация);

• Н – набор инструкций; H=0 – обычный; H=1 – расширенный

Write Data 1 dddd dddd запись данных в память дисплея..просто передача байта в память экрана, dddd dddd – просто байт данных.

Набор инструкций для H=0-обычный:

Display Control 0 0000 1D0E режимы отображения. Команда Display Control включает следующие режимы отображения: • D=0, E=0 – дисплей пустой • D=1, E=0 – обычный режим (“0” – светлая точка, “1”-тёмная) • D=0, E=1 – все элементы включены • D=1, E=1 – режим инверсии (“1” – светлая точка, “0”-тёмная)

Set Y 0 0100 0YYY установить адрес строки

Set X 0 1XXX XXXX установить адрес столбца

Набор инструкций для H=1 – расширенный :

Temperature Control 0 0000 01TT установить температурный коэффициент для ТС1 и ТС2 изходя из таблице(Table 2)
Bias System 0 0001 0BBB выбрать систему питания, таблица(Table 4 Programming the required bias system)
Set Vop 0 1VVV VVVV включить напряжение питания дисплея пункт(8.9 Set VOP value) Значение и аргументы команд с H=1 объяснять долго и сложно, поэтому предлагаю воспользоваться чисто дилетантским приёмом. Ставьте: TT=10, BBB=011, VVVVVVV=100 1000, и всё будет! Тем, кто с таким подходом не согласен – читайте даташиты. Ну с настройкой управляющих регистров разобрались, теперь перейдем к непосредственно выводу информаций на дисплей.Рис.3Весь экран разбит на банки – полосы толщиной в 8 бит и длинной в ширину экрана (48px). Всё время производится непрерывный вывод информации из видеопамяти непосредственно на матрицу: вывод по умолчанию “прямой” (единица в видеопамяти соответствует чёрному пикселю). Меняя байты видеопамяти экрана, вы меняете и само изображение. Для вывода информации в общем случае необходимо установить курсор в нужный банк и в нужную позицию по иксу. Делается это следующим образом: Выставляем на лини LOW DC (режим команд) передаём по SPI байт с командой. 0х40+номер банка (0…5) передаём по SPI байт с командой. 0х80+иксовая координата (0…83) выставляем на лини D/C единицу (режим вывода изображения)Рис.4Каждому столбцу (Xi) данной строки (Yj)соответствует 1 байт памяти (Рис.4), причем верхнему пикселю соответствует младший бит (LSB). Выбрав номер строки и столбца (см. чуть выше), передаём байт в память данных, и он отображается на экране столбиком 8х1. После записи байта автоматически увеличивается на единицу указатель адреса столбца. Поэтому следующий байт отобразится в той-же строке но со сдвигом на 1 пиксель вправо. Если при записи достигнут конец строки y=yi; x=83 то происходит переход на следующую строчку y=yi+1; x=0. Вышесказанное справедливо для случая когда бит адресации V=0. При V=1 заполнение происходит по аналогии, но каждый последующий байт отображается со сдвигом на 8 пикселей вниз. Примечание. Движение курсора и расположение банков можно настраивать. С теорией разобрались, перейдем к практике. Подключения дисплея и МК можно посмотреть на (рис.2)

Code

     'Текст программы инициализации LCD дисплея Nokia 3310 '—————————————————————————————————————————————————-   DC VAR GPIO.2 'определяем порты которым подключен дисплей   DTA VAR GPIO.1 ' я использовал pic12f629 соответственно GPIO.X   RST VAR GPIO.4     CLK VAR GPIO.0   '——————————-определяем переменные—————————————————————————————–   Chr VAR Byte ' Счетчик цикла For для очистки экрана   PosX VAR Byte 'Позиция курсора по Х координате   PosY VAR Byte 'Позиция курсора по Y координате   LcdData VAR Byte ' Данные для отправки по SPI       PAUSE 100   GOSUB LCD_INIT ' Подпрограмма инициализации дисплея     PAUSE 100   GOSUB LCD_Clear ' Подпрограмма очистки дисплея   main: 'основная программа   'сдесь заполним в следущей статье end '————————————–Подпрограмма инициализации дисплея—————————————————————– LCD_Init: ' Подпрограмма инициализации дисплея     LOW RST :pause 20 : HIGH RST 'Сброс и Окончание Сброса LCD   LOW DC 'Низкий уровень режим Kоманд       LcdData= $20: GOSUB LCD_ByteOut ' Команда Function Set ($20 = % 0010 0000) P=0 ,V=1,H=0 – обычный   LcdData= $0c: GOSUB LCD_ByteOut ' Команда Display Control ($0c = % 0000 1100) D=1, E=0   LcdData= $21: GOSUB LCD_ByteOut ' Команда Function Set ($21 = % 0010 0001) P=0 ,V=1,H=1-расширенный   LcdData= $06: GOSUB LCD_ByteOut ' Temperature Control ($06 = 0000 0110) установить температурный коэффициент   LcdData= $13: GOSUB LCD_ByteOut ' Bias System ($13 = 0001 0011) выбрать систему питания   LcdData= $c8: GOSUB LCD_ByteOut ' Set Vop ($c8 = 1100 1000) включить напряжение питания дисплея   RETURN '——————————————подпрограмма для передачи Команд по SPI —————————————————— 'данную подпрограмму стоит выделить отдельно от всего процесса инициализации, так как к ней будем постоянно 'обращаться чтобы передать Команды управляющим регистрам   LCD_ByteOut: 'подпрограмма для передачи Команд по SPI   SHIFTOUT DTA,CLK,1,[LcdData] 'передаём по SPI байт с командой. RETURN '——————————————-Подпрограмма очистки дисплея——————————————————————— LCD_Clear: ' Подпрограмма очистки дисплея     PosX=0:PosY=0 'Устанавливаем X=0,Y=0 начало координат   GOSUB LCD_GotoXY     HIGH DC 'Высокий уровень режим Данных   FOR Chr=1 TO 252 'Очищаем дисплей заполняя его “0” – светлыми точки   LcdData=0:GOSUB LCD_ByteOut   LcdData=0:GOSUB LCD_ByteOut   NEXT Chr RETURN     '——————————-Подпрограмма определения положения курсора————————————————————   'данную подпрограмму стоит выделить отдельно от всего процесса инициализации, так как к ней будем постоянно 'обращаться чтобы установить нужную для нас строку или столбец LCD_GotoXY: 'определяем место положения курсора   LOW DC 'Низкий уровень режим команд   LcdData=%01000000 | PosY :GOSUB LCD_ByteOut ' 0х40+номер банка (0…5)   LcdData=%10000000 | PosX :GOSUB LCD_ByteOut ' 0х80+иксовая координата (0…83)

RETURN

В итоге в процессе инициализации LCD дисплея требуется выполнить один раз подпрограмму LCD_Init: и больше в процессе работы программы нет надобности к ней обращаться.

Подпрограмма LCD_Clear: вам понадобиться если придеть очистить экран от предыдущих записей(скажем большого изображения) Как я и писал ранее в комментария подпрограммы (LCD_GotoXY: , LCD_ByteOut:) вы будете часто обращаться, что бы скажем сделать экран инверсным, поменять строку,столбец

В следущей статье рассмотрим вывод текстового сообщения на дисплей

VDD Питающее напряжение 2.7 – 3.3 вольта
SCK(в документации SCLK) Тактовый сигнал SPI
SDIN Линия данных SPI
D/C Этот пин выбирает устанавливает – является передаваемый байт командой или данными. 1 – данные, 0 – команда.
SCE Чип селект. При нуле на SCE — чип дисплея принимает данные с входящей линии, при единице – находится в состоянии высокого импеданса, то есть отключён от линии.(сигнал ноль-активен)
GND Земля
VOUT Отвечает за контраст, по умолчанию должен быть подключён к земле через конденсатор 4.7uF
RES Сигнал сброса внутренних регистров контроллера экрана и видеопамяти. Данный сигнал ноль-активен

Немного теории о том, как организована работа контроллера этого экрана. Весь экран разбит на банки – горизонтальные полосы толщиной в 8 бит и длинной в ширину экрана (48px).

Всё время производится непрерывный вывод информации из видеопамяти непосредственно на матрицу: вывод по умолчанию “прямой” (единица в видеопамяти соответствует чёрному пикселю). Меняя байты видеопамяти экрана, вы меняете и само изображение.

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

  1. Выставляем на лини D/C ноль (режим команд)

  2. передаём по SPI байт с командой. 0х40+номер банка (0…5)

  3. передаём по SPI байт с командой. 0х80+иксовая координата (0…83)

  4. выставляем на лини D/C единицу (режим вывода изображения)

  5. передаём по SPI байт с частью изображения который сразу же отображается на экране

  6. указатель автоматически смещается на единицу вправо, если Х=83 то переходит на Х=0 следующего банка, а если и БАНК = 5 то переходит на БАНК0 Х0.

Примечание. Движение курсора и расположение банков можно настраивать.

Главное — хорошо начать работу с дисплеем – то есть его правильно инициализировать. Приведу функцию инициализации из своего кода.

1void LcdInit (void)

2{

3 P2OUT &= ~(LCD_nRES + LCD_nSCE + LCD_Dc);

4 P2DIR |= LCD_nRES + LCD_nSCE + LCD_Dc;

5 P2OUT |= LCD_nRES;

6

7 // включение экрана и обычного набора инструкций

8 LcdSendCom(LCD_FUNCTION_SET);

9

10 // включение обычного режима отображения D=1 E=0 (0x0C)

11 LcdSendCom(LCD_DISPLAY_CONTROL + LCD_MODE_1);

12

13 // функция очистки экрана, так как после инициализации

14 // в видеопамяти будет случайный мусор

15 LcdClearMemory();

16}

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

Минусы.

  1. Отсутствие подсветки, которую, при желании, можно самому сделать. (ага, я делал для TIC120  — еще то развлечение —BSVi)

  2. Нет возможности совершать какие-либо логические операции с данными поступающими на вывод по SPI и данными уже хранящимися в видеопамяти. Как следствие не возможности управлять каждым пикселем. Для этого необходимо хранить в памяти МК видеопамять экрана, выполнять с ней разные логические операции а потом синхронизировать её с видеопамятью экрана.

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

В библиотеке находится шрифт, в котором присутствуют также русские буквы и ДОСовская псевдографика.

Библиотека для работы с LCD. При написании библиотеки неоценимую помощь в написании предоставил всезнающий BSVi! Выкладываю архив с уже готовым рабочим иаровским проектом, в котором используется моя библиотека.

Документация по контроллеру экрана

С удовольствием попытаюсь ответить на возникшие вопросы

Источник: http://bsvi.ru/podklyuchenie-lcd-nokia-3310-k-msp430f2274/

Как подключить экран Nokia 3110

В этой записи хочу поделиться опытом и готовыми библиотеками для работы с графическим дисплеем от Nokia 3110 (5110) для подключения к микроконтроллерам STM32, а, в частности, к STM32F100. Однако, не составит труда переделать для работы с микроконтроллерами семейства STM32F4. Давайте для начала разберемся Как работает графический дисплей.

Экран от Nokia 3110 представляет собой графический жидко-кристаллический дисплей с размером видимой части 84 на 48 точек. Управляется матрица контроллером PCD8544, даташит на него в конце статьи. Связь с контроллером осуществляется через последовательный интерфейс, что-то на подобии SPI.

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

1) RST – Reset – линия сброса. Для сброса необходимо подать сюда 0. В рабочем режиме линия должна быть подтянута к Vcc.
2) CE – Chip Enable – линия выбора устройства на шине данных.  При передачи данных дисплею – опустить к общему (лог.0). В режиме ожидания – к Vcc.

3) DC – Data/Command – выбор типа данных – передача команды (лог.0) или информации в память дисплею (лог.1).
4) Din – Data in – линия данных.
5) Clk – Clock – линия для такта.
6) Vcc и Gnd – линии для питания.

Хочу обратить внимание, что дисплею и уровни на входе должны быть 3.3В, хотя встречаются и на 5В. Этот момент необходимо уточнять в каждом конкретном случае.

Итак, подключаем согласно этому к отладочной плате STM32F100: RST – PA0, CE – PA1, DC – PA2, Din – PA3, Clk – PA4.

Вся матрица экрана разделена на 6 строк (банков) и 84 столбца, т.е. получается 84 байта в ряду. Передача информации происходит побайтно. Передается вначале старший бит.

А вот так выглядит адресация в памяти дисплея:

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

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

N5110_TypeDef LCD = {        {GPIOA, GPIO_Pin_0},        {GPIOA, GPIO_Pin_1},        {GPIOA, GPIO_Pin_2},        {GPIOA, GPIO_Pin_3},        {GPIOA, GPIO_Pin_4},        Delay_US,        &m};

где m это матрица для хранения информации о точках экрана:

Для инициализации интерфейса необходимо вызвать N5110_Init() и передать указать на структуру:

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

Ну и все, дисплей готов к работе. Опишу небольшое API моей библиотеки:

1234567891011121314151617181920212223242526 Нарисовать символ размером 6*8 точек. Для добавления символов см. font.h  N5110_WriteChar(N5110_TypeDef* lcd, uint8_t x, uint8_t y, uint8_t c);Тоже самое, что и предыдущая функция, только выводит инверсно символ  N5110_WriteCharInv(N5110_TypeDef* lcd, uint8_t x, uint8_t y, uint8_t c);Очищает экран  N5110_Clear(N5110_TypeDef* lcd);Переход к произвольной точке на экране. Отсчет от 0  N5110_GotoXY(N5110_TypeDef* lcd, uint8_t X, uint8_t Y);Вывести на экран строку  N5110_WriteString(N5110_TypeDef* lcd, uint8_t x, uint8_t y, uint8_t *s);Выводит число на экран  N5110_WriteDec(N5110_TypeDef* lcd, uint8_t x, uint8_t y, uint16_t buffer);Перерисовать экран  N5110_Refresh(N5110_TypeDef* lcd);Нарисовать произвольную точку  N5110_DrawPixel(N5110_TypeDef* lcd, uint8_t X, uint8_t Y);Очищает произвольную точку на экране  N5110_ClearPixel(N5110_TypeDef* lcd, uint8_t X, uint8_t Y);Рисует линию  N5110_DrawLine(N5110_TypeDef* lcd, uint8_t X1, uint8_t Y1, uint8_t X2, uint8_t Y2);Рисует окружность  N5110_DrawCircle(N5110_TypeDef* lcd, uint8_t X, uint8_t Y, uint8_t R);Рисует прямоугольник  N5110_DrawRect(N5110_TypeDef* lcd, uint8_t X1, uint8_t Y1, uint8_t X2, uint8_t Y2);Рисует “часовую стрелку”  N5110_DrawClock(N5110_TypeDef* lcd, uint8_t X, uint8_t Y, uint8_t r, uint8_t ang);

Стоит уделить внимание N5110_Refresh(). Эта функция перерисовывает экран по той информации, что содержится в переменной m. Поэтому, можно напрямую изменять ее и потом перерисовывать экран, так можно немного оптимизировать анимацию.

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

Файлы:
1) Проект в CooCox IDE Nokia 5110 LCD vs STM32
2) Даташит на контроллер дисплея PCD8544
3) Видео на YouTube Nokia 5110 LCD vs STM32

Источник: http://www.how.net.ua/2014/10/kak-podklyuchit-ekran-nokia-3110/

Как подключить 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

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