Для IP 3.144.17.45 доступно:
Главная страница

Новости сайта

Об авторе

Схемы

Статьи

Микроэлектроника

Микросхемы

Linux

Гостевая книга

Письмо админу

Реклама


LCD (ЖКИ). Часть 5. Программирование.

В предыдущей статье я рассказал о командах управления изображением и алгоритмы передачи в модуль команд и данных. Теперь попробуем посылать данные в модуль через LPT порт средствами языка Turbo C и gcc (в Linux системах).

Думаю, не лишним будет напомнить, что у порта LPT есть 25 выводов. 1 - стробирование, 8 - шина данных (выводы 2-9), управляющие входы (выводы 10-13), управляющие выходы (выводы 14-17) и земля (выводы 18-25). Мы будем использовать шину данных и выводы управления. Шина данных находится по адресу 378H (замечание: здесь и далее адреса для стандартного первого порта LPT), а выводы управления по адресу 37AH.

Как управлять шиной данных я долго рассказывать не буду (кому нужно, идём сюда и учимся. Из выводов управления я использовал 16-й (для E) и 17-й (для RS). Если вы решили использовать 1-й и 14-й выводы, то вам нужно будет изменять программу (чуть-чуть так :) ) только изменить данные, посылаемые в порт 37AH.

Первым делом напишем функцию для управления ножкой 17 для выбора регистра.

rs (int sw)
 {
 if (sw==1) outportb (0x37A,0);
 else outportb(0x37A,10);
 return;
 }

Эта функция управляет выводом 17. Если мы обращаемся в функции с переменной 1 ( rs (1); ), то в порт 37AH идёт число 0 и на выводе появляется "1". То есть мы посылаем данные. Если обращаемся строкой rs (0);, то мы посылаем команду.

Аналогично и с выводом 16 для стробирования.

e (int sw)
 {
 if (sw==1) outportb (0x37A,255);
 else outportb(0x37A,5);
 return;
 }

Тут нужно быть осторожным. Если мы посылаем данные, то rs должен остаться в положении "1". То есть E не должно повлиять на RS. Когда мы обращаемся к функции через строку e (1); то только E будет иметь уравень "1", а RS останется в "0", а когда через строку e (0); то E и RS будут "1", то есть мы посылаем данные.
***Замечание: все данные, посылаемые в порт подобраны методом научного тыка. Не повторяйте возможной ошибки автора, прочтите соответсвующую документацию.

Далее нам нужна универсальная функция, чтобы отсылать на LCD команды или данные.

lcd (int sid, int dat)
 {
 if (sid==0) rs (0);
 else rs(1);
 outportb(0x378,dat);
 if (sid==0) e (1);
 else e (0);
 delay (150);
 outportb(0x37A,10);
 outportb(0x378,255);
 return;
 }

Итак, функция отправляет число dat в LCD. sid обозначает, что это за число ("0" - команда, "1" - данные). Функция delay () обозначает паузу. Для быстрых процессоров нужно ставить паузу побольше, так как контроллер модуля работает на частоте во много раз ниже, чем наши компьютеры. Найдите оптимальное значение сами. У меня минимальная пауза получалась при delay (40) на процессоре Pentium 166 MHz. На P-3 600 MHz уже delay (350).

Теперь приступим к самой программе. То есть к функции main (). Попробуем инициализировать модуль, поставить режим двух строк, поставить курсор в виде _ и напечатать на экране цифры 1, 2, 3, 4, 5. Так выглядит вся программа (все описанные выше функции объединены в одну):

#include <dos.h>
#include <conio.h>
main ()
 {
 lcd (0,0x30);
 lcd (0,0x38);
 lcd (0,0xD);
 lcd (1,0x31);
 lcd (1,0x32);
 lcd (1,0x33);
 lcd (1,0x34);
 lcd (1,0x35);
 }

lcd (int sid, int dat)
 {
 if (sid==0) outportb(0x37A,10);
 else outportb (0x37A,0);
 outportb(0x378,dat);
 if (sid==0) outportb (0x37A,255);
 else e outportb(0x37A,5);
 delay (150);
 outportb(0x37A,10);
 outportb(0x378,255);
 return;
 }

В итоге на дисплее должно появиться 12345. То есть мы послали 3 команды и 5 чисел. Если не появилось или при компиляции получились ошибки, то исправьте ошибки. Можно скачать готовый примерчик (lcd3.exe) и исходник на Turbo C отсюда. (3 Kb).

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

Продолжение.

К списку статей

ilus

Copyright. 2002-2024 Автор - Deryabin Ilya