mmote.ru/content/posts/nokia5110-lcd-connection/index.md

84 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "Подключение дисплея от nokia 5110/3310 к AVR"
categories: ["mcu", "archive"]
date: 2015-08-13T00:00:00+03:00
draft: false
featured_image: lcd_image4.jpg
---
Итак, наконец-то повезло приобрести телефон nokia 5110. В телефоне много разных вкусностей, но нас интересует дисплей.
<!--more-->
> :warning: Если вы используете AVR-GCC / WinAvr, то вам нужна
> [эта библиотека](https://github.com/gresolio/N3310Lib).
> Настоятельно рекомендую изучить [эту статью](../avr-lcd-images).
![Телефон, собственно|300](5110phone.jpg)
Разбираем телефон и добираемся до дисплея.
![|300](5110phone_inside.jpg)
Дисплей с печаткой соединяется резиновым шлейфом. Также под дисплеем располагаются светодиоды. Лучше всего отпилить часть печатки с дисплеем и припаять шлейф с коннектором, как я и поступил.
![|300](5110cut.jpg) ![|300](5110lcd_wire.jpg)
На плате с дисплеем я напаял несколько перемычек, дабы уменьшить количество проводов.![Распиновка дисплея|300](lph7366_pinout.png)
![Распиновка на печатке, вид сверху|500](lcd.png)
Далее дисплей подключается к микроконтроллеру по такой схеме:
![Подключение к МК|300](lcd_atmega8.png)
Я использовал ATmega8, но подойдут и многие другие микроконтроллеры семейства AVR. Пины можно изменить в программе. Схему я питал напряжением 3.3в, но для питания от пяти нужно сделать коммутацию на резисторах. Драйвер собран из нескольких источников. Код для CodeVisionAvr. Русские буквы в набор входят :)
Функции приведены ниже
```cpp
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); //вывод дополнительных символов (пока только значок заряда, 7x10)
```
Пины меняются в заголовочном файле lcd.h
```cpp
#define LCD_CLK_PIN PORTB.0
#define LCD_DATA_PIN PORTB.1
#define LCD_DC_PIN PORTB.2
#define LCD_RST_PIN PORTB.3
```
Стоит напомнить, что префикс <span style="color: #ff00ff;">**flash** <span style="color: #000000;">перед переменной означает, что она сохраняется не в оперативной памяти, а во **flash** памяти МК. Использовал по причине нехватки памяти при хранении изображений.</span></span>
Ну и демонстрация работы
![|300](lcd_image1.jpg) ![|300](lcd_image2.jpg)
![|300](lcd_image3.jpg) ![|300](lcd_image4.jpg)
**Ссылки:**
[Архив с исходником](nokia5510.zip)
[Модель для Proteus](3310_proteus.zip)
[Тут я нашёл распиновку](http://serdisplib.sourceforge.net/ser/pcd8544.html)
[Программа Image Generate](http://alex-exe.ru/programm/image-generate/)
[Программа GLCD Font Creator](http://www.mikroe.com/glcd-font-creator)
Прочие источники:
[раз](http://we.easyelectronics.ru/lcd_gfx/biblioteka-dlya-raboty-s-displeem-nokia-3310.html),
[два](http://pro-radio.ru/controllers/5210/)