Всё-таки семён самый народный телефон. В этом я в очередной раз убедился, когда на халяву намутил себе аж целых три нерабочих сименса с монохромными экранами. Взять из них почти нечего разве что светодиоды, моторчик вибровызова и экран. Всё остальное малопригодно для использования в конструкциях (если конечно вы не конструируете сотовый телефон). Дисплей от сименса хорош. Хорош в первую очередь свой доступностью и наличием даташита на контроллер стоящий в нем и изобилием готовых библиотек и документации на него же. Все библиотеки которые попались мне на глаза имели два недостатка: написаны на Си, нет русского шрифта. Так как я люблю изобретать велосипеды, на свет появилась библиотека для работы с данным дисплеем лишенная двух вышеперечисленных недостатков.


Данный дисплей я решил использовать как альтернативу популярным знакосинтезирующим дисплеям на базе контроллера HD44780. На экране убирается 14 на 8 букв русского алфавита или 17 на 8 букв латинского. Дисплей имеет разрешение 101 х 64 точки, каждая из которых либо горит либо нет, градации серого отсутствуют. Выводы дисплея пронумерованы следующим образом:

Паять выводы надо крайне осторожно. Где-то под ними расположен кристалл контроллера дисплея. Не думаю что ему бы понравился перегрев, всё-таки этот дисплей не для пайки. Ни какой обвязки за исключением одного конденсатора этому дисплею не надо. Я подключал этот дисплей к своей отладочной плате так:

С внешним миром контроллер дисплея общается посредством одностороннего SPI интерфейса, т.е. из дисплея ничего прочитать не получится, и это очень плохо (ниже объясню почему). В дисплее стоит (если верить интернетам) контроллер PCF8812 или какой то подобный ему. Контроллер мало на что способен, поэтому всякие штуки типа вывода текста и рисования графических примитивов придётся реализовывать программно. Но тут есть один маленький нюанс который портит всю малину. Как я писал выше — из дисплея нельзя ничего прочитать, можно только записать. Причем запись производится сразу по байту. Установить отдельной взятый пиксель дисплея нельзя! А что было в соседних пикселях мы не знаем поэтому рискуем затереть часть уже отрисованной картинки. Из сложившейся ситуации есть выход: выделить 808 байт под видеопамять. Тогда можно будет без труда изменять любой пиксель или считывать его состояние. После изменения содержимого видеопамяти просто записывать её всю в дисплей. Но к сожалению выделить почти 1кб для этих целей очень расточительно, и поэтому  идея с видеобуфером у меня отпала. Именно поэтому данная библиотека не содержит графических функций, только текстовый вывод. Да и с текстовым выводом пришлось не легко. Нарисовать в paint’е 33 русских буквы с разрешением 6 на 8 пикселей, а потом перенести это побитно в микропаскаль – аццкий труд. И это я еще не делал строчные буквы, а только заглавные. Буквы латинского алфавита и цифры я потырил из нарытого исходники на Си, рисовать их не пришлось. Цифры и латинские буквы меньше на один пиксель в ширину чем русские. Это связанно с тем что ни как я не мог изобразить некоторые русские буквы в разрешении 5х8. Вся библиотека крайне проста в эксплуатации.

1) Копируем все её процедуры в новый проект
2) Указываем к каким пинам подключен дисплей
3) Используем

В библиотеке есть такие процедуры:
InitPort() — настраивает  должным образом ноги контроллера к которым подключен дисплей.
INIT_LCD() — инициализирует дисплей. После инициализации, на экране появляется случайный мусор.
CLEAR_LCD() —  очистка дисплея от всего что в нем есть. Рекомендуется вызывать после инициализации.
LCD_GOTO (х, y) — устанавливает координаты для вывода текста. Аргумент х может принимать значения от от 0 до 100, y от 0 до 7
WriteText (‘текст’) — выводит строку в позицию заданную предыдущей процедурой. Если строка не убирается то происходит перенос на следующую строку ниже. Текст должен быть написан в нижнем регистре! Это важно.
LCD_RESET() — сбрасывает дисплей. Комментарии излишни.
SendToLcd (DataByte, dc) — отправляет в дисплей байт. Если dc=0 то байт будет передан как команда. Если dc=1 то как байт будет передан как данные.
LCD_INVERT() — Отображает пиксели в инвертированном виде.
LCD_NORMAL() — отображает пиксели в нормальном виде.
LCD_HIDE_ALL() — Выключает все пиксели на экране. Видеопамять дисплея не очищается. Что-бы увидеть картинку нужно вызвать любую из двух предыдущих процедур.
LCD_SHOW_ALL() — Зажигает все пиксели на экране. Видеопамять дисплея так же не изменяется.
LCD_POWER (mode) — управляет питанием дисплея. Если mode=0 — дисплей в режиме энергосбережения. В этом режиме дисплей способен принимать данные и команды. Когда эта процедура вызывается с mode=1, контроллер дисплея включает питание жк экрана.

Этих функций вполне достаточно для работы с текстовой информацией и управления дисплеем. Данная библиотека успешно прошла тестирование на дисплее от сименса А52. Дисплеи в С55 и А55 идентичны этому (как говорит народ на форумах). Если не заработает, пишите попробуем разобраться. Если кто хочет посмотреть на это дело в живую то я записал коротенький видеоролик демонстрирующий работу дисплея:

Библиотека способна работать практически со всеми контроллерами обладающими аппаратным SPI интерфейсом и достаточным объемом флеш памяти. При разработке библиотеки мне очень помогли следующие ссылки:

Работаем с LCD дисплеем Siemens C55/A55/A52
Экран LCD Nokia 3410

Саму библиотеку вместе с демонстрационным примером можно тут
Программа написана на микропаскале. Его скачать можно тут