Изучение принципов построения технических характеристик и параметров клавиатуры ПЭВМ

Страницы работы

5 страниц (Word-файл)

Содержание работы

Лабораторная работа №1

Цель работы: «Изучение принципов построения технических характеристик и параметров клавиатуры ПЭВМ»

Краткая теория

Порт 64H используется для записи команд и данных, а так же для чтения состояния клавиатуры. В него пересылаются коды команд и их операнды. Ниже приведены команды клавиатуры:

0ffh – сброс клавиатуры и запуск внутренней диагностики.

0feh – сброс последнего обмена.

0fdh – 0f7h – нет операций.

0f6h – установить стандартные клавиатуры и продолжить сканирование.

0f5h – установить стандартные клавиатуры и запретить сканирование.

0f4h – восстановить сканирование. МП8048 посылает «АСК», очищает внутренний буфер и начинает сканирование.

0f3h – установить скорость нажатия на клавиши и времена промежутков между нажатиями. Сначала нужно послать 0f3h, потом – байт данных:

0-4: установка скорости нажатий.

далее приводится таблица соответствия данных в битах 0-4 и скорости работы клавиатуры (в нажатиях в секунду):

Данные

Скорость

Данные

Скорость

0

30

0ah

10

1

26.7

0dh

9.2

2

24.0

10h

7.5

4

20

14h

5

8

15

1fh

2

5-6: установка задержки перед перевым нажатием

00-250мс, 01-500мс, 10-750мс, 11-1000мс

7-всегда 0

0f2h-0efh – нет операций.

0edh – переключить световые индикаторы. Сначало посылается 0edh, затем байт данных:

0:1 – включить scrolllock.

0:2 – включить numlock.

0:3 – включить сapslock.

биты 3-7 не используются.

Осциллограммы сигналов:

1) P (Для всех осциллограмм параметры: 0,1 мкс/дел, 1В/дел):

2) L:

3) K:

4) M:

Значения скорости нажатия в секунду и задержек перед первым нажатием:

1)  Теоретические значения: 2 симв./сек и 250 мсек

Практические значения:

2)  Теоретические значения: 7.5 симв./сек и 500 мсек

Практические значения:

3)  Теоретические значения: 26.7 симв./сек и 26.7 симв./сек

Практические значения:

Таблица скан и ASCII – кодов исследуемых клавиш:

Скан - кодов

ASCII – кодов

P

25(00011001)

112

L

38(00100110)

108

K

37(00100101)

107

M

50(00110010)

109

Листинг программной части

#include <stdio.h>

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <dos.h>

void Repeat(), Waiting(), Indicate(), Scan();

void Putmenu(char *title,char *menus[],int quantity)

{

clrscr();

printf("\n\n\n");

printf("\t\t\t   %s\n\n",title);

int i=0;

while(i<quantity)     {printf("\t\t\t %d %s  \n",i+1,menus[i]);i++;}

printf("\n\t\t\t Ваш выбор  ");

}

void main(){

int choice;

char *buff;

char *title={"Управление клавиатурой"};

char *menu[5]={"Установка частоты повтора","Установка времени задержки"

,"Управление индикаторами","Считать скан-код и ASСII-код клавиши","Выход"};

begin:

Putmenu(title,menu,5);

cin>>buff;

choice=atoi(buff);

if(choice==1) Repeat();

if(choice==2) Waiting();

if(choice==3) Indicate();

if(choice==4) Scan();

if(choice==5) exit(1);

goto begin;

}

void Waiting()

{

int choice;

char *buff;

while(1){

clrscr();

gotoxy(2,10);

printf("Выберите задержку перед повтором символов:\n 1-250 мсек\n"

" 2-500 мсек\n 3-750 мсек\n 4-1000 мсек\n"

" 5-выход\n");

cin>>buff;

choice=atoi(buff);

if(choice==1){ asm{

mov al,0xF3

out 0x60,al

mov al,00000000b

out 0x60,al

}}

if(choice==2){ asm{

mov al,0xF3

out 0x60,al

mov al,01000000b

out 0x60,al

}}

if(choice==3){ asm{

mov al,0xF3

out 0x60,al

mov al,00100000b

out 0x60,al

}}

if(choice==4){ asm{

mov al,0xF3

out 0x60,al

mov al,01100000b

out 0x60,al

}}

if(choice==5) return;

}

}

void Indicate()

{

int choice;

clrscr();

while(1){

gotoxy(2,10); printf("Что зажечь?\n");

gotoxy(2,11);printf("(нажмите нужную цифру(1-ScrollLock,2-NumLock,3-CapsLock,4-выход))");

choice=getch()-48;

if(choice==1){ asm{

mov al,0xED

out 0x60,al

mov al,00000001b

out 0x60,al

}}

if(choice==2){ asm{

mov al,0xED

out 0x60,al

mov al,00000010b

out 0x60,al

}}

if(choice==3){ asm{

mov al,0xED

out 0x60,al

mov al,00000100b

out 0x60,al

}}

if(choice==4) return;

}

}

void Repeat()

{

int choice;

char *buff;

while(1){

clrscr();

gotoxy(2,10);

printf("Выберите частоту повтора символов:\n 1-2 симв./сек\n"

" 2-7.5 симв./сек\n 3-20 симв./сек\n 4-26.7 симв./сек\n"

" 5-выход\n");

cin>>buff;

choice = atoi(buff);

if(choice==1){ asm{

mov al,0xF3

out 0x60,al

mov al,0x1F

out 0x60,al

}}

if(choice==2){ asm{

mov al,0xF3

out 0x60,al

mov al,0x10

out 0x60,al

}}

if(choice==3){ asm{

mov al,0xF3

out 0x60,al

mov al,0x4

out 0x60,al

}}

if(choice==4){ asm{

mov al,0xF3

out 0x60,al

mov al,0x1

out 0x60,al

}}

if(choice==5) return;

}

}

void Scan()

{

union REGS inregs, outregs;

inregs.h.ah=0x00;

clrscr();

char temp;

do{

int86(0x16, &inregs, &outregs);

cout<<"ASСII - code :"<<(int)outregs.h.al<<endl;

cout<<"SCAN - code :"<<(int)outregs.h.ah<<"(";

for(int i=0, mask=128; i<8; i++){

if(mask&(int)outregs.h.ah)     cout<<"1"; else       cout<<"0";

mask>>=1;

}

cout<<")"<<endl;

}while((int)outregs.h.al!=27);

}

Вывод: В результате проделанной работы были освоены принципы построения технических характеристик и параметров клавиатуры. Был проведен анализ ASCII и scan – кодов клавиатуры, их теоретического и практического значения. Разница между стандартом и полученными значениями объясняется использованием неодинаковых контролеров в клавиатурах. И между тем формат формируемых данных совпадает со стандартным.

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
84 Kb
Скачали:
0