Микросхема КР580ВВ79

3.2 КР580ВВ79 – программируемый контроллер клавиатуры и дисплея

Основные возможности микросхемы:

  • Одновременная работа с клавиатурой и индикатором
  • Режим сканирования контактной клавиатуры
  • Режим сканирования сенсорной клавиатуры
  • Режим стробируемого ввода
  • Буферная память на 8 символов
  • Режимы:

— блокировка одновременного нажатия
нескольких клавиш;

— независимое восприятие N клавиш.

  • Устранение дребезга контактов.
  • Микросхема может управлять:

— двумя цифровыми индикаторами по 8 и
16 цифр в строке;

— одним алфавитно-цифровым
индикатором  на 16 символов в строке

  • 16- байтное ОЗУ для хранения индицируемых знаков
  • Строка-индикатор может заполняться символами как слева
    направо, так и справа налево
  • Режимы работы задаются программно
  • Частота сканирования задается программно
  • По нажатию клавиши выдается прерывание.

Микросхема КР580ВВ79 – это универсальное программируемое
устройство ввода- вывода для сопряжения микропроцессора с клавиатурой и
индикаторным дисплеем.

УГО КP580BB79 приведено на рисунке 3.3.

На рисунке 3.4 представлена блок-схема программируемого интерфейса клавиатуры и дисплея КP580BB79.

Назначение каждого вывода описывается в таблице 3.2.

Одна часть микросхемы обеспечивает связь с клавиатурой,
которая может быть выполнена в виде 64-контактной клавишной матрицы либо в виде
набора сенсорных элементов. Клавиатура может быть выполнена также на основе
эффекта Холла или на основе изменения магнитной проницаемости ферритов – в этих
случаев применяется режим стробируемого ввода.

Возможны два основных варианта работа с клавиатурой:

  1. Запрещены (и считаются ошибочными) одновременные нажатия
    нескольких клавиш.
  2. N клавиш сканируются и воспринимаются независимо
    друг от друга.

Коды нажатых клавиш освобождаются от помех, связанных с
дребезгом контактов, и заносятся в 8-байтовый буфер, организованный по принципу
FIFO – “первым записан – первым прочитан”.
Нажатия клавиш приводят к выдаче сигнала прерывания, который должен быть
заведен в микропроцессор, использующий данную микросхему.

Другая часть микросхемы КР580ВВ79 обеспечивает работу в
режиме сканирования (временного мультиплексирования) индикатора на светодиодах,
жидких кристаллах или другого распространенного типа. Можно использовать как
цифровые, так и алфавитно-цифровые индикаторы либо простые лампочки.

Микросхема КР580ВВ79 снабжена ОЗУ 16х8 бит, которое можно
использовать также и как два ОЗУ 16х4 бита. Это ОЗУ, предназначенное для
хранения воспроизводимых на индикаторе символов, может загружаться и
опрашиваться программно – процессором.

Воспроизводимая строка символов может заполняться слева
направо, как в пишущей машинке, либо справа налево, как в калькуляторе. И
чтение, и запись дисплейного ОЗУ могут выполнять с автоматическим прекращением
адреса.

Рисунок 3.3 —  УГО КP580BB79

Рисунок 3.4 —  Блок-схема
программируемого интерфейса клавиатуры и дисплея
КР580ВВ79

Режимы ввода:

Ø  Сканирование контактной клавиатуры:

— 8х8 клавиш – в режиме внешней
дешифрации столбцов клавиатуры;

— 4х8 клавиш – в режиме внутренней
дешифрации столбцов клавиатуры;

Нажатие клавиши порождает 6-битовый код, задающий положение
клавиши в матрице (3 бита – номер столбца, 3 бита – номер строки). Координата
клавиши, а также состояние CNTL и SHIFT запоминаются в буфере типа FIFO. Данные автоматически очищаются от
дребезга контактов клавиатуры. При этом возможно блокирование одновременного
нажатия клавиш или же независимое восприятие N клавиш.

Ø  Сканирование матрицы сенсорных
элементов:

— 8х8 клавиш – в режиме внешней
дешифрации столбцов клавиатуры;

— 4х8 клавиш – в режиме внутренней
дешифрации столбцов клавиатуры;

