Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2012, 14:33   #1
oboldei
 
Регистрация: 30.01.2011
Сообщений: 3
По умолчанию Работа с LPT

Есть сенсорная клавиатура 16 клавиш. Подключается к LPT порту. Нужно после нажатия выводить звук до, ре, ми.... как я понял это частоты нот 262; //до 294; // ре Mi = 330; // ми.

Вопросы следующие:
Как отследить код нажатой клавиши? PS: keypressed не ловит эти клавиши.
Какой командой отправить код звука после нажатия на клавишу, например до(262)?
oboldei вне форума Ответить с цитированием
Старый 09.03.2012, 14:49   #2
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Как отследить код нажатой клавиши? PS: keypressed не ловит эти клавиши.
Может, KeyDown попробовать?

Цитата:
Какой командой отправить код звука после нажатия на клавишу, например до(262)?
Может в обработчике KeyDown написать что-то вроде
Код:
case Key of
	{код клавиши}: {играть ноту до};
	{код другой клавиши}: {играть ноту ре};
	....
end;

Последний раз редактировалось Вадим Мошев; 09.03.2012 в 14:52.
Вадим Мошев вне форума Ответить с цитированием
Старый 09.03.2012, 14:49   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
keypressed не ловит эти клавиши.
Верно. Придется написать ассемблерную вставку, обращающуюся к LPT порту $60 кажись, сканирующую с него информацию.
Поинтересуйся какой номер LPT порта и как работает команда in ассемблера
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.03.2012, 15:19   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Есть сенсорная клавиатура 16 клавиш. Подключается к LPT порту.
...
Как отследить код нажатой клавиши?
зависит от того, в каком виде это все приходит на LPT. А может там программный I2C на один из DATA, а? То-то же. Прежде всего, поднимаешь документацию на свою сенсорную клаву и читаешь, а если хошь чтобы и тут не телепатировали, то и в тему доку вкинешь и название оборудования не помешает.

Цитата:
Верно. Придется написать ассемблерную вставку, обращающуюся к LPT порту $60
без доков гадание на кофейной гуще ...ассемблера не надо


Цитата:
Какой командой отправить код звука после нажатия на клавишу
...а под какой вы средой и осью? Тема то в студентах, больше никаких данных.

midiOutShortMsg() можно использовать, если под Win.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 09.03.2012 в 15:24.
raxp вне форума Ответить с цитированием
Старый 09.03.2012, 19:25   #5
Defunate
Пользователь
 
Регистрация: 11.09.2010
Сообщений: 83
По умолчанию

ну там порты вообщето 888-890dec в выходе 24 разьёма,по 8 бит на каждый порт,а для клавы будут использоваться 888-889

Последний раз редактировалось Defunate; 09.03.2012 в 19:26. Причина: не правильно
Defunate вне форума Ответить с цитированием
Старый 09.03.2012, 19:50   #6
oboldei
 
Регистрация: 30.01.2011
Сообщений: 3
По умолчанию

