Главная » Микроконтроллеры
Призовой фонд
на июль 2017 г.
1. Осциллограф DSO138
Паяльник
2. Регулируемый паяльник 60 Вт
Паяльник
3. 200 руб.
От пользователей

Похожие статьи:


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

В данной статье я постараюсь рассказать о том, как подключить и начать работать с LCD дисплеями 3310 (5110) и микроконтроллерами семейства AVR на языке С.

С чего хотелось бы начать? 

Как правило, большинство проектов на микроконтроллерах, основной своей задачей являют обработку и последующий вывод какой либо информации в доступном и понятном виде  для человека. Это либо вывод данных на ПК, или на семи-сегментный индикатор. Неважно какое устройство Вы собираете. Будь то вольтметр, амперметр, термометр или любой другой ...метр - основная его задача - показать нам результат его работы. Для реализации этой задачи существует множество семи-сегментных индикаторов, отличающихся цветом, схемой подключения и количеством разрядов. Но работая с ними, мы всегда ограничены набором сегментов при помощи которых можем выводить только часть алфавита и цифры.А ведь хотелось бы выводить и какой либо текст, фигуру, да еще и на русском языке.... Вот тут нам на помощь и приходят LCD экраны от самых популярных моделей мобильных телефонов 3310 (5110). При этом рынок просто кишит готовыми к использованию устройствами. Нет необходимости разбирать телефон и делать переходник для контактов. Стоимость же такого готового блока колеблется в районе 2-3 доллара. Пример лотов на TinyDeal или DealExtreme. Обратите внимание, если у вас в устройстве всего 1 индикатор - то он явно дешевле. Но ведь на экран с разрешением 84х48 пикселей мы можем выводить до 6 строк по 12 символов!

Согласно описанию, питается данное устройство от 2.7 до 3.3. вольта, имеет голубую подсветку и 8 контактов.

Первые 5 используются для управления микроконтроллером, 6 питание, 7 - подсветка, 8 -масса.

1. RST --------- reset
2. CE ---------- chip selection
3. DC ---------- data/commands choice
4. DIN --------- serial data line
5. CLK --------- serial Clock Speed
6. 3.3V -------- VCC
7. LIGHT ------- backlight control terminal
8. GND --------- power negative

Осталось только подключить дисплей к микроконтроллеру и при помощи кода на С связать оба устройства. В данной статье мы не станем изобретать колесо и воспользуемся готовыми библиотеками. Для упрощения задачи, я выложил архив в котором находятся библиотеки для работы с AVR GCC, библиотеки для того что бы добавить устройство LCD 5110 в протеус, готовый проект протеуса с подключенным дисплеем к микроконтроллеру Atmega8A файлик "Памятка.pdf" - в котором описаны основные функции по работе с библиотекой. Я не стал писать библиотеку с нуля, а тоже взял готовую но значительно ее изменил. В коде библиотеки указан адрес первоисточника.Из изменений - выбросил немного лишнего, переназвал и переиначил работу функций для более удобной работы и понимания, а так же добавил функцию перевода значения с плавающей точкой типа  float в строку. Отличие от стандартных sprintf и dtostr в размере (разница около 2 кб.)  

Я не буду описывать как добавить библиотеки для AVR Studio или ISIS Proteus, и сразу перейду к практике. Если же такие вопросы будут - посмотрите обучающее видео

Библиотека работает следующим образом:
1. Инициализируем экран
2. Формируем данные для передачи
3. Передаем данные.

Распиновка для подключения находится в файле n5110.h - по умолчанию для порта B. Но при необходимости достаточно изменить только следующие строки

#define LCD_PORT                   PORTX
#define LCD_DDR                    DDRX

// Распиновка порта
#define LCD_DC_PIN                 PBX    // DC
#define LCD_CE_PIN                 PBX    // SCE
#define SPI_MOSI_PIN               PBX  // SDIN 
#define LCD_RST_PIN                PBX    // RESET
#define SPI_CLK_PIN                PBX  // SCLK 

