MOVX @DPTR,A ; Гашение сегментов
DEC P1
MOV A,P1 ; Считывание порта 1
JNB P1.5,SYMB ; Проверка линий возврата
JNB P1.6,SYMB ; 0 соответствует нажатой клавише
JNB P1.7,SYMB
MOV KEY,#0
JMP NOSYMB
SYMB: MOV KEY,A ; Если хоть одна клавиша нажата, ее скан-код заносится
NOSYMB: DJNZ NUMB,NEXT ; в ячейку KEY(3Bh)
MOV NUMB,#8
MOV P1,#0F7H
NEXT: MOV A,#MAS ; Вычисление адреса символа
ADD A,NUMB
MOV R0,A
MOV A,@R0
MOVX @DPTR,A ; Вывод следующего знакоместа
POP PSW
POP DPL
POP DPH
POP 0
POP ACC
RETI
END
Программа пользователя может анализировать содержимое ячейки KEY и в случае нажатия на клавишу определять, какая клавиша нажата.
Сканкод : биты
0,1 – показывают, в какой строке нажата клавиша;
2,3,4 – не используются;
5,6,7, - показывают, в каком столбце нажата клавиша;
Для перевода из скан-кода в ASCII-код обычно пользуются таблицами, которые заносятся в ПЗУ. |