ReadMe
Манифест
Электроника
Программное обеспечение:
ЖКИ
VLSI
Разные мелочи
Интерфейсы накопителей
Файловые системы
Элементы пользовательского интерфейса
Модули режимов
Координаторы
Отладочный координатор
Пользовательский интерфейс
Фотографии
 
==> Orfey2

Програмная часть: LCD Nokia 3310 / PCD8544

Жидкокристаллический дисплей, куплен как запчасть для сотового телефона Nokia 3310, очевидно, не оригинальный. У него несколько хуже контрастность, чем у оригинала, нет логотипа Nokia, выводы явно не позолочены - скорее это латунь, но в остальном он вполне работоспособен. Содержит встроенный контроллер, может быть совместимый, а может быть оригинальный Philips PCD8544.

Файл модуля управления имеет название LCD.asm.inc, также необходимы файлы LCD.font-bmp.inc (битовая карта шрифта) и LCD.font-index.inc (карта смещений дескрипторов символов). Последние два файла генерируются автоматически программой charedit.

Инициализация

Выполняется согласно документации и рекомендаций в Интернете процедурой lcd_Init. Никаких параметров (вроде контрастности или яркости) не предусмотрено.

Шрифт

Так как размер экранчика маленький, но все точки строго идентичны и явно выраженных знакомест дисплей не имеет, я решил использовать фонт переменной ширины высотой 8 пикселей. В памяти программ процессора содержится описание единственного шрифта в виде битовой карты и массива смещений битовых карт отдельных символов. По разнице смещений вычисляется ширина символа при его выводе. Между символами вставляется промежуток в два пикселя. Последовательность знаков в описании шрифта ближе всего к КОИ-8, процедура вывода символа ожидает на входе код символа именно в кодировке КОИ-8. Алгоритм процедуры вывода знака гарантированно сходящийся, поэтому символ, не включенный в шрифт, не приведёт к зависанию кода.

Какие либо механизмы скроллинга и сохранения/восстановления изображения отсутствуют (т.е. код управления не поддерживает буфер кадра, все данные сразу передаются в память дисплея и нигде более не сохраняются).

Возможен вывод текста в инверсии: прозрачные точки на черном фоне.

Клавиатура

Так как клавиатура использует тот же сигнал !CS что и дисплей, процедуры управления ею также находятся в модуле LCD.asm.inc. При разработке модуля предполагалось три возможных режима использования клавиатуры: 1) кратковременное нажатие одной клавиши, на которое нужно отреагировать быстро, 2) удержание нажатой клавиши, 3) удержание комбинации из нескольких клавиш.

Состояние клавиш анализируется по запросу, анализ требует периодического обращения к модулю. Состояние клавиатуры считается определенным в следующих случаях:

  • Все клавиши отпущены;
  • Какая либо комбинация клавиш была нажата и сразу отпущена;
  • Какая либо комбинация клавиш нажата длительное время.

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

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

Плейер не имеет функции блокировки клавиатуры - программно ввести какую нибудь комбинацию или выключатель для этого не сложно, но на прежних плейерах я ими никогда не пользовался - так что к чему сложности ? (Пожалуй, изредка пользовался на DMusic'е - там были уж слишком крупные кнопки, нажимались от любого неосторожного движения).

Подсветка

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

Владимир