Итак. Дисплей подключен.библиотеки подключены. Что же дальше?

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

//Atmega8A - используемый микроконтроллер
#define F_CPU 8000000
#include 
#include 
#include 
//объявим  библиотеку
#include "n5110.h"

int main(void)
{
//Инициализируем дисплей
Lcd_init();
//объявим переменные
float f_data = 14.43; //дробное
int i_data = 123; //целое
char s_data[5] = "Hello"; //строка
	while(1)
	{
		//согласно шпаргалке 
		//очистим дисплей
		Lcd_clear();
		//Lcd_prints для вывода статичных данных
		Lcd_prints(0, 0, FONT_1X,(unsigned char *)PSTR("Привет!"));
		//Lcd_print для вывода из переменной
		Lcd_print(0, 1, FONT_1X,(unsigned char *)s_data);
		//Lcd_printf для вывода дробного числа (преобразование float в string)
		//2 - число знаков после зяпятой
		Lcd_printf(0, 2, FONT_1X, f_data, 2);
		//Для вывода числа преобразуем его в строку при помощи встроенной 
		//функции itoa(число, массив,система счисления)
		char buff[20];
		itoa(i_data, buff, 10);
		Lcd_print(0, 3, FONT_1X,(unsigned char *)buff);
		//передадим данные	
		Lcd_update();
		//подождем 2 секунды
		_delay_ms(2000);
		//очистим дисплей
		Lcd_clear();
		//Нарисуем кружки
		for (int i=0;i<=10;i++)
		{
			Lcd_circle(40, 24, i, PIXEL_ON);
		}
		//передадим данные
		Lcd_update();
		//подождем 2 секунды
		_delay_ms(2000);
	}
}

В итоге получим вот такие результаты:

   

В целом как видно из кода все достаточно просто! Осталось только выбрать что выводить и как! Будут вопросы - с радостью отвечу.

Прикрепленные файлы:

Теги:

Опубликована: 0 1
Я собрал 0 2
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 2 чел.

Комментарии (28) | Я собрал (0) | Подписаться

-1
Павел Царь #
А как можно подключить LCD nokia 6230i к МК амеге8, подскажите если можно?
Ответить
0

[Автор]
kobzar #
Не подскажу... Да и смысл на такой камень такой дисплей. Там другое разрешение,цвета... Да и популярность и доступность с ценой у него явно не на высоте. Так - штучный товар. Потому особо инфы и нет.
Ответить
0
Alyes #
Для сименс A-50 пойдет? Внешне LCD похожи...
Ответить
0

[Автор]
kobzar #
Ну в целом подойдет любой, который на основе контроллера PCD8544. А у семена совершенно другой расклад. Подключить безусловно можно... Но опять же как и в случае с 6230i не ширпотреб, потому готовых наработок мало. Методы и принципы подключения у них одинаковые - но код будет разным.
Ответить
0
Vezd #
Сколько вольт подавать на вывод 7. LIGHT ------- backlight control terminal для подсветки? Нужно ли при этом подключать какие-либо другие выводы, кроме земли?
Ответить
0

[Автор]
kobzar #
Кракозябры вместо русских букв
Ребята - спешу сообщить что найден метод борьбы с кракозябрами вместо русских символов, при работе с ЖК.
Дело в том, что у некоторых из вас, проект создается в кодировке UTF-8 а наша библиотека работает только с ср1251
Фикс:
1.Открываем проект
2. File - Advanced Save Options
3. Вместо кодировки UTF-8 выбираем Cyrillic(Windows) - cp1251
Сохраняем, сохраняем проект - компилируем!
Ответить
0
si4karuk #
Как перенести дисплей на другой какой-то порт?
Ответить
0
DmitryS #
Почему то после "Привет" выводится еще 123 и в протеусе и в железе
Прикрепленный файл: IMG_20150409_145850.jpg
Ответить
0
ZAV1972 #
char s_data[5] = "Hello"; //строка Грубая ошибка в коде нету места для оканчания строки ....нужно сделать char s_data[6] = "Hello";
Ответить
0

