Введение:
ЖКИ модули символьного (алфавитно-цифрового) типа обычно управляются микроконтроллером. Однако иногда возникает необходимость управлять данными модулями непосредственно персональным компьютером. Такое решение позволит быстро проверить работоспособность модуля, продемонстрировать его работу и промоделировать функции при минимальных затратах на разработку. В данном руководстве приведены рекомендации по управлению символьными ЖКИ модулями через принтерный порт компьютера с минимальными внешними аппаратными средствами.
Существует несколько вариантов исполнений принтерных портов в компьютерах:
- SPP (стандартный параллельный порт)
- EPP (улучшенный параллельный порт)
- ECP (порт с расширенными возможностями)
Для достижения наибольшей универсальности данные рекомендации базируются на основе наиболее старом стандарте принтерного порта - SPP.
Рисунок 1 — Расположение выводов принтерного порта компьютера
Рис. 1 иллюстрирует расположение выводов принтерного порта и регистра, который управляет каждым выводом. На рисунке изображена розетка, которая установлена на персональном компьютере. Для обеспечения совместимости со всеми принтерными портами, используемых в настоящее время в персональных компьютерах, используются только совместимые выходы. Модуль ЖКИ генерирует флаг «занят», который может считываться для управления передачей данных и командами записи. Однако, временные диаграммы передачи данных и команд известны и, поэтому, могут использоваться программным обеспечением для управления ЖКИ. Параллельный порт имеет 12 буферизованных выходов с ТТЛ - уровнями, которые устанавливаются под управлением команд вывода процессора. Порт также имеет входные выводы, но они не используются в данном примере.
Описание аппаратных средств:
Предлагаемая схема очень проста. Линии дисплея, данных и управления соединены с линиями принтерного порта как показано в табл. 1 и на схеме (рис.2). Линия «чтение/запись» (RW) устанавливается к низкому уровню для перевода дисплея в режим «запись». Линии разрешения (E) и выбора регистра (RS) соединены с двумя управляющими линиями параллельного порта. Большинство параллельных портов имеют подтягивающие к плюсу резисторы на этих линиях, но не всегда. Для универсальности необходимо установить на этих линиях резисторы номиналом 10 кОм, второй вывод которых необходимо подключить к Vdd. Управление контрастностью осуществляется переменным сопротивлением 10 кОм. Источник постоянного тока для питания ЖКИ при наличии подсветки должен быть внешним.
ЖКИ обладает очень малым энергопотреблением: не более 5 мА. Выходы параллельного порта обладают нагрузочной способностью 10мА. Таким образом, одна линия способна запитать ЖКИ. Однако, такое решение недопустимо для питания подсветки, т.к. ее потребление составляет 50… 300 мА. Одна из управляющих линий может использоваться для этой цели, как показано на рис.2. Дополнительным преимуществом такого решения является возможность выключения питания под управлением программного обеспечения. Установка лог. 1 на этой линии включает дисплей, а лог. 0 отключает.
Тип кабеля, который используется для подключения ЖКИ к параллельному порту, будет определять его максимально возможную длину. Например, ленточный кабель может использоваться при длине не более 3’. Экранированный кабель с витыми парами может использоваться при длине до 50’. Самым быстрым и самым экономичным способом выбора экранированного кабеля с витыми парами является использование стандартного принтерного кабеля желаемой длины. В этом случае имеются все необходимые проводные связи с ЖКИ.
Программное обеспечение:
Самые современные компьютеры поддерживают 3 параллельных порта с начальными адресами 278/378/3BC. Все значения указаны в шестнадцатеричном коде. Как правило, только один порт физически установлен, а его начальный адрес - 378 соответствует порту LPT1. Инструкция вывода по стартовому адресу порта (278/378/3BC) устанавливает данные для ЖКИ как показано ниже.
Разряд
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Вывод |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
ЖКИ |
D7 |
D6 |
D5 |
D4
|
D3 |
D2 |
D1 |
D0 |
Инструкция вывода в порт по стартовому адресу + 2 (27A/37A/3BE) устанавливает младшие четыре разряда шины данных для управления ЖКИ. Только два из этих сигналов необходимы для управления ЖКИ модулями. Исключением является 40 символьный индикатор (4 строки). Этот модуль имеет два контроллера и дополнительный вход разрешения. Вывод С1 порта может использоваться для формирования второго разрешающего сигнала для модулей 40х4. Соответствие выводов порта и ЖКИ представлено ниже:
Разряд |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Вывод |
- |
- |
- |
-
|
17 |
16 |
14 |
1 |
ЖКИ |
|
|
|
|
RS |
|
E2* |
E |
*- только для модулей 40x4
Пример программы:
Код программы написан на языке Microsoft C и отображает сообщения на двухстрочном 16 символьном модуле ЖКИ. Он может использоваться как основа для работы с модулями, имеющими другую конфигурацию отображающего окна. Всего 80 символов записывается для отображения, что является максимальным значением для любого символьного ЖКИ с одним контроллером. Таким образом, эта программа будет работать с 1, 2 или 4-строчными индикаторами, при этом, на 4-строчном индикаторе будут отображаться только две линии. Более сложный способ записи символов состоит в использовании команды SET DD RAMADDRESS для записи каждой строки. Проверьте в документации на используемый индикатор адрес DD RAM и количество символов в строке.
Программа сначала выполняет инициализацию дисплея, а затем отправляет данные на две строки. При этом на экране будет отображено следующее сообщение:
/* Sample Software to display a message on a 16 x2 character LCD module
/* from a parallel port of a PC
#include
#include
#include
#define PORTADDRESS 0x378 /*Enter port address here */
#define DATA PORTADDRESS+0 /*LCD data port */
#define CONTROL PORTADDRESS+2 /*LCD control port */
void main (void)
{
/* Total of 40 characters including spaces in each line of string */
char string[] = {”>> HANTRONIX << "
"ABC abc 123,!@$? "};
char init[10];
int count;
int len;
init[0] = 0x0F; /* Initialize display */
init[1] = 0x01; /* Clear display */
init[2] = 0x38; /* Dual line 8 bits */
_out(CONTROL, _inp(CONTROL) & 0xDF); /* Reset control port */
_out(CONTROL, _inp(CONTROL) | 0x08); /*Set RS */
/* Initialization routine */
for (count = 0; count <= 2; count++)
{
_out(DATA, init[count]);
_out(CONTROL,_inp(CONTROL) | 0x01; /*Set Enable */
delay(20);
_out(CONTROL,_inp(CONTROL) & 0xFE; /*Reset Enable */
delay(20);
}
_out(CONTROL, _inp(CONTROL) & 0xF7);/*Reset RS */
/* Output the message */
len = strlen(string);
for (count = 0; count < len; count++)
{
_out(DATA, string[count]);
_out(CONTROL,_inp(CONTROL) | 0x01; /*Set Enable */
delay(2);
_out(CONTROL,_inp(CONTROL) & 0xFE); /*Reset Enable */
delay(2);
}
}
Скачать программу
|