Исследование контроллера клавиатуры-дисплея КР580ВВ79. Организация связи с оператором в обслуживаемых МК – системах, страница 10

Выполните программу и  сравните результаты ее выполнения с предыдущим примером.

ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ. Определите коды клавиш клавиатуры УМПК (см. рис. 25).

3.3. Изучение команд управления работой дисплея

3.3.1.Изучение команд записи и чтения памяти дисплея

Дисплей может работать в следующих режимах.

1) Ввод слева. В этом режиме каждой позиции на дисплее однозначно соответствует байт в памяти дисплея. Нулевой адрес памяти дисплея соответствует самой левой нулевой позиции дисплея, адрес 15 (7 – для восьмипозиционного дисплея) соответствует самой правой позиции дисплея. При переходе за 16 (8) позиций следующие символы будут опять вводиться слева с нулевой позиции, т.е. 17-й (9-й) символ займет крайнюю левую позицию.

2) Ввод справа. Этот способ ввода используется в калькуляторах. Первый вводимый символ заносится в крайнюю правую позицию. Следующие символы также заносятся в крайнюю правую позицию, но после того, как все символы на дисплее сдвинутся на одну позицию влево. Самый левый символ при этом теряется. Заметим, что здесь номера позиций на дисплее уже не соответствуют адресам памяти дисплея. Адрес памяти дисплея в этом случае соответствует порядковому номеру нажатой клавиши. Указание позиции, в которую должен быть введен символ при автоинкрементируемом вводе, может иметь непредсказуемый результат.

Автоинкрементирование (установка бита AI в командах «Запись/Чтение ОЗУ дисплея» на рис. 21, 22) в состоянии ввода слева означает, что следующий символ, поступающий из матрицы клавиш, будет размещен (считан) по адресу, на единицу большему, чем предыдущий. При отсутствии автоинкремента ввод будет произведен в ту же самую позицию. Использование автоинкремента при вводе слева не порождает непредсказуемых эффектов, даже если после ввода нескольких символов нужно ввести очередной символ не в следующую, а в произвольную позицию. Это обусловлено тем, что позиция на дисплее при вводе слева однозначно соответствует адресу памяти дисплея. При вводе справа с автоинкрементированием попытка ввести символ в фиксированную позицию будет иметь непредсказуемый результат.

Так как внешний дешифратор из BCD-кода в семисегментный код в схеме УМПК отсутствует, то вводимая информация должна поступать на дисплей после предварительной программной перекодировки. Программная модель семисегментного индикатора показана на рис. 26, а семисегментные коды цифр приведены в табл. 8.

 
 


Рис. 26. Программная модель семисегментного индикатора

Таблица 8

Семисегментные коды цифр

Символ (цифра)

Семисегментный код

«0»

3F

«1»

06

«2»

5B

«3»

4F

«4»

66

«5»

6D

«6»

7D

«7»

07

«8»

7F

«9»

6F

«A»

77

«B»

7C

«C»

39

«D»

5E

«E»

79

«F»

71

ЗАДАНИЕ. Введите в память УМПК программу, которая заносит в ячейки памяти дисплея нули (очистка дисплея).

000

FC

ANL P2,#0FCH

;

Адрес ККД

002

B8

FF

MOV R0,#0FFH

;

Режим «Команда» (А0=1)

004

23

90

MOV A,#90H

;

Запись команды «Запись

006

90

MOVX @R0, A

;

в ОЗУ дисплея»

007

C8

DEC R0

;

Режим «Данные» (А0=0)

008

23

00

MOV A,#00H

;

Очистка А

00A

BF

07

MOV R7,#07H

;

Загрузка счетчика

00C

90

LEB : MOVX @R0, A

;

Запись данных

00D

EF

0C

DJNZ R7, LEB

;

в ОЗУ дисплея ККД

00F

04

0F

STOP: JMP STOP

;

Останов