[Автор]
kobzar #
Ответил в форуме.
Но в целом выводится ровно то, что есть примере
123 -это вывод целочисленного int с преобразованием в строку (itoa)
Ответить
0
Сергей24 #
Как перенести дисплей на другой какой-то порт?

Пробовал менять здесь:
#define LCD_PORT PORTX
#define LCD_DDR DDRX

// Распиновка порта
#define LCD_DC_PIN PBX // DC
#define LCD_CE_PIN PBX // SCE
#define SPI_MOSI_PIN PBX // SDIN
#define LCD_RST_PIN PBX // RESET
#define SPI_CLK_PIN PBX // SCLK
не получилось.
Ответить
0

[Автор]
kobzar #
С этой либой никак!
Вам нужна другая с програмным SPI - эта только для аппаратной версии
Ответить
0
SuperMuh #
Возможно ли подключить дисплей с этой библиотекой к Атмеге16?
Ответить
0
SuperMuh #
Все, вопрос снят. Разобрался - в этих МК немного различаются назначения портов, пришлось поискать инфу и все родить самому. Надо обязательно подключить SDIN (дисплея) к MOSI (МК) и SCLK к SCK, остальные порты можно не менять.
Ответить
0
Дмитрий #
Подскажите, не могу заставить работать с 128 атмегой. На какие порты чего подключать и что заменить в библиотеке? Все сделал по аналогии, на 16 работает без проблем, на 128 в протеусе работает, в реале нет, 3 дня уже голову ломаю...
Ответить
0

[Автор]
kobzar #
На те порты где есть аппаратный SPI
Ответить
0
bokorez #
Будьте добры, не могу сообразить как на экран 5110 вывести число с плавающей точкой, к примеру 750.45? Как ни пробовал, не получается.
Ответить
0
Zeromancer #
Прошу помочь. В протеусе нет индикации на данном дисплее. Подключаю запускаю, 100% должна отображаться информация, а он пустой. У меня Proteus 8.3.
Ответить
0
anslepnev #
Такая же беда, Вы как-нибудь решили эту проблему?
Ответить
0
Sony #
Подключил лсд к атмеге32 символы выводит, но допустим вместо числа (65111), выводит ( -425). В чем проблема?
Ответить
0

[Автор]
kobzar #
Переполнение буфера - в топике подробно отвечали несколько раз.
Ответить
0
Dilshod #
Здравствуйте коллеги, у меня тут проблема с отображением русских букв на дисплее nokia 1202. Как мне изменить unicode codevisionavr?
Ответить
0
Роман #
Хм.. а у меня вообще просто сероватый дисплей в протеусе и ничего не выводится.
Ответить
0
Сергей #
Объясните почему Lcd_printf не выводит дробное число если оно меньше 0.1 допустим (0.025; 0.001), а допустим 1.001 выводит.
Ответить
0
Sashka1980 #
Подскажите, как использовать функцию LcdContrast()? Фон дисплея имеет серую заливку.
Ответить
0
skive #
После инициализации дисплея вставьте:
LcdContras(60);
Я обычно ставлю 60, но в основном под дисплей подбирать надо.
Ответить
0
Vladimir_Chornenkiy #
Подскажите пожалуйста, как на базе этого драйвера создать универсальное меню? Подключил клавиатуру, пытался с помощью кнопок влиять на изменение текста на дисплее, посредством мелких кодов и все бесполезно. Что я не так делаю? Заранее спасибо.
Прикрепленный файл: Безымянный2.JPG
Ответить
0
Сергий #
Спасибо за полезный урок и заготовку, сэкономило массу времени.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
Конструктор для сборки: предусилитель на лампе 6N3 Макетная плата для пайки (10 шт)
вверх