84 lines
4.4 KiB
Markdown
84 lines
4.4 KiB
Markdown
|
---
|
|||
|
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/)
|