Состояние клавишных ключей (разомкнутое или замкнутое)
запоминается в ОЗУ, к которому имеет доступ центральный процессор.

Ø  Стробируемый ввод:

данные
с линии  RL7..RL, стробируемые сигналом STB, заносятся в
буфер типа FIFO.

Режимы отображения информации:

Ø  8- или 16-символьные динамические
индикаторы, которые могут быть организованы либо как два 4-битовые, либо как
один 8-битовый.

1.6. .

:
, ,
(), ( ,
,
).
.
(. ) ,
.

5.

25

425

200300

( 10 ), , ,
,

,

— 0,75,5

50100

2070

— 2,545

2070

— 0,11,3

, , ,

,

20300

4,57,0

2050

70150

,

,
( 2550 ), ,

190220

120170

2540

,

( )
, ,
.
, 40 .

58079
.

,
.

.

,
.

58079
16 .
» »
, (
).
, .

DSPB0DSPB3 ( , D0D3 ) DSPA0DSPA3 ( , D4D7).

, DSP .
«».
00,
. CLR DSP .0.
(,
)
/ » «.
.

, .
, ,
.
, (
),
. . —

,
«» .
, ,
+8 (=07)

, ,
, .

, +4, +8, +0h
(=03).

IBM-
— «Centronics»
( LPT),
.

(), , ,
, -.

IBM PC- .
Centronix, 36
( -).
:


,
3BCh — 3BEh;


, 378h — 37Ah
( ) 278h — 27Ah ( ).


( ); BIOS, 0:408h(LPT1)
LPT4. ,
378h.

────────────────────────────────────────────────────────────────

378h — ,

堠 —

,

379h 堠 :

7 6 5
4 3 2 1 0

┌──┬──┬──┬──┬──┬─┬─┬─┐


│ │ │

│X│X│X│ :

└┬─┴┬─┴┬─┴┬─┴┬─┴─┴─┴─┘
─────

│ │ │

└─────────>
3: 0=

│ │ │
└────────────>
4: 0=

│ │
└───────────────>
5: 1= » «


└──────────────────>
6: 0=

└─────────────────────>
7: 0= ,

37Ah / :

7
6 5 4 3
2 1 0

┌─┬─┬─┬──┬──┬──┬──┬──┐

│X│X│X│ │
│ │ │
│ :

└─┴─┴─┴┬─┴┬─┴┬─┴┬─┴┬─┘
─────

│ │ │
│ └───>
0:

│ │ │
└──────> 1: 1=

│ │ │ ( MS-DOS

│ │ │ )

│ │
└─────────>
2: 1=


└────────────>
3: 1= (


)

└───────────────>
4: 1=

,
( , ,
). ,
( ),
(16 )
,
. ,
,
.
(),
( , ).

6.

SB1SB13

«0»»9″,
«A», «B», «»

()

SB14

«»

SB15

«»

SB16

«»

,
,
.

,
.

7.

DAT0DAT7

+

+

INS/D

+

IORC

+

IOWC

+

RESET

+

PCLK

+

IRQ

Turbo Pascal 7.0 MS-DOS 6.22 .

— .

. . (378h), (INS/D, IORC, IOWC, RESET, PCLK, IRQ)
(37Ah),
(379h).

8.
.

LPT

37Ah

378h

X

X

X

INS/D

IORC

IOWC

RESET

PCLK

DAT7

DAT6

DAT5

DAT4

DAT3

DAT2

DAT1

DAT0

7

6

5

4

3

2

1

7

6

5

4

3

2

1

X

X

X

1

1

1

1

1

1

( 07)

X

X

X

1

1

1

1

( )

X

X

X

1

1

1

1

1

( )

X

X

X

1

1

INT

X

X

X

1

1

1

1

1

1

1

()

X

X

X

1

1

X

X

X

()

X

X

X

1

1

1

1

1

1

1

1

X

X

X

1

1

1

1

1

1

1

X

X

X

1

1

X

X

X

1

1

1

. ; ?
.

,
.

A

B

C

D

E

F

G

H

Nh

1

1

1

60

2

1

1

1

1

1

DA

3

1

1

1

1

1

