Читайте также:
|
|
unsigned char Get_Scan_Code(void)
{
// получить скан-код нажатой клавиши
// используется встроенный ассемблер
//клавиша нажата?
_asm
{
mov ah,01h;функция Olh - проверка на нажатие клавиш
int 16h;вызвать прерывание
jz empty;нет нажатых клавиш — выходим
mov ah,00h;функция 0 - получить скан-код
int 16h;вызвать прерывание
mov al,ah;результат поместить в AL
xor ah,ah;обнуляем АН
jmp done;в AX возвращается значение "все в порядке"
empty:
xor ax,ax;очистить AX
done:
} // конец ассемблерного блока
} // конец функции
Мы опять используем встроенный ассемблер. Можно, было, конечно, использовать функцию BIOS через вызов _int86() в Си, но на встроенном ассемблере это выглядит намного круче.
Получение ASCII-кодов с клавиатуры
Давайте теперь посмотрим, как мы можем получить ASCII-символ, введенный с клавиатуры. Это может быть полезно, когда игрок вводит свое имя и нам нужны ASCII-коды. Мы можем получить скан-коды и транслировать их в ASCII, но к чему такие сложности, если сразу можно прочитать ASCII-коды?
Листинг 3.6 показывает функцию, которую мы будем часто использовать, работая с клавиатурой. Эта программа опрашивает клавиши и определяет их нажатие. Если символ введен, то функция возвращает его ASCII-код, в противном случае возвращается 0.
Дата добавления: 2015-07-12; просмотров: 96 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Bios INT 16h | | | Листинг 3.7. Демонстрационная программа работы с клавиатурой (KEY.C). |