Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

курсач бегущая строка / программа зе ласт

.docx
Скачиваний:
48
Добавлен:
30.05.2015
Размер:
24.35 Кб
Скачать

метка

мнемокод

комментарий

ORG 0h

Начало

MVI A, 89h

Инициализация портов

OUT 13h

Порт А выход, В – выход, С0-С3 вход, С4-С7 вход

SCAN

MVI B, 8h

Счетчик количества символов

MVI C,1h

Счетчик номера индикатора (номера строки) регистр С, присваиваем значение 1

LXI D, 0800

SCAN1

MOV A,C

Программа опроса клавиатуры

OUT 10h

Посылаем номер индикатора (строки) в порт A

IN 12h

Считываем в аккумулятор данные из порта С

ANI 1F

Операция «И». Из поступившего в аккумулятор символа значение имеют младшие 5 разрядов

MOV D, A

В регистре D храним информацию что было получено из порта С

CMP 1F

Вычитание числа 1F из значения аккумулятора (если кнопка не нажата, в аккумуляторе значение 1F)

JNZ IDEN

Если разница не равна нулю – кнопка нажата, переход к идентификации символа

MOV А,С

Если кнопка не нажата: сдвиг влево номера индикатора

RAL

MOV С,А

MOV А,С

CPI 80h

Проверка: это номер последнего индикатора?

JNZ L1

Если нет - переход к метке L1

MVI C, 1h

Если да – номеру индикатора присваивается номер 1

L1

JMP SCAN1

Возврат к началу опроса клавиатуры

IDEN

CPI C, 01h

Программа идентификации символа

Кнопка нажата в первой строке?

JNZ L2

Если нет переход к L2

MOV A, D

CPI 1E

Если да, то проверка: кнопка нажата в первом столбце?

JZ VIVOD

Если да – это кнопка Enter и переход к выводу символов на индикатор

L2

INX B

Счетчик числа символов увеличивается на 1

MOV A, B

CPI 8

Введенный символ восьмой?

JNZ L9

Если нет, переходим к поиску символа

MVI А,00h

Если да - обнуление индикаторов

OUT 11h

LXI H, 0800h

Обнуление ОЗУ. Начинаем с первой ячейки

MVI E, 8h

Счетчик цикла E=8

L10

MOV M, A

Записываем в ячейку значение аккумулятора (ноль)

INX H

Переход к следующей ячейке

DCR E

Уменьшение счетчика на 1

MOV A, E

CPI 0h

Счетчик равен нулю?

JNZ L9

Если нет, переход в начало цикла в L10

L9

MOV A, D

Поиск символа

CPI 1E

Кнопка в первом столбце?

JNZ L4

Если нет – переход к L4

LXI H, 0400

JMP M0

L4

CPI 1D

Кнопка во втором столбце?

LXI H, 040A

JNZ L5

Если нет – переход к L5

JMP M0

L5

CPI 1B

Кнопка в третьем столбце?

LXI H, 0415

JNZ L6

Если нет – переход к L6

JMP M0

L6

CPI 17

Кнопка в четвертом столбце?

LXI H, 041F

JNZ L7

Если нет – переход к L7

JMP M0

L7

LXI H, 0429

Кнопка в пятом столбце.

M0

MOV A, C

CPI 01h

Кнопка в 1 строке?

JNZ M1

Если нет– переход к M1

JMP M

M1

MOV A, C

CPI 02h

Кнопка во 2 строке?

JNZ L3

Если нет – переход к M2

MOV A, L

ADI 2h

Если да – регистр L увеличиваем на 2

JMP M

M2

MOV A, C

CPI 04h

Кнопка в 3 строке?

JNZ M3

Если нет – переход к M3

MOV A, L

ADI 4h

Если да – регистр L увеличиваем на 4

JMP M

M3

MOV A, C

CPI 08h

Кнопка в 4 строке?

JNZ M4

Если нет – переход к M4.

MOV A, L

Если да – регистр L увеличиваем на 6

ADI 6h

JMP M

M4

ADI 8h

Строка пятая – регистр L увеличиваем на 8

M

INX H

Переход к следующей ячейке, где хранится семисегментный код символа

MOV A, M

Запись кода в аккумулятор

MOV D, A

INX D

JMP SCAN1

VIVOD

MVI C, 1h

Программа вывода символов. Счетчик номера нидикатора=1

LXI H, 0800

Начинаем вывод я ячейки ОЗУ 0800

VIVOD1

MOV A, M

Отправляем код символа в порт B

OUT 11h

MOV A, C

Отправляем номер индикатора в порт A

OUT 10h

MVI E,FF

Начало программы создания

временной задержки

MVI D,FF

NOP

DCR D

JNZ L5

DCR E

JNZ L6

MVI А,00Н

Гашение индикатора

OUT 11h

INX H

Инкремент адреса ячейки памяти

MOV А,С

Сдвиг влево номера индикатора

RAL

MOV С,А

MOV A, C

CPI 80h

Индикатор седьмой?

JNZ VIVOD1

Если нет– переход к следующему символу на метку VIVOD1

CHANGE

LXI H, 0800h

Меняем значения ячеек памяти ОЗУ

MOV A, H

MOV E, A

MVI D, 06h

LXI H, 0801h

L8

MOV A, H

DCR H

MOV M, A

INX H

INX H

DCR D

MOV A, D

CPI 8h

JNZ L8

LXI H, 0806h

MOV A, E

MOV M, A

MVI C,1h

Проверка: нажата ли какая-нибудь клавиша? (чтобы была возможность прервать бегущую строку) Счетчик номера строки регистр С, присваиваем значение 1

MVI A, 00h

Обнуляем аккумулятор

L12

MOV A,C

Программа опроса клавиатуры2

OUT 10h

Посылаем номер строки в порт A

IN 12h

Считываем в аккумулятор данные из порта С

ANI 1F

Операция «И». Из поступившего в аккумулятор символа значение имеют младшие 5 разрядов

CPI 1F

Вычитание числа 1F из значения аккумулятора (если кнопка не нажата, в аккумуляторе значение 1F)

JNZ SCAN

Если разница не равна нулю – кнопка нажата, переход к началу программы

MOV D, A

MOV А,С

В противном случае, если кнопка не нажата: сдвиг влево номера индикатора

RAL

MOV С,А

MOV A, C

CPI 80h

Проверка: это номер последнего индикатора?

JNZ L11

Если нет - переход к метке L11

MVI C, 1h

Если да – номеру индикатора присваивается номер 1

L11

JMP L12

Возврат к началу опроса клавиатуры 2 – L12

Соседние файлы в папке курсач бегущая строка