Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсач бегущая строка / сам курсач.docx
Скачиваний:
86
Добавлен:
30.05.2015
Размер:
386.57 Кб
Скачать

2.2 Блок-схема программы

Общий алгоритм работы программы заключается в опросе клавиатуры, идентификации нажатой клавиши, сравнении полученных данных с данными, хранящимися в ячейках ПЗУ и последующий вывод на индикаторы символов.

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

Наиболее важными блоками программы я считаю идентификацию символа и вывод символа на индикаторы. Их мы рассмотрим ниже более подробно, но прежде всего, хотелось бы рассказать об организации данных в ячейках ПЗУ.

В ячейках ПЗУ хранятся данные о 25 символах, которые возможно ввести с клавиатуры (рис.9). Полная таблица символов находится в Приложении A. В ячейках ПЗУ символы расположены «блоками» по номеру столбца. Начиная с ячейки 0400 в памяти хранятся данные о 5 символах, расположенных в 1, 2,3,4,5 столбцах. Каждому символу соответствует номер столбца в котором он находится и семисегментный код символа, который выводится на индикатор (рис.10).

Enter

5

0

E

L

1

6

A

F

O

2

7

B

G

P

3

8

C

H

S

4

9

D

I

(ПРОБЕЛ)

Рисунок 9. Расположение символов на клавиатуре

Номер ячейки

Коды: столбец,

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

Номер столбца в шестнадцатиричной системе счисления

Кнопка (символ)

0400

XXX11110

1E

Enter

0401

0402

XXX11110

1E

1

0403

00000110

0404

XXX11110

1E

2

0405

01011011

0406

XXX11110

1E

3

0407

01001111

0408

XXX11110

1E

4

0409

01100110

040A

XXX11101

1D

5

040B

01101101

040C

XXX11101

1D

6

040D

01111101

Рисунок 10. Данные в ячейках ПЗУ

Полная таблица символов находится в приложении Б.

С помощью этой таблицы и происходит идентификация символа. Данные, пришедшие из порта С программируемого периферийного параллельного адаптера, сравниваются с номером столбца, в котором находится символ. Как только номер столбца совпадает – это значит, мы попали в участок памяти ПЗУ, где последовательно хранятся символы, расположенные в этом столбце, но в разных строках: 1,2,3,4,5. Блок-схема этого участка программы приведена на рисунке 11.

Рисунок 11. Блок-схема идентификации символа

С помощью счетчика, на который приходят данные из порта A, мы отсчитываем нужное количество строк от самого первого символа, имеющего нужный нам номер столбца. Таким образом, мы находим адрес ячейки, которая соответствует нажатому символу. Увеличивая на единицу адрес, мы переходим в ячейку, в которой хранится семисегментный код символа и записываем его в самую первую ячейку памяти ОЗУ – 0800. Точно так же поступаем со всеми нажатыми клавишами, и в итоге, в ОЗУ мы имеем таблицу, состоящую из кодов символов, которые были нажаты.

Каким же образом осуществляется бегущая строка? Наглядно этот процесс иллюстрирует блок-схема на рисунке 12.

Рисунок 12. Блок-схема вывода информации на индикаторы

На индикаторы последовательно выводятся коды символов, хранящиеся друг за другом в ОЗУ. Причем каждый последующий символ выводится на последующий индикатор. То есть на 1 индикатор выводится символ, хранящийся в 1 ячейке памяти ОЗУ. После чего индикатор гасится. Дальше на 2 индикатор выводится символ, хранящийся следующей ячейке памяти. Учитывая, что скорость выполнения операций процессором очень высока, человеческий глаз воспримет это как последовательность символов, которые одновременно выведены на индикаторы.

Как только все символы выведены на индикаторы по одному разу происходит обмен данными в ячейках ОЗУ. Так как каждый раз при выводе символов чтение начинается с первой ячейки, можно заменить данные 1 ячейки, на данные второй. Данные второй - на данные третьей и так далее. В результате при выводе на индикаторы мы увидим, что символы сместились влево на 1 знак. То есть на месте первого символа теперь второй. После вывода всех семи – снова происходит обмен данными между ячейками памяти и снова вывод на индикаторы. На большой скорости осуществления этих операций человеческий глаз видит бегущую строку символов.

Листинг программы приведен в Приложении Г.

Заключение

В ходе выполнения курсового проекта, были реализованы поставленные цели и задачи: составлена функциональная схема устройства, изучена и проанализирована элементная база, на основе которой была составлена принципиальная схема устройства. Изучена литература, описывающая работу и разновидности микросхем, а также программную реализацию различных задач в микропроцессорной технике на языке ассемблер. Построена блок-схема программы и составлена сама программа работы устройства индикации «Бегущая строка». Предложенные мною алгоритмы реализации не являются единственно возможным решением задачи. В зависимости от установленных ограничений воплотить данное устройство в жизнь можно и другими способами.

Список используемой литературы

1. Шило В.Л. Популярные цифровые микросхемы: Справочник. – М.: Радио и связь, 1987. – 352с.: ил.

2.Алхимов Ю.В. Микропроцессоры и цифровые системы в неразрушающем контроле: Учебное пособие. – ТПУ:2008. – 245с.

3. Электронный ресурс www.wikipedia.org

4.Р. Токхайм. Микропроцессорные системы. Курс и упражнения. М: Энегоатомиздат, 1988. – 168с.

Приложения

Приложение A. Таблица ячеек памяти ПЗУ

Номер ячейки

Коды: столбец,

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

Номер столбца в шестнадцатиричной системе счисления

Кнопка (символ)

0400

XXX11110

1E

Enter

0401

0402

XXX11110

1E

1

0403

00000110

0404

XXX11110

1E

2

0405

01011011

0406

XXX11110

1E

3

0407

01001111

0408

XXX11110

1E

4

0409

01100110

040A

XXX11101

1D

5

040B

01101101

040C

XXX11101

1D

6

040D

01111101

040E

XXX11101

1D

7

040F

00000111

0410

XXX11101

1D

8

0411

01111111

0412

XXX11101

1D

9

0413

01101111

0415

XXX11011

1B

0

0416

00111111

0417

XXX11011

1B

A

0418

01110111

0419

XXX11011

1B

B

041A

01111100

041B

XXX11011

1B

C

041C

00111001

041D

XXX11011

1B

D

041E

01011110

041F

XXX10111

17

E

0420

01111001

0421

XXX10111

17

F

0422

01111001

0423

XXX10111

17

G

0424

01110001

0425

XXX10111

17

H

0426

01110110

0427

XXX10111

17

I

0428

00110000

0429

XXX01111

0F

L

042A

00111000

042B

XXX01111

0F

O

042C

O 00111111

042D

XXX01111

0F

P

042E

01110011

042F

XXX01111

0F

S

0430

01101101

0431

XXX01111

0F

Пробел

0432

00000000

Приложение В. Спецификация

Обозначение

Наименование

Количество

Детали

R1

МЛТ-0,25-100кОм+-5%

1

R4

МЛТ-0,25-10кОм+-5%

R2-R3, R5-R12

МЛТ-0,25-1кОм+-5%

10

С1-С2

Л50-6-15-10пФ+-5%

2

Стандартные изделия

DD1

Intel 8085

1

DD2 -DD3

1533ИР22

2

DD4

К561ЛН1

1

DD5

К1554ЛЕ1

2

DD6

К564ИД7

1

DD7

КР580ВВ55

1

DD8

КР573РФ2

1

DD9

KР537РУ8

1

DD10

АЛС324

7

DD11

PBS-14A

25

Приложение Г. Программа

метка

мнемокод

комментарий

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

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