- Лоботрясы

Поиск
Перейти к контенту

Главное меню:

Библиотеки для AVR

Читать в Яндекс.Подписках



     Библиотека для дисплея LPH8731-3C
Просмотров: 5267

v 1.2 - Реализована возможность с помощью макроса _USE_SOFT_SPI выбрать аппаратный или программный SPI;
        - добавлена функция void SetRotation (unsigned int angle), где angle - угол поворота экрана (0, 90, 180 и 270 градусов), по умолчанию - 0
  
     - добавлена функция void LCD_FillLine (char tx1, char ty1, char tx2, char ty2, char width, int color) для рисования линии шириной width;

    В процессе создания разнообразных девайсов на микроконтроллерах, часто приходится сталкиваться с необходимостью отображения большого количества разноплановой информации. Первые крики радости при освоении алфавитно-символьных индикаторов на основе
HD44780 и графических индикаторов WG12864A быстро угасли, т.к. первые обладают лишь минимумом возможностей, а вторые, несмотря на их "продвинутость", обладают излишней громоздкостью и являются монохромными, да и цена на них вызывает уныние.
Хорошей альтернативой для всевозможных поделок являются дисплеи от мобильных телефонов, благо, рынок завален предложениями
Arduino-совместимых дисплейных модулей, однако волна популярности этого раскрученного электронного конструктора подстёгивает "барыг" держать цены на сию продукцию на-а-а-много выше её себестоимости, благодаря чему у меня возник интерес к дисплеям от б/у телефонов, служившим нам верой и правдой долгие годы.

    Когда-то, самым первым моим телефоном был Siemens A50, вторым -  Siemens A60, и если первый ещё в здравом уме и доброй памяти, от второго остался только корпус и дисплей, который было решено приобщить к делу. Анализ данной проблемы показал, что в многочисленных любительских конструкциях хит-парад держат экраны от Nokia и от телефона Siemens S65, другим же дисплеям, которые ещё несложно найти (по сравнению с тем же Siemens S65) и применить для своих целей, уделено недостаточно внимания.
    Являясь одно время владельцем двух телефонов Siemens, решил уделить внимание дисплеям этой некогда популярной фирмы. Основным критерием выбора типа дисплея стали: 1) дисплей должен быть цветным; 2) простота применения в электронных конструкциях; 3) доступность и относительная низкая стоимость.
    После поиска и изучения информации о типе применяемого дисплея, способа его управления и анализа разных кодов была написана библиотека на С, полностью удовлетворяющая мои небольшие запросы.
    Итак, целью данной статьи является рассмотрение вопроса применения дисплея LPH8731-3C (контроллер EPSON S1D15G14), который применялся в телефонах Siemens A60, A62, C60, М55, MC60, S55, и которые ещё не сложно найти на барахолках или в центрах ремонта мобильной связи. Контроллер, применяемый в данном дисплее, присутствует также в дисплее LPH 9116-1 (телефоны Siemens A75), из чего следует, что команды для работы с данным индикатором идентичны.
    Вообще, в телефонах Siemens A60, C60, М55, MC60, S55 применялись три типа дисплея - LPH8731-3C, LM15SGFNZ07 (контроллер Hynix HM17CM4101) и реже - LM15SGFNZ04. Разрешение всех данных дисплеев составляет 101х80 пикселей, что, при использовании библиотеки символов разрешением 5х8 пикселей, даёт возможность выводить текстовую информацию на 10 строк по 16 символов.
    Дисплеи LPH8731-3C и LM15SGFNZ07

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

    Распиновка дисплея LPH8731-3C:

1 -  CS – Chip Select. При установке в «0» контроллер дисплея принимает информацию;
2 - RESET – вывод для сброса контроллера;
3 - RS – вывод для определения типа передаваемых данных («0» - команда, «1» - данные);
4 - CLK – вывод тактового сигнала для передачи данных;
5 - DAT – вывод передачи данных;
6 - VDD
к источнику питания от +1.6V до +3.6V;
7 - GND
общий провод (земля);
8 - LED_1A
вывод питания подсветки;
9 - LED_К
вывод катодов светодиодов подсветки (к GND);
10 - LED_2A
вывод питания подсветки.

    Сопряжение дисплея с микроконтроллером можно сделать следующим образом:

    Использовать дисплей для своего творчества удобно с рамочкой-держателем, взятой с платы мобильного телефона (правда, попадается она в зависимости от модели телефона). Подробное описание того, как легко провести демонтаж сего крепления, описано здесь.
    В архиве внизу можно найти печатную плату с