Приложил всю информацию что есть... Есть схема, есть теоретические сведения. Но не одного примера нет(( Кто в теме. Исходя из документации, хотя бы простейшие примеры напишите на Pascal. Особенно интересен вопрос как же отловить эти злосчастные клавиши...
Изображения
Тип файла: jpg Сеннсорная_клава.jpg (77.1 Кб, 117 просмотров)
Вложения
Тип файла: doc LPT-порт-2011.doc (509.5 Кб, 12 просмотров)
oboldei вне форума Ответить с цитированием
Старый 09.03.2012, 21:46   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

..что могу сказать по данной выдержке:
Цитата:
Электронная схема пересылает импульс стробирования от порта принтера на сенсорную площадку и одновременно он попадает на вход сброса в ноль «триггера чтения», который фиксирует нажатие клавиши.
не соответствует схеме:


Как я не присматривался, но так и не увидел, каким образом сигнал строба с принтера попадает на клавиатуру . Вижу только ее соединение с функциональными входами 0...15 (ВХОДАМИ!) мультиплексора КП1, устанавливаемыми заданием адреса А с весами 1,2,4,8. Далее с выхода мультиплексора КП1 сигнал поступает на один из входов внутренней схемы 2ИЛИ-НЕ одновибратора АГ1, который стробируется одновременно с мультиплексором низким уровнем (на inv Е). Прилагаю даташиты полных функциональных аналогов мультиплексора и одновибратора (хотя на самом деле эти отечественные являются аналогами), чтобы вы ознакомились:




Ладно, оставим это на совести составителей лабораторной и допустим, что каким то чудесным образом с сенсорной клавиатуры к нам уже поступает сигнал. Тогда нам нужно задавать адрес на регистре DATA D0..D3 (pin.2...5, бит 0...3), формировать строб на регистре контроля С0 (pin.1, бит 0) и считывать данные с регистра статуса S3 (pin.15, бит 3).

Базовый адрес регистра DATA = $378
Базовый адрес регистра STATUS = $379
Базовый адрес регистра CONTROL = $37A

Цитата:
хотя бы простейшие примеры напишите на Pascal
DELPHI

Как считать:
Код:
function Inp32(PortAdr: word): byte; stdcall; external 'inpout32.dll';
Как записать:
Код:
function Out32(PortAdr: word; Data: byte): byte; stdcall; external 'inpout32.dll';
PASCAL

Код:
const BA = $378; //базовый адрес LPT
       BR = BA+1; //регистр статуса
       BU = BA+2; //регистр контроля $37A

Function getbit(data,num:byte): boolean;
 begin
  result:= data and num = num
 end;

function FInByte(Index:Word):Byte;
begin
 asm
  mov dx,Index
  in al,dx
  mov Result,al
 end;
end;

function FInWord(Index:Word):Word;
begin
 asm
  mov dx,Index
  in ax,dx
  mov Result,ax
 end;
end;

function FInLong(Index:Word):LongWord;
begin
 asm
  mov dx,Index
  in eax,dx
  mov Result,eax
 end;
end;

procedure FOutByte(Index:Word;Value:Byte);
begin
 asm
  mov dx,index
  mov al,Value
  out dx,al
 end;
end;

procedure FOutWord(Index:Word;Value:Word);
begin
 asm
  mov dx,Index
  mov ax,Value
  out dx,ax
 end;
end;

procedure FOutLong(Index:Word;Value:LongWord);
begin
 asm
  mov dx,Index
  mov eax,Value
  out dx,eax
 end;
end;

//////////////////////////

 // регистр обмена-
 function GetDataLPT: byte;
 begin
  result:= FInByte(BA)
 end;

 procedure SetDataLPT(data: byte);
 begin
  FOutByte(BA,data)
 end;

 // регистр статуса-
 function GetStatusLPT: byte;
 begin
  result:= FInByte(BR)
 end;

 procedure SetStatusLPT(data: byte);
 begin
  FOutByte(BR,data)
 end;

 // регистр контроля-
 function GetControlLPT: byte;
 begin
  result:= FInByte(BU)
 end;

 procedure SetControlLPT(data: byte);
 begin
  FOutByte(BU,data)
 end;
C битами то разберетесь?
Вложения
Тип файла: pdf SN74121N.pdf (737.6 Кб, 8 просмотров)
Тип файла: pdf sn74150n.pdf (1.13 Мб, 14 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 09.03.2012 в 21:50.
raxp вне форума Ответить с цитированием
Старый 09.03.2012, 22:50   #8
oboldei
 
Регистрация: 30.01.2011
Сообщений: 3
По умолчанию

raxp, спасибо огромное! Постараюсь разобраться.
oboldei вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с LPT Roman91 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 03.03.2011 23:17
Работа с LPT xyz010 Общие вопросы C/C++ 2 02.04.2010 01:01
Работа с LPT. Levsha100 Помощь студентам 2 13.09.2008 21:27
Работа с LPT портом chingiz Паскаль, Turbo Pascal, PascalABC.NET 1 17.11.2007 21:21
Работа с LPT NorthNoise Общие вопросы Delphi 2 26.06.2007 04:37