Здравствуйте!
Подскажите пожалуйсто как можно считать данные с клавиатуры?
В интернете на сайтах преставленна одна и таже статья, в которой приводится пример.. Но недостаток этого в следующем - для чтения исползуется функция Getatkbd() - которая ЖДЕТ нажати кнопки и возвращает значение. Не устраивает именно то что она ждет - просто программа зависает до наатия кнопки.. Есть какие то альтернативные способы?
Спасибо!
Клавиатура PS\2
Сообщений 1 страница 9 из 9
Поделиться12013-08-26 13:11:23
Поделиться22013-08-26 14:52:20
Извиняюсь за лишнюю тему..
Нашел два способа решения проблемы (если это можно так назвать):
1. Функция GETATKBDRAW() - возвращает чистое не обработанное значение с клавиатуры (без ожидания нажатия и без таблицы данных клавиатуры)
http://avrhelp.mcselec.com/index.html?getatkbdraw.htm
2. В это чуть чуть не понял в переводе - но можно как то сбежать от ожидания функции Getatkbd() установив Err=1. Не понятно что за чем и как.. Может кто поможет разобраться?
Вот оригинальный текст: The Getatkbd function will wait for a pressed key. When you want to escape from the waiting loop you can set the ERR bit from an interrupt routine for example.
http://avrhelp.mcselec.com/index.html?getatkbd.htm
Поделиться42013-08-26 15:16:55
а чем отличаются ваши первая и третья ссылка от моей?
Я просто попросил разобраться с непонятной строчкой
The Getatkbd function will wait for a pressed key. When you want to escape from the waiting loop you can set the ERR bit from an interrupt routine for example.
Отредактировано dimaib (2013-08-26 15:17:23)
Поделиться52013-08-26 15:54:58
Попробуйте перед опросом клавиатуры запускать таймер на нужное время ожидания ответа клавиатуры.
В прерывании ставьте Err=1
Перевод:
Getatkbd функция будет ждать нажатия клавиши. Если вы хотите вырваться из цикла ожидания вы можете установить бит Err например от прерывания.
Отредактировано sasha_1973 (2013-08-26 15:56:37)
Поделиться62013-08-26 16:00:01
не получается - пробовал уже..
Поделиться72013-08-26 16:07:53
а как вы себе представляете алгоритм работы функции по считыванию значение клавиатуры?
GetatKBD - ожидает прихода клавиши, пока она не появится будет висеть
GetatkbdRAW - будет всегда 0, пока не придет кнопка (ожидания нет)
так что надо ещё?
Поделиться82013-08-26 16:08:58
Там ещё рекомендуют посмотреть пример в файлах примеров "GETATKBD.BAS".
Поделиться92013-08-26 22:56:17
О! Как кстати. Тоже вожусь с клавиатурой. За основу брал пример баскома getatkbd_int.bas
Из обработчика прерывания от клавы убрал лишний асм. Вывод в ком порт тоже. В итоге в любой момент времени имеем код нажатой клавиши.
Заморачиваться с набором в строку(как в примере в буфер) не стал, тк потребовалось отлавливать нажатие конкретной кнопки без подтверждения Enter'ом.
Единственный ньюанс выявил. При работе клавиатуры со вторым внешним прерыванием наблюдаются зависания МК. В более новой версии бейсика пока еще не пробовал.