SMD-монтажем деталей в Proteus и в формате PDF под ЛУТ.

    Библиотека (для CodeVisionAVR) работы с LPH8731-3C содержит следующие функции (приведены только пользовательские функции!):

    В самом начале библиотеки, если объявлен макрос _8_BIT_COLOR, то цветовая палитра дисплея будет составлять 256 цветов, иначе - 4096 цветов.
    Если объявлен макрос
_USE_SOFT_SPI, используется программный SPI, иначе -аппаратный SPI.

1.
void LCD_init (void);
Инициализация дисплея
2. void SetRotation (unsigned int angle);
Задание угла поворота экрана (0º , 90º, 180º, 270º)
3. void SetArea (char x1, char x2, char y1, char y2);
Рабочая функция выделения области экрана
4. void Put_Pixel (char x, char y, unsigned int color);
Функция вывода точки (пикселя).
x и y – координаты экрана, где будет отображён пиксель цветом color
5. void LCD_Putchar (char symbol, char x, char y, int t_color, int b_color, char zoom_width, char zoom_height);
Функция вывода одного символа ASCII-кода. Данная функция рассчитана на вывод символов размером 5х8 пикселей
symbol – выводимый на экран символ в ASCII-кодировке; x и y – начальная координата вывода символа; t_color – цвет пикселя;
b_color – цвет фона; переменные zoom_width и zoom_height увеличивают символ на экране в указанное число раз
6. void LCD_Puts(char *str, int x, int y, int t_color, int b_color, char zoom_width, char zoom_height);
Функция вывода строки, расположенной в ram-памяти микроконтроллера. x и y - координаты пикселя начала вывода строки
7. void LCD_Putsf(flash char *str, int x, int y, int t_color, int b_color, char zoom_width, char zoom_height);
Функция вывода строки, расположенной во flash-памяти микроконтроллера
8. void LCD_Putchar_Shadow (char symbol, char x, char y, int t_color, char zoom_width, char zoom_height);
То же, что и LCD_Putchar, только без цвета фона
9. void LCD_Puts_Shadow (char *str, int x, int y,  int t_color, char zoom_width, char zoom_height);
То же, что и LCD_Puts, только без цвета фона
10.
void LCD_Putsf_Shadow (flash char *str, int x, int y,  int t_color, char zoom_width, char zoom_height);
То же, что и LCD_Putsf, только без цвета фона
11.
void LCD_FillScreen (unsigned int color);
Функция заливки экрана цветом color
12.
void LCD_Output_image (char x, char y, char width, char height, flash char *img);
Функция вывода картинки. x и y начальная позиция выводимого на экран изображения; width и height – ширина и высота изображения
(в пикселях);  *img – указатель на массив данных, составляющих изображение. Данная функция предполагает, что массив данных
изображения расположен во flash-памяти микроконтроллера. Для преобразования необходимого вам изображения в массив, содержащий
цвет пикселей, можно воспользоваться программами Image2Lcd или Nokia Image Creator, которые несложно найти на просторах
интернета. Единственное требование – направление вывода массива изображения должно выполняться слева-направо, сверху-вниз!
При использовании 16-ти битной палитры, при преобразовании изображения в массив типа char, обязательно старший байт должен
идти первым!


    Объявление в начале файла 8731-3C.h библиотеки макроса _GEOMETRICAL позволяет использовать функции вывода линии, рамки, прямоугольника, окружности, круга и треугольника.

13.
void LCD_DrawLine (char x1, char y1, char x2, char y2, int color);
Нарисовать линию. x1 и y1 – начальная позиция линии; x2 и y2 – конечная позиция линии
14. void LCD_FillLine (char tx1, char ty1, char tx2, char ty2, char width, int color);
Нарисовать линию шириной width
15. void LCD_DrawRect (char x1, char y1, char width, char height, char size, int color);
Нарисовать рамку. size - толщина рамки
16. void LCD_FillRect (char x1, char y1, char width, char height, int color);
Нарисовать прямоугольник
17. void LCD_DrawCircle (char xcenter, char ycenter, char rad, int color);
Нарисовать окружность. rad – радиус окружности в пикселях

18.
void LCD_FillCircle (char xcenter, char ycenter, char rad, int color);
Нарисовать круг, заполненный цветом color
19.
void LCD_DrawTriangle (char x1, char y1, char x2, char y2, char x3, char y3, int color);
Нарисовать контуры треугольника

20.
void LCD_FillTriangle (char x1, char y1, char x2, char y2, char x3, char y3, int color);
Нарисовать треугольник, заполненный цветом color

Скачать:
Библиотека для дисплея LPH8731-3C
Печатная плата в Proteus и под ЛУТ

Публикация первого варианта статьи  на сайте cxem.net

Обновлено 27.09.2014

© Igoryosha, 2013-2014

 
 
Назад к содержимому | Назад к главному меню