F2

4

1

1

1

1

66

5

1

1

1

1

1

B6

6

1

1

1

1

1

1

BE

7

1

1

1

E0

8

1

1

1

1

1

1

1

FE

9

1

1

1

1

1

1

F6

1

1

1

1

1

1

FC

A

1

1

1

1

1

1

EE

b

1

1

1

1

1

3E

E

1

1

1

1

1

9E

r

1

1

1

8C

,

b0

b1

b2

b3

b4

b5

b6

b7

Nh

«0»,
«8»

1

80

«1»,»9″

1

40

«2»,»»

1

20

«3»,»»

1

10

«4»,»»

1

8

«5»,»»

1

4

«6»,»»

1

2

«7»,»»

1

1

1.

580
— 58079. ( )

.

(
)
,

.

2-23 ,
.

10 ,
, , ,
.

58079
IBM PC.

, .
,
,
, ,
. ,
.

, ,
,
( )
, .
58079,
,
.

1. -,
. 8086/8088. ,
., . . , .: , 1987.

2.
. . .., , 1980.

3.
, .

{

58079

: ..}

program
KR580;

uses
crt,dos;

const
Recode: array of byte = ($01,$02,$04,$08,$10,$20,$40,$80,$03,$05,

$09,$0B,$12,$22,$42,$82);

{}

Code: array of integer = (1,2,3,3,3,4,4,5,6,6,0,0,0,0,0,0);

var
i,k:integer;

Display:array of integer;

tmp:byte;

OK : boolean;

label
NEW,AGAIN;

procedure
OutByte(portN,bte:byte);{ }

begin

case portN of

$378:
asm

mov al,bte

out $378,al

end;

$37A:
asm

mov al,bte

out $37A,al

end;

end(*case*);

Delay(10);

end;

function
InByte(portN:byte):byte;{ }

begin

case portN of

$378:
asm

in al,$378

end;

$379:
asm

in al,$379

end;

$37A:
asm

in al,$37A

end;

end(*case*);

asm

mov InByte,al

end;

Delay(10);

end;

procedure Init; { }

begin

OutByte($37A,$03); {a }

OutByte($37A,$19); { }

OutByte($378,$19);
{ }

end;

procedure Wait; { }

begin

repeat until InByte($379) 0;

end;

procedure
OutToDisplay(Symbol:integer); { }

{ }

const
Recode:array of byte =
($60,$da,$f2,$66,$b6,$be,$e0,$fe,$f6,$fc,$ee,$3e,$9c,$9e,$8c);

begin

OutByte($37A,$09);

OutByte($378,Recode);

end;

function
StatusWord:boolean;{ }

var
SW:byte;

begin

StatusWord := false;

OutByte($37A,$15);

SW := InByte($378);

if SW 0 then StatusWord := TRUE;

end;

procedure
ResetINT; {
INT}

begin

OutByte($37A,$19);

OutByte($378,$F0);

end;

procedure ResetDSPL;{ }

begin

OutByte($37A,$19);

OutByte($378,$D2);

end;

procedure
Bell;{ }

begin

Sound(1200);

Delay(1000);

NoSound;

end;

function
GetChar:byte; { }

begin

If not StatusWord then

begin

OutByte($37A,$19);

OutByte($378,$40);

OutByte($37A,$05);

GetChar := Inbyte($378);

if GetChar = 0 then

begin

OutByte($37A,$19);

OutByte($378,$41);

OutByte($37A,$05);

GetChar := Inbyte($378)+2;

end

else

begin

Bell;Bell;

WriteLN(‘ !!!’);

end;

ResetINT;

end;

begin

AGAIN:

Init;

k := 0;

repeat

begin

Wait;

tmp := GetChar;

i := 0;

repeat

inc(i);

until Recode = tmp;

inc(k);

case i of

1..13: begin

Display := i;

OutToDisplay(i);

end; {}

14: k:=16; {}

15: goto
AGAIN;{}

16: Bell; {}

end(*case*);

end;

until k=16;

for i:=0 to
16 do

if Display Code then OK :=
true; { }

if OK then Exec(‘proc.exe,»); { ,
}

goto AGAIN;

end.

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Электронная память
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: