Данная страничка представляет собой описание выполнения задания по "Периферийным устройствам".
Получив задание: "Подключение датчиков к LPT-порту", мы с энтузиазмом принялись за дело. (Долго ли воткнуть пол десятка переключателей:-)) Как оказалось совсем не долго , но заставить комп их видеть и обрабатывать не удалось.
используя много численные ссылки мы обнаружили, что не всё так уж запущенно.LPT-порт используется для множества полезных вещей через него можно подключить принтер, видеокамеру, внешний CD-ROM, сканер и даже другой компьтер.
Используя LPT-порт можно считывать информацию с телефонных карточек или управлять различными устройствами.
Ниже можно пройти тот путь по которому мы долго и упорно шли сбивая в кровь мышечные кнопки.
Описание LPT порта Телефонные карточки Примеры программ Пример работы с LPT портом Примеры программирования
В конечном счете мы всё равно остались перед разъемом LPT порта,в который надо что-то воткнуть и потом это что-то считать.
Разведка показала какие контакты за что отвечают:
далее эвристическим методом мы определили что, как и куда:))
Переключателями в назначенном количестве (5 штук) соединили 25 контакт с 10,11,12,13,15.
Теперь рассмотрим события происходящие при замыкании контактов
При замыкание 25 контакта с 12 контактом бит №6 равный единице обнулится.
При замыкание 25 контакта с 13 контактом бит №5 равный единице обнулится.
При замыкание 25 контакта с 11 контактом бит №8 равный 0 станет единицей.
При замыкание 25 контакта с 10 контактом бит №7 равный 0 станет единицей.
При замыкание 25 контакта с 15 контактом бит №4 равный 0 станет единицей.
Далее располагается текст программы, которая отображает положение переключателей в графической форме.
program datchik;
uses graph, dos, crt; {объявление модулей, необходимых для работы программы}
var
regs:registers;
x, n,driverscreen,modescreen,i1,step:integer;
i:byte;
{объявление переменных необходимых для выполнения программы}
begin {начало основного блока}
DriverScreen:=Detect; {считывание показаний экрана}
InitGraph(DriverScreen,ModeScreen,'..\bgi');{инициализация графического режима
экрана и запоминание предыдущего состояния экрана}
step:=15;{переменной присвоено значение}
line(0,240,640,240);{рисуется линия-кардинат на экране}
moveto(0,240);{позецируем курсор на начало линии-кардинат}
repeat {начало цикла опроса состояния порта и вывода графически этой информации}
regs.Ah:=01;{регистру ah присваивается состояние 01(состояние порта
возвращается в это же регистр)}
intr($17, regs);{считывается прерывание от принтера по регистру ah}
With regs do begin {блок приоброзования десятичного числа
в двоичное представление}
for i:=0 to 15 do begin
x:=ah shr i;
n:=x and 1;
if (n=0) then {если бит состояния равен 0 то рисуется
два цикла точек образующих отклонение от линии кардинат
условно обозначающих 0}
begin
for i1:=0 to step do begin
putpixel(GetX+i1,GetY+i1,15);{рисование точек}
delay(50);{задержка при рисование позволяет сделать вывод
согласно графической информации}
end;
moveto(getx+i1,gety+i1);{позецирование курсора }
for i1:=0 to step do begin
putpixel(GetX+i1,GetY-i1,15);
delay(50);
end;
moveto(getx+i1,gety-i1);
end
else
begin
for i1:=0 to step do begin
putpixel(GetX+i1,GetY-i1,15);
delay(50);
end;
moveto(getx+i1,gety-i1);
for i1:=0 to step do begin
putpixel(GetX+i1,GetY+i1,15);
delay(50);
end;
moveto(getx+i1,gety+i1);
end;
if n=1 then
end;
delay(50);
end;
moveto(0,240);{позецирование курсора на начало кардинат}
until keypressed;{окончание цикла при нажатие любой клавиши}
CloseGraph;{закрытие графики и возвращение к начальным установкам}
end.{конец программы}
програма создана только для того что бы показать процесс работы и возможности LPT-порта
поэтому не оформлена и не нацелена для практической работы.Всё что вы увидете это полосочки в режиме MS-DOS.
Пример показан внизу(на нем имеется ввиду что кнопочки вы расположите над экраном:).Если нужно что-то более
оформленное и удобное пишите может помогу:)