Проектирование микропроцессорной системы управления

Описание алгоритма работы и разработка структурной схемы МКС. Схема вывода аналогового управляющего сигнала, подключения ЖК-дисплея, клавиатуры и аварийного датчика. Разработка блок-схемы алгоритма главной программы работы МКС. Функция инициализации.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 26.06.2016
Размер файла 5,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ

ГОМЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ П.О.СУХОГО

Факультет автоматизированных и информационных систем

Кафедра «Промышленная электроника»

РАСЧЕТНО-ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовому проекту

по дисциплине «Микропроцессорная техника»

на тему: «Проектирование микропроцессорной системы управления (МКС)»

Исполнитель: студент гр. ПС-41

Мисюк В.Д.

Руководить проекта: доцент

Сахарук А.В.

Гомель 2016

СОДЕРЖАНИЕ

  • Введение
  • 1. Описание алгоритма работы и разработка структурной схемы МКС
    • 1.1 Алгоритм работы МКС
    • 1.2 Пульт управления
    • 1.3 Структурная схема МКС
  • 2. Разработка принципиальной схемы МКС
    • 2.1 Схема подключения микроконтроллера
    • 2.2 Схема ввода цифровых сигналов
    • 2.3 Схема ввода аналоговых сигналов
    • 2.4 Схемы вывода цифровых управляющих сигналов
    • 2.5 Схема вывода аналогового управляющего сигнала
    • 2.6 Схема подключения ЖК-дисплея
    • 2.7 Схема подключения клавиатуры
    • 2.8 Подключение аварийного датчика
    • 2.9 Схемы подключения аварийной сигнализации
  • 3. Разработка программного обеспечения МКС
    • 3.1 Разработка блок-схемы алгоритма главной программы работы МКС
    • 3.2 Функция инициализации init( )
    • 3.3 Функция interrupt( )
    • 3.4 Функция digit( )
    • 3.5 Функция analog( )
    • 3.6 Функция display( )
    • 3.7 Программа управления МКС
  • Заключение
  • Список литературы

Введение

В курсовом проекте требуется разработать микроконтроллерную систему (МКС) управления некоторым технологическим объектом. Структура МКС приведена на рисунке 1.1. МКС состоит из объекта управления, микроконтроллера, пульта управления и аппаратуры их взаимной связи. Микроконтроллер (МК) путем периодического опроса принимает информацию об объекте от аналоговых и цифровых датчиков. Выходные сигналы датчиков вследствие их различной физической природы могут потребовать промежуточного преобразования на аналого-цифровых преобразователях (АЦП) или на схемах формирователей сигналов (ФС), которые чаще всего выполняют функции гальванической развязки и формирования уровней двоичных сигналов стандарта ТТЛ.

Рисунок 1.1 - Структура микроконтроллерной системы

МК с требуемой периодичностью вырабатывает управляющие сигналы на своих выходных портах в соответствии с законом управления. Некоторая часть этих сигналов интерпретируется как совокупность простых двоичных сигналов, которые через схемы формирователей (усилители мощности, реле, оптроны и т.п.) поступают на исполнительные устройства. Другая часть управляющих сигналов представляет собой многоразрядные двоичные коды, которые через цифро-аналоговые преобразователи (ЦАП) воздействуют на исполнительные устройства аналогового типа. АЦП и ЦАП могут быть отдельными блоками МКС, но могут являться внутренними модулями микроконтроллера. Это определяется типом применяемого МК.

С помощью пульта управления (ПУ) оператор имеет возможность получать значения некоторых сигналов, выводить на индикаторы информацию о состоянии объекта и т.п.

В курсовом проекте необходимо разработать структурную схему МКС, принципиальную схему системы, разработать программы для МК, обеспечивающие выполнение алгоритмов контроля и управления в соответствии с заданием.

1. Описание алгоритма работы и разработка структурной схемы МКС

1.1 Алгоритм работы МКС

Блок-схема алгоритма (БСА) работы МКС представлена на рисунке 1.2.

Рисунок 1.2 - Блок-схема алгоритма работы МКС

После включения электропитания или нажатия кнопки «Сброс» на пульте управления выполняется начальная установка (инициализация) системы (блок 1 БСА): вывод начальных значений управляющих воздействий настройка внутренних модулей МК, таймер опроса начинает отсчет времени Топр. Блок 2 выполняет задачу логического управления. В нем производится ввод и обработка цифровой информации, поступающей от двоичных датчиков. В блоке 3 производится ввод и обработка аналоговой информации. Далее в блоке 4 происходит опрос клавиатуры, находящейся на пульте управления. Если ни одна из клавиш клавиатуры не была нажата, то программа переходит к блоку 8, в котором проверяется, не прошло ли время опроса Топр. Если время истекло, то программа вновь переходит на опрос клавиатуры (блок 4). Если же оператор нажал какую-либо клавишу клавиатуры с целью вывода на дисплей значения входного напряжения U1-U5, то программа переходит к блоку 6, в котором в зависимости от номера нажатой клавиши подготавливаются данные, а в блоке 7 происходит их вывод на дисплей. После этого в блоке 8 проверяется, не прошло ли время опроса Топр. Если время опроса истекло, то программа переходит к блоку 9, в котором таймер подготавливается для нового отсчета времени Топр. Затем программа переходит на выполнение блока 2 алгоритма, т.е. зацикливается.

Рисунок 1.3 - БСА обработки цифровой информации

Блок-схема алгоритма обработки цифровой информации приведена на рисунке 1.3. Сигналы от двоичных датчиков X1, X2, X3, X4, X5 вводятся в МК и запоминаются в его памяти данных (ПД). Затем вычисляется значение логической (булевой) функции f( ). Это значение выдается в качестве управляющего сигнала Y1 по соответствующему выходному каналу на исполнительное устройство. При единичном значении логической функции f() микроконтроллер вырабатывает выходной сигнал ТТЛ-уровня Y=1 длительностью t1. Форма сигнала Y1 приведена на рисунке 1.4.

Рисунок 1.4 - Форма сигнала Y1

На рисунке 1.5 приведена БСА обработки аналоговой информации. Сигналы U1, U2, U3, U4, U5 от аналоговых датчиков (однополярное напряжение от 0 до +5 В) преобразуется в цифровую форму с помощью АЦП, входящего в состав МК. С выхода АЦП 10-разрядные коды W1, W2, W3, W4 и W5, представляющие собой целые беpзнаковые двоичные числа, поступают на обработку.

Рисунок 1.5 - БСА обработки аналоговой информации

Обработка кодов начинается с вычисления функции g()=min{8W1+K1-W2; 2K2+5W2}, где коэффициенты К1 и K2 - 16-разрядное целое двоичное число, хранящиеся в программной памяти МК. Полученное значение функции g()=min{8W1+K1-W3; 2K2+5W2} сравнивается с константой Q (уставкой), хранящейся в программной памяти. В зависимости от результата сравнения МК вырабатывает двоичные управляющие сигналы ТТЛ-уровня Y2 или Y3 длительностью t2 или t3 соответственно. Форма сигналов Y2 и Y3 аналогична сигналу Y1, изображенному на рисунке 1.4.

Цифровой код W4, образованный аналоговым сигналом U4, используется для вычисления функции e()=(4W4/K4), где K4 - коэффициент, хранящийся в программной памяти. Полученное значение функции e()=(4W4/K4) используется для формирования управляющего сигнала Y4, представляющего собой последовательность импульсов с широтной модуляцией. При широтно-импульсной модуляции (ШИМ) период следования Т импульсов и их частота f являются постоянными, а изменяется длительность импульсов tи в диапазоне от tи.мин до tи.макс пропорционально значению функции e()=(4W4/K4), как показано на рисунке 1.6. Частота импульсов ШИМ определяется исходя из заданной тактовой частоты fosc работы МК. (15.5 МГц).

Цифровой код W5, образованный аналоговым сигналом U5, используется для вычисления функции h()=(8W5/K5). Полученной значение функции h()=(8W5/K5) служит для формирования импульсной последовательности ШИМ, из которой путем фильтрации образуется аналоговый сигнал Y5, поступающий на исполнительное устройство.

Рисунок 1.6 - Временные диаграммы сигналов при широтно-импульсной модуляции

В МКС имеется также двоичный датчик аварийной ситуации, единичный сигнал с которого X0 должен вызывать аварийный останов системы в любой момент выполнения рабочего цикла. Выход из аварийного режима возможен только после выключения питания МКС.

1.2 Пульт управления

Пульт управления должен содержать следующие элементы.

1) Жидкокристаллический дисплей (ЖКД) для отображения значений аналоговых входных напряжений U1-U5.

2) Клавишный переключатель для выбора вида отображаемой информации на ЖДК.

3) Кнопка «Сброс», при нажатии на которую происходит сброс микроконтроллера.

4) Светодиод индикации и динамик, на которые подаются сигналы от МК в аварийном режиме.

Общий вид передней панели пульта управления приведен на рисунке 1.7.

Рисунок 1.7 - Вид передней панели пульта управления

После включения электропитания МКС находится в рабочем режиме, в котором циклически выполняется ввод и обработка информации от датчиков с периодов Топр (1 с). В этом режиме на ЖДК выводится текст сообщения «Work Mode» (рабочий режим). Оператор при нажатии на одну их клавиш с надписями «U1», «U2», «U3», «U4», «U5» может вывести на ЖДК значения входных напряжений U1, U2, U3, U4 или U5, которые подаются от датчиков.

Текст сообщения на ЖДК при этом может быть следующим:

Work Mode

U1 = 2.105 V

При поступлении сигнала от аварийного датчика МКС переходит в аварийный режим. В этом режиме прекращается ввод информации от датчиков и формирование управляющих сигналов, а на пульте управления включается аварийная сигнализация (световая с частотой 1Гц и звуковая с частотой 500 Гц, на дисплей выводится текст сообщения «Error» - ошибка). Выход из аварийного режима возможен только после выключения питания МКС.

1.3 Структурная схема МКС

Структурная схема разрабатываемой МКС приведена на рисунке 1.8. Ее центральной частью является микроконтроллер PIC16F877 фирмы Microchip.

Аналоговые сигналы U1, U2, U3, U4, U5 поступают на выводы МК, которые являются входными каналами внутреннего АЦП. Цифровые (двоичные) сигналы X1, X2, X3, X4, X5 поступают на входы МК, которые являются выводами порта, настроенных на ввод. Управляющие сигналы Y1, Y2 и Y3, представляющие собой одиночные импульсы определенной длительности, вырабатываются микроконтроллером. Управляющий сигнал Y1 представляет собой периодическую последовательность импульсов с ШИМ, которая вырабатывается внутренним модулем МК. Сигналы Y1-Y4 усиливаются по току с помощью формирователей ФС1-ФС4. Аналоговый управляющий сигнал Y5 формируется с помощью схемы ФС5, на которую подаются импульсы с ШИМ от микроконтроллера.

Пульт оператора включает в себя: жидкокристаллический дисплей (ЖДК) для отображения аналоговых сигналов (напряжений) U1-U5; клавиатуру с 5-ю клавишами для выбора сигналов; кнопку «Сброс» для сброса МК; устройство аварийной сигнализации, выдающее звуковые и световые сигналы определенной частоты.

Рисунок 1.8 - Структурная схема МКС

2. Разработка принципиальной схемы МКС

2.1 Схема подключения микроконтроллера

Для работы PIC-микроконтроллера необходимо:

1) присоединить времязадающую цепь для работы внутреннего тактового генератора;

2) обеспечить сброс МК при включении электропитания.

На рисунке 2.1 приведена типовая схема подключения микроконтроллера PIC16F877, который используется для выполнения курсового проекта.

Для обеспечения генерации тактовой частоты fOSC к выводам OSC1 и OSC2 подключен кварцевый резонатор ZQ1. Частота кварцевого резонатора fZQ выбирается из условия fOSC= fZQ и может быть в пределах 0…20МГц (По заданию 15.5 МГц).

Рисунок 2.1 - Схема подключения микроконтроллера PIC16F877

Конденсаторы С1, С2 служат для облегчения запуска внутреннего тактового генератора. Цепочка С3, R1 обеспечивает сброс МК при подачи электропитания. С помощью кнопки SB1, расположенной на пульте управления, сброс МК может выполнить оператор в любой момент времени.

Конденсатор С4 служит для фильтрации высокочастотных помех, возникающих на выводах источника питания при работе микросхемы.

33 двунаправленные линии портов A, B, C, D, E микроконтроллера могут быть использованы в МКС для ввода и вывода данных.

Выбираем элементы:

DD1: PIC16F877;

ZQ1: HC-49U;

C1, C2: К50-31-16В-20 мкФ±5%;

C3, C4: К10-49-25В-0.1 мкФ±5%;

2.2 Схема ввода цифровых сигналов

Так как по заданию цифровые сигналы X1-X5 являются двоичными сигналами ТТЛ-уровней, то их можно непосредственно подавать на линии портов МК. Необходимо эти линии настроить на ввод.

На рисунке 2.2 приведена схема подключения сигналов X1-X5 к линиям RC3-RC7 порта С микроконтроллера. Разъем XS1 (розетка) служит для подключения соединительного кабеля (вилки XP1) от датчиков цифровых сигналов.

Рисунок 2.2 - Схема подключения сигналов X1-X5 к МК

2.3 Схема ввода аналоговых сигналов

Так как аналоговые сигналы U1-U5 по заданию являются напряжениями постоянного тока, изменяющимися в пределах от 0 до +5 В, то их можно непосредственно подавать на линии портов, которые служат аналоговыми каналами внутреннего модуля АЦП микроконтроллера.

На рисунке 2.3 приведена схема подключения сигналов U1-U5 к линиям RA0-RA5 порта А микроконтроллера. Эти линии могут быть настроены как аналоговые каналы AN0-AN4 модуля АЦП. Разъем XS2 (розетка) служит для подключения соединительного кабеля (вилки XP2) от датчиков аналоговых сигналов.

Рисунок 2.3 - Схема подключения аналоговых сигналов U1-U5 к МК

2.4 Схемы вывода цифровых управляющих сигналов

В проектируемой МКС имеются 4 цифровых управляющих сигнала. Сигналы Y1, Y2, Y3 представляют собой одиночные импульсы ТТЛ-уровней, поступающие на исполнительные устройства МКС. Сигнал Y4 - это периодическая последовательность импульсов с широтно-импульсной модуляцией, вырабатываемая внутренним модулем ШИМ микроконтроллера.

Управляющие сигналы снимаются с линий портов МК. Нагрузочная способность линий портов PIC-микроконтроллеров довольно высока: максимальный выходной ток равен 25 мА. Такая нагрузочная способность позволяет подключать многие исполнительные устройства непосредственно к линиям портов МК. Однако, с целью повышения надежности рекомендуется подключать исполнительные устройства к портам МК через буферные элементы, которые в простейшем случае могут представлять собой микросхемы повторителей с открытым коллектором, например, К155ЛП9. Такие микросхемы могут обеспечить ток нагрузки до 40 мА, а главное, при аварийной ситуации в нагрузке, например, коротком замыкании, выходит из строя микросхема повторителя, а не дорогостоящий микроконтроллер.

На рисунке 2.4 приведена схема формирования управляющих сигналов МКС с использованием микросхемы К155ЛП9, в состав которой входят 6 повторителей с открытым коллектором.

Рисунок 2.4 - Схема вывода управляющих сигналов Y1-Y4

Разъем XS3 (розетка) служит для подключения соединительного кабеля (вилки XP3) к исполнительным устройствам.

В некоторых случаях, например, при значительном расстоянии исполнительного устройства от МКС, а также исключения влияния помех от наводок на соединительные провода, необходимо гальваническое разделение, т.е. по постоянному току, цепей МК и управляющих сигналов. На рисунке 2.5 приведена схема формирования управляющего сигнала Y3 с гальванической развязкой, реализованной с помощью транзисторной оптопары АОТ128А. Следует иметь в виду, что источник питания с напряжением +Uп1, -Uп2 должен быть гальванически не связан с основным источником +5 В (получать питание от отдельной обмотки сетевого трансформатора).

Рисунок 2.5 - Схема вывода управляющего сигнала Y3 с гальванической развязкой

Выбираем элементы:

DD2: К155ЛН3 R5: МЛТ-0,125-300 Ом±5%

R1..R4: МЛТ-0,125-200 Ом±5% R6: МЛТ-0,125-1 кОм±5%

V1: AOT128A R7: МЛТ-0,125-43 кОм±5%

2.5 Схема вывода аналогового управляющего сигнала

Для получения аналогового выходного сигнала в микроконтроллерных системах используются цифро-аналоговые преобразователи (ЦАП). Модули ЦАП в составе микроконтроллеров являются большой редкостью, поэтому для этих целей приходится применять специальные микросхемы ЦАП, что значительно усложняет и удорожает МКС. Однако для PIC-микроконтроллеров более простой альтернативой является выполнение цифро-аналогового преобразования с помощью ШИМ-сигналов, получаемых с помощью внутренних модулей МК, которые могут работать в режиме широтно-импульсного модулятора.

Способ преобразования цифровых значений в аналоговые напряжения отличается сравнительной простотой. Он заключается в изменении коэффициента заполнения импульсов прямоугольного напряжения пропорционально исходному цифровому значению. Временные диаграммы импульсов ШИМ были приведены на рисунке 1.6. Если обозначить Т - период ШИМ-сигнала, fШИМ = 1/Т - его частота, а tи - длительность импульса, то коэффициент заполнения г = tи/Т.

В англоязычной литературе вместо коэффициента заполнения используется термин Duty Cycle (величина рабочего цикла).

Спектральный анализ ШИМ-сигнала на основе преобразования Фурье позволяет представить этот сигнал в виде суммы постоянной составляющей и отдельных гармоник с различными амплитудами и частотами:

u(t) = U0+U1msin?t+ U2msin?t+ U3msin?t+…,

где U0 - постоянная составляющая,

U1m, U2m, U3m… - амплитуды гармоник.

Если ШИМ-сигнал пропустить через фильтр низкой частоты (ФНЧ) и отфильтровать составляющие переменного напряжения, то в идеальном случае остается составляющая постоянного напряжения. При этом выходной сигнал ФНЧ определяется как

u(t) = U0 = Um г,

где Um - амплитуда ШИМ-сигнала.

В PIC-микроконтроллерах ШИМ-сигнал снимается с выводов порта С, поэтому можно считать что Um равно напряжению питания микроконтроллера UDD, следовательно

u(t) = UDD г

Таким образом, исходное цифровое значение, представленное коэффициентом заполнения г, преобразуется в постоянный аналоговый сигнал U0. Причем преобразованное выполняется по линейному закону с известным коэффициентом пропорциональности.

На рисунке 2.6 приведена схема формирования аналогового напряжения посредством фильтрации ШИМ-сигнала, снимаемого с вывода RC1 порта С. Фильтр низкой частоты представляет собой простейший RC-фильтр 1-го порядка. Операционный усилитель включен по схеме повторителя. Он необходим для устранения влияния сопротивления нагрузки на работу RC-фильтра.

Рисунок 2.6 - Схема подключения фильтра к выходу канала PWM2

Частота среза RC-фильтра равна

fc = 1/2RC (2.1)

Произведение RC называют постоянной времени фильтра.

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

Для расчета постоянной времени фильтра можно применить следующую эмпирическую формулу:

, (2.2)

где UDD - напряжение питания МК;

TШИМ - период ШИМ-сигнала;

- допустимая величина пульсаций на выходе фильтра.

Формула (2.2) предполагает, что постоянная времени RC по крайней мере в 10 раз больше, чем период ШИМ-сигнала.

Например, если UDD = 5 В, ТШИМ=0,2 мс (частота fШИМ = 5 кГц), допустимая пульсация на выходе фильтра = 0.05 В (1% от UDD), то из формулы (2.2) получим RC = 0.0074 с.

Если взять конденсатор C = 1 мкф, то сопротивление R = 7400 Ом. Выбираем ближайший номинал из стандартного ряда R = 7.5 кОм. Частота среза такого фильтра будет fc = 21.2 Гц.

Выбираем элементы:

R1: МЛТ-0,125-7,5 кОм±5%

C1: K50-6-50В-1мкФ±5

DA1: AD8541AR

2.6 Схема подключения ЖК-дисплея

Алфавитно-цифровые ЖК-дисплеи (ЖКД), или по-английски LCD (Liquid Crystal Display), представляют собой недорогие и удобные модули, позволяющие сэкономить время и ресурсы при разработке новых изделий. Они обеспечивают отображение большого объема информации при хорошей различимости и низком энергопотреблении.

Японская фирма Hitachi разработала специальную микросхему - контроллер HD44780 для управления подобными ЖК-дисплеями. Этот контроллер определил интерфейс, который стал стандартом «дефакто» для ЖК-дисплеев. Аналоги этого контроллера или совместимые с ним по интерфейсу микросхемы выпускают множество фирм, среди которых Epson, Toshiba, Sanyo, Samsung, Philips. ЖК-дисплеи на базе данного контроллера можно встретить в самым разнообразных устройствах: измерительных приборах, медицинском оборудовании, промышленном и технологическом оборудовании, офисной технике - принтерах, телефонах, факсимильных и копировальных аппаратах.

Контроллер HD44780 может управлять 2-мя строками по 40 символов в каждой (для дисплеев с 4-мя строками по 40 символов используются два однотипных контроллера), при матрице символов 5 х 7 точек.

Существует несколько различных стандартных форматов ЖК-дисплеев (количество символов х число строк); 8х2, 16х1, 16х2, 16х4, 20х1, 20х2, 20х4, 40х2, 40х4. В курсовом проекте будет применяться ЖК-дисплей типа WM-C1602N-2YLY с 32-позиционным индикатором (16х2 символов). Конструктивно дисплей представляет собой печатную плату с установленными на ней контроллером HD44780 и ЖК-индикатором. Плата содержит 14-контактное поле, расположенное в нижней части, а также 2 контакта (выводы питания подсветки) в правой части. Назначение выводов поясняет таблица 2.1.

Таблица 2.1 - Назначение выводов ЖК-дисплея

Основными чертами интерфейса контроллера HD44780 являются такие характеристики.

Данные передаются по 4- или 8-разрядной шине, что определяется пользователем. Эти данные могут быть либо командами, либо символьной информацией. Использование 4-разрядного режима позволяет ограничить весь интерфейс 7-ю линиями, однако, процесс передачи данных будет немного более медленным, чем при 8-разрядном режиме.

Управление выполняется с использованием трех линий:

- линия RS (выбор регистра), которая определяет, будет передаваться команда или символьные данные;

- линия R/W (чтение/запись), которая определяет направление перемещения данных (R/W = 1 - чтение, R/W = 0 - запись);

- линия Е (разрешение), которая выполняет функцию тактирования с целью синхронизации процесса передачи данных.

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

На рисунке 2.7 приведена схема подключения модуля ЖКД к микроконтроллеру с использованием 4-разрядной шины данных.

Рисунок 2.7 - Схема подключения ЖКД к микроконтроллеру

Вывод R/W дисплея присоединен к общему проводу питания, так как библиотечные функции управления ЖК-дисплеем компилятора mikroC PRO, которые будут использоваться в данном проекте, выполняют только запись данных из микроконтроллера, т.е. при этом должно быть R/W = 0. Потенциометр R1 служит для регулирования контраста отображаемых символов на дисплее.

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

В разрабатываемой МКС на пульте управления имеется простейшая клавиатура, состоящая из клавиш для выбора отображаемой на дисплее информации. Клавиатуры по методу аппаратурной реализации бывают дух видов: кодирующие и некодирующие.

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

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

Контакты клавиатур (переключателей и кнопок) бывают с фиксацией замкнутого состояния и без фиксации. Первые остаются в нажатом состоянии (контакты замкнуты), вторые после отжатия (освобождения клавиши или кнопки) размыкают свои контакты.

На рисунке 2.8 приведена схема подключения клавиатуры из пяти клавиш SB1-SB5 к порту D микроконтроллера.

Рисунок 2.8 - Подключение клавиатуры к микроконтроллеру

Выбираем элементы:

R1..R4: МЛТ-0,125-100 Ом±5%

R5..R8: МЛТ-0,125-10 кОм±5%

2.8 Подключение аварийного датчика

Так как по заданию X0 от аварийного датчика является двоичным сигналом ТТЛ-уровня, то его можно непосредственно подавать на линию порта МК. Необходимо эту линию настроить на ввод.

На рисунке 2.9 приведена схема подключения сигнала X0 к линии RB0 порта В микроконтроллера. Разъем XS4 (розетка) служит для подключения соединительного кабеля (вилки XP4) от аварийного датчика.

Рисунок 2.9 - Схема подключения аварийного датчика

2.9 Схемы подключения аварийной сигнализации

На рисунке 2.10 приведена схема подключения динамика BA1 для звуковой сигнализации. Транзистор VT1 усиливает по току выходной сигнал с линии RC0 порта.

Рисунок 2.10 - Схема подключения аварийного датчика

На рисунке 2.11 приведена схема подключения светодиода VD1 для аварийной световой сигнализации.

Рисунок 2.11 - Подключение светодиода для аварийной сигнализации

Выбираем элементы:

R1: МЛТ-0,125-300 Ом±5%;

VD1: АЛ307Б

3. Разработка программного обеспечения МКС

3.1 Разработка блок-схемы алгоритма главной программы работы МКС

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

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

Алгоритм работы проектируемой МКС был приведен на рисунке 1.2. По нему составим блок-схемы алгоритма (БСА) главной программы работы МКС, которая на языке Си будет иметь имя main(). БСА этой программы приведена на рисунке 3.1.

Рисунок 3.1 - БСА главной программы main()

Главная программа main() состоит из нескольких функций, которые вызываются по мере надобности согласно алгоритму работы МКС. Такое построение упрощает структуру программы, делает ее более понятной. Кроме того, использование функций облегчает разработку и отладку всей программы.

Согласно БСА на рисунке 3.1 в главную программу входят следующие функции:

init() - функция инициализации МКС;

digit() - функция ввода и обработки цифровой информации;

analog() - функция ввода и обработки аналоговой информации;

display() - функция вывода данных на дисплей.

Кроме этих функций в программу работы МКС будет входить функция обработки прерывания interrupt(), которая обрабатывает запросы прерывания от таймера и аварийного датчика.

В блоке 7 алгоритм главной программы проверяется значение переменной-флага с именем flag_T. Этот флаг устанавливает функция обработки прерывания interrupt(). Если значение flag_T = 0, то время отсчета Топр еще не окончено. По окончании отсчета времени Топр обработчик прерывания устанавливает флаг flag_T = 1, что является для главной программы сигналом к завершению цикла ожидания.

Рассмотрим возможную реализацию функций, составляющую программу работы МКС. Будем считать, что заданы следующие параметры: тактовая частота работы микроконтроллера fOSC = 15.5 МГц, время опроса Топр = 1.6 с.

3.2 Функция инициализации init( )

Функция init() используется для инициализации МКС после включения электропитания или сброса МК при помощи кнопки «Сброс», расположенной на пульте управления. БСА этой функции приведена на рисунке 3.2.

Сначала необходимо настроить линии портов МК на ввод или вывод согласно требованиям подключенных к ним внешних устройств. Далее нужно вывести нулевые начальные значения управляющих сигналов Y1, Y2, Y3, Y4, Y5. Затем необходимо произвести инициализацию ЖКД, клавиатуры, модулей АЦП и ШИМ, а также канала звука по методике, изложенной в описании библиотечных функций mikroC PRO для этих устройств. После инициализации ЖКД надо вывести на дисплей текст «Work Mode», сообщающий о начале работы МКС после запуска микроконтроллера. Заключительным этапом инициализации является настройка таймера TMR0 на заданный режим работы и настройка системы прерывания.

Таймер TMR0 будет использоваться в программе для отсчета времени опроса Топр, при этом он считает импульсы внутреннего тактового генератора. Счетные импульсы поступают с частотой, определяемой частотой системной синхронизации и коэффициентом предварительного деления, задаваемым регистром специальных функций OPTION_REG.

Рисунок 3.2 - БСА функции инициализации init( )

Формат регистра OPTION_REG следующий:

Коэффициент деления выбирают с помощью битов PS2, PS1, PS0 в диапазоне от 2 до 256, как показано в таблице 3.1.

Таблица 3.1 - Выбор коэффициента деления с помощью регистра OPTION_REG

Например, при использовании тактовой частоты fOSC = 15.5 МГц период тактовых импульсов будет TOSC = 1 / fOSC = 0.064 мкс, командный (машинный) цикл будет 4 х TOSC = 0.256 мкс (частота тактирования внутренне делится на 4). Таким образом, если, например, выбрать коэффициент деления 16, то содержимое счетного регистра таймера будет увеличиваться через каждые 16 мкс.

При переполнении счетного регистра (т.е. переход от 255 к 0) формируется запрос прерывания от таймера (если оно разрешено). Загружая некоторое значение в регистр TMR0, можно управлять количеством отсчетов до получения переполнения.

Для вычисления времени до момента переполнения таймера можно воспользоваться следующей формулой:

TOV = 4 * TOSC * K * (256 - TMR0),(3.1)

где TOV - время до момента переполнения (мкс);

TOSC - период следования импульсов тактового генератора (мкс);

К - коэффициент деления частоты, выбранный с помощью регистра OPTION_REG;

TMR0 - значение, загруженное в регистр TMR0 (десятичное число).

Из формулы (3.1) можно определить, что максимальное время переполнения, а следовательно, и время задержки при тактовой частоты 15.5 МГц, т.е. TOSC = 0,07 мкс, коэффициенте деления К = 256, начальном значении TMR0 = 0 будет:

TOV = 4 * 0,064 * 256 * (256 - 0) = 16777 мкс

Это значение значительно меньше требуемого времени Топр =1.6с. Поэтому на таймере реализуем задержку на 16 мс, а в переменной, например с именем counter (счетчик) будем накапливать количество переполнений с целью получения требуемой задержки в 1.6 с. Необходимое количество переполнений для отсчета времени 1.6 с будет:

1600 мс / 16 мс = 100

Для определения значения, которое должно быть загружено в регистр TMR0 с целью получения заданного времени переполнения, формулу (3.1) удобно записать в виде:

TMR0 = 256 - TOV / (4 * 0.25 * K) (3.2)

Для получения времени 16 мс при тактовой частоте 15.5 МГц и коэффициенте деления 256 из формулы (3.2) имеем:

TMR0 = 256 - 16000/ (4 * 0.064 * 256) = 11.86 =12

Таким образом в регистр TMR0 необходимо загрузить десятичное число 12. Для получения коэффициента деления К = 256 в младшие 3 разряда регистра OPTION_REG надо записать двоичное число 100. Кроме этого, необходимо установить бит INTEDG = 1 для того, чтобы прерывание по входу INT микроконтроллера от аварийного датчика возникало при изменении сигнала Х0 от “0” к “1”. Таким образом, в регистр OPTION_REG необходимо загрузить число 0b01000111 = 0x47.

В функции init( ) необходимо также разрешить прерывания при переполнении таймера TMR0 и по сигналу на входе INT от аварийного датчика.

В микроконтроллерах семейства PIC16 управление прерываниями реализовано с помощью регистров специальных функций INTCON, PIE, PIR, а программа обработчик прерываний всегда начинает исполняться с адреса 0004h.

Формат регистра INTCON следующий:

GIE - это бит общего разрешения прерываний. Если он установлен в “1”, то все немаскируемые прерывания разрешены. Если он сброшен в “0”, то все прерывания запрещены.

PEIE используется в качестве бита разрешения всех прерываний от периферийных устройств, определяемых с помощью регистров PIE и PIR. В данном курсовом проекте не предусмотрены прерывания от периферийных устройств, поэтому этот бит равен 0.

T0IE является битов разрешения (логическая 1) или запрещения (логический 0) прерывания при переполнении таймера TMR0.

Бит T0IF является флагом запроса прерывания при переполнении TMR0 (T0IF = 1 - есть запрос прерывания, T0IF = 0 - нет запроса).

INTE - Это бит разрешения внешнего прерывания по входу INT, а бит INTF - это флаг запроса прерывания по этому входу.

RBIE - это бит разрешения прерывания при изменении уровней сигналов на входах линий RB4, RB5, RB6, RB7 порта B, а бит RBIF - это таймер TMR0 и сигнал по входу INT, который поступает от аварийного датчика датчика. Поэтому для разрешения прерываний от них необходимо в регистр INTCON загрузить число 0b10110000 = 0хB0.

Рассмотрим пример реализации функции инициализации МКС init( ) на языке mikroC.

/* Объявления глобальных переменных, используемых в init() */

// присоединение выводов ЖКД

sbit LCD_EN at RB3_bit;

sbit LCD_D4 at RB4_bit;

sbit LCD_D5 at RB5_bit;

sbit LCD_D6 at RB6_bit;

sbit LCD_D7 at RB7_bit;

// направление выводов

sbit LCD_RS_Direction at TRISB2_bit;

sbit LCD_EN_Direction at TRISB3_bit;

sbit LCD_D4_Direction at TRISB4_bit;

sbit LCD_D5_Direction at TRISB5_bit;

sbit LCD_D6_Direction at TRISB6_bit;

sbit LCD_D7_Direction at TRISB7_bit;

// присоединение клавиатуры к порту D микроконтроллера

char keypadPort at PORTD;

void init ()//функция инициаизации

{

// настройка линий портов

TRISA = 0xFF;

TRISB = 0b11111101;

TRISC = 0b11111000;

TRISE = 0;

TRISD = 0xFF;

// вывод начальных значений Y1=Y2=Y3=Y4=Y5=0

PORTE = 0;

PORTC.B0 = 0;

PORTC.B1 = 0;

PORTC.B2 = 0;

PORTB.B1 = 0;

//инициализация ЖКД

Lcd_Init();

Lcd_Cmd(_LCD_CLEAR);

Lcd_Cmd(_LCD_CURSOR_OFF);

Lcd_Out(1,4, "Work Mode");

//инициализация модуля АЦП

ADC_Init();

//инициализация клавиатуры

Keypad_Init();

//инициализация модулей ШИМ

PWM1_Init(5000);

PWM2_Init(5000);

PWM1_Start();

PWM2_Start();

//инициализация линии RC0 порта C для генерации звука

Sound_Init(&PORTC,0);

//инициализация таймера TMR0

OPTION_REG = 0b01000111;

TMR0 = 12;

//разрешить прерывания от TMR0 и INT

INTCON = 0xB0;

}

3.3 Функция interrupt( )

Функция interrupt( ) является обработчиком прерывания при поступлении запроса прерывания INT (сигнал Х0 от аварийного датчика) или переполнения таймер TMR0. Функция также производит отсчет времени опроса Топр.

Блок-схема алгоритма обработчика прерывания interrupt( ) приведена на рисунке 3.3. Так как прерывание по INT должно иметь более высокий приоритет, то программа вначале проверяет флаг запроса внешнего прерывания INTF. Если флаг INTF установлен (поступил сигнал Х0 от аварийного датчика), то программа переходит на выполнение блоков 2, 3 и 4 аварийной сигнализации. После вывода мигающего светового сигнала с частотой 1 Гц программа в блоке 4 зацикливается. При этом прекращается выполнение каких-либо других действий. Для выхода из аварийного режима нужно отключить питание МК или нажать кнопку «Сброс» на пульте управления.

Рисунок 3.3 - БСА функции interrupt()

Если флаг запроса внешнего прерывания INTF сброшен, то это означает, что запрос прерывания пришел от таймера TMR0 (установлен флаг T0IF). Программа переходит к обслуживанию прерываний от таймера. При каждом прерывании вследствие переполнения таймера инкрементируется переменная-счетчик counter. Если содержимое counter стает равным 100, то это означает, что истекло время опроса Топр = 1.6 с (блок 6). После окончания отсчета времени 1 с функция interrupt( ) устанавливает в 1 переменную-флаг flag_T, что является сигналом для главной программы main( ) начать новый цикл опроса датчиков и выполнения других функций управления. Если же время опроса не закончилось, то в блоке 8 в счетчик таймера TMR0 загружается число 12 для нового отсчета 16 мс. Перед выходом из обработчика в блоке 9 выполняется сброс флага запроса прерывания от таймера TMR0, после чего МК будет вновь реагировать на переполнение таймера TMR0.

Рассмотрим пример реализации обработчика прерывания interrupt( ).

микропроцессорный алгоритм инициализация

/* Определения глобальных переменных, используемых в функции */

char counter = 0;//счетчик переполнений таймера TMR0

char flag_T = 0;//флаг окончания счета времени опроса

void interrupt()//функция-обработчик прерываний от TMR0 и INT

{

if(INTF == 1) //если запрос прерывания по INT

{

Lcd_Cmd(_LCD_CLEAR);//очистить ЖКД

Lcd_Out(1,5,"ERROR");//вывод на дисплей

Sound_Play(500,10000); //частоты 500Гц, 10секунд

while (1)//вывод мигающего светового сигнала и зацикливание программы

{

PORTB.B1 = 1; //включить светодиод

Delay_ms(500);//задержка на 500мс

PORTB.B1 = 0;//выключить светодиод

Delay_ms(500);//задержка на 500мс

}

}

//запрос прерывания от таймера TMR0

counter++;

if(counter == 100) //если прошло время опроса 1.6 с

{

flag_T = 1; //установить флаг окончания отсчета

//времени Топр = 1.6 с

counter = 0;

}

TMR0 = 12; //перезагрузить таймер

T0IF_bit = 0; //сбросить флаг запроса прерывания T0IF

}

3.4 Функция digit( )

Функция digit( ) выполняет обработку цифровых сигналов Х1-Х5, поступающих в МКС от двоичных датчиков. БСА обработки цифровой информации была приведена на рисунке 1.3.

Рассмотрим программную реализацию алгоритма на примере вычисления логической функции переменных

f()=X1||(!X2)||(!((!X3)&&X4||X5)) Входные сигналы Х1-Х5 поступают на линии RC3-RC7 порта С, настроенные на ввод. Выходной сигнал Y1 вырабатывается на линии RE0 порта Е, настроенный на вывод. Для формирования одиночного управляющего импульса Y1 длительностью t1 = 17 мкс будем использовать библиотечную функцию задержки Delay_us.

/* Объявление глобальных переменных, используемых в функции */

sbit X1 at RC3_bit; //битовая переменная X1 на линии порта RC3

sbit X2 at RC4_bit; //битовая переменная X2 на линии порта RC4

sbit X3 at RC4_bit //битовая переменная X3 на линии порта RC5

sbit X4 at RC4_bit //битовая переменная X4 на линии порта RC6

sbit X5 at RC4_bit //битовая переменная X5 на линии порта RC7

sbit Y1 at RE0_bit; //битовая переменная Y1 на линии порта RE0

void digit() //функция обработки цифровой информации

{

bit f; //битовая переменная для хранения результата

//вычисления логической функции

f = X1||(!X2)||(!((!X3)&&X4||X5));

if(f==1) //если результат равен 1

{

Y1=1;

Delay_us(17);

Y1=0;

}

}

3.5 Функция analog( )

Функция analog( ) выполняет ввод и обработку аналоговой информации, поступающей в МКС от датчиков. Блок-схема алгоритма этой программы была приведена на рисунке 1.5.

С помощью АЦП, входящего в состав микроконтроллера, аналоговые сигналы U1-U5 преобразуются в 10-разрядные двоичные коды W1-W5. Эти коды должны в ячейках памяти данных (ПД) для дальнейшего использования в программе. Далее вычисляется функция g(W1, W2, W3, K1, K2, K3), которая затем сравнивается с константой Q (уставкой), хранящейся в программной памяти МК.

В зависимости от результата сравнения вырабатываются управляющие сигналы Y2 или Y3, представляющие собой одиночные импульсы длительностью t2 или t3. В блоке 10 вычисляется функция e(W4, K4), которая используется для формирования сигнала Y4 на выходе RC2 микроконтроллера, представляющегося собой импульсную последовательность ШИМ. В блоке 12 вычисляется функция h(W5, K5), которая используется для формирования импульсной последовательности ШИМ на выводе RC1. Из нее путем фильтрации получается сигнал Y5, поступающий на исполнительные. По условию коэффициенты К1-К5, Q - это двухбайтные целые числа, хранящиеся в программной памяти микроконтроллера.

Рассмотрим пример реализации функции analog( ). Предположим, что требуется вычислить функции

g() = min{8W1+K1-W3; 2K2+5W2};

e() = (4W4/K4);

h() = (8W5/K5).

Коэффициенты К1 =9 , К2 =79 , К3 =17 , К4 = 21, К5 =10 , Q =61.

Длительность импульсов t2 = 63 мс, t3 = 25 мс.

/*Глобальные переменные, используемые в функции analog() */

//переменные для хранения кодов АЦП

unsigned int W1;

unsigned int W2;

unsigned int W3;

unsigned int W4;

unsigned int W5;

//размещение констант в памяти программ

const code int K1 = 9;

const code int K2 = 79;

const code int K3 = 17;

const code int K4 = 21;

const code int K5 = 10;

const code int Q = 61;

int M;

int N;

sbit Y2 at RE1_bit; //битовая переменная Y2 на линии порта RE1

sbit Y3 at RE2_bit; //битовая переменная Y3 на линии порта RE2

void analog()

{

int g; //двухбайтные переменные для хранения

int e; //результатов вычисления

int h; //функций g(), e(), h()

char DC; //переменная для рабочего цикла ШИМ

//чтение кодов АЦП

W1 = ADC_Read(0); //аналоговый канал 0 (сигнал U1)

W2 = ADC_Read(1); //аналоговый канал 0 (сигнал U2)

W3 = ADC_Read(2); //аналоговый канал 0 (сигнал U3)

W4 = ADC_Read(3); //аналоговый канал 0 (сигнал U4)

W5 = ADC_Read(4); //аналоговый канал 0 (сигнал U5)

M = 8*W1+K1-W3; //вычисление функции g()

N=2*K2+5W2;

if (M<N)

g = N;

else

g =M;

if(g>=Q)

{

Y3=1; //вывод сигнала Y3

Delay_ms(63);

Y3=0;

}

else

{

Y2 = 1;

Delay_ms(25);

Y2 = 0;

}

e=4*W4/K4; //вычисление функции e()

DC=e; //определить величину рабочего цикла

PWM1_Set_Duty(DC); //установить текущий рабочий цикл для //PWM1

h = 8*W5/K5; //вычисление функции h()

DC = h; //определить величину рабочего цикла

PWM2_Set_Duty(DC); //установить текущий рабочий цикл для //PWM2

}

3.6 Функция display( )

Функция display( ) используется для обслуживания пульта управления. БСА этой функции приведена на рисунке 3.4.

В блоках 1, 4, 7, 10, 13 по значению переменной key, в которой хранится номер (1…5), анализируется, какая клавиша была нажата оператором. В зависимости от нажатой клавиши (SB1…SB5) производится вычисление напряжения Ui в вольтах по его коду Wi.

Модуль АЦП в микроконтроллере PIC16F877 выдает 10-разрядный двоичный код. Диапазон изменения выходного кода будет 000h…03FFh, что соответствует входному однополярному напряжению в диапазоне 0… +5000мВ. Чтобы найти напряжение Ui, соответствующее коду Wi, составим пропорцию:

Ui, мВ - Wi

5000, мВ - 03FF

Откуда получим:

Ui = (Wi * 5000) / 03FF, мВ (3.3)

Рисунок 3.4 - БСА функции display()

Полученное по формуле (3.3) значение напряжения Ui будет в милливольтах. Для отображения на дисплее значения Ui в вольтах можно находить цифры путем целочисленного деления результата последовательно на 1000, 100 и 10.

Рассмотрим пример реализации функции display().

/*Глобальные переменные, используемые в функции display( ) */

unsigned int W1; //коды АЦП

unsigned int W2;

unsigned int W3;

unsigned int W4;

unsigned int W5;

char key;//номер нажатой клавиши

void display()

{

int mvolts; //переменная для хранения величины напряжения в

//милливольтах

char num; //переменная для хранения цифр напряжения в

//вольтах

switch(key)

{

case 1:

{

mvolts = ((long)W1*5000) / 0x03FF; //преобразование

//кода W1 в /милливольты

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,4, "Work Mode");

Lcd_Out(2,4, "U1=");

num = mvolts / 1000;

Lcd_Chr_Cp(48+num); // вывод цифры в коде ASCII

Lcd_Chr_Cp('.'); //вывод на ЖКД десятичной точки

num = (mvolts / 100) % 10; //извлечение десятых долей

//вольта

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Out_Cp("V"); //в текущую позицию курсора


Подобные документы

  • Разработка структурной схемы и обобщенного алгоритма работы прибора. Оценка максимальной погрешности линейного датчика давления и нормирующего усилителя. Разработка элементов принципиальной электрической схемы микропроцессорной системы сбора данных.

    курсовая работа [2,1 M], добавлен 08.02.2015

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

    курсовая работа [304,4 K], добавлен 17.08.2013

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

    курсовая работа [1,7 M], добавлен 25.12.2011

  • История развития центрального процессора. Основные проблемы создания многоядерных процессоров. Проектирование микропроцессорной системы на базе процессора Intel 8080. Разработка принципиальной схемы и блок-схемы алгоритма работы микропроцессорной системы.

    курсовая работа [467,6 K], добавлен 11.05.2014

  • Виды терморегуляторов и их общее устройство. Разработка устройства для управления микроклиматом в теплице. Возможные варианты модернизации системы контроля температуры. Блок инициализации микроконтроллера. Разработка структурной схемы работы программы.

    курсовая работа [1,8 M], добавлен 27.05.2015

  • Разработка функциональной и принципиальной схемы. Выбор управляющего контроллера. Описание МК PIC16F626, МК AVR, МК 51. Выбор элементной базы. Разработка управляющей программы. Описание алгоритма работы программы. Схема устройства, листинг программы.

    курсовая работа [492,9 K], добавлен 28.12.2012

  • Общая характеристика и принцип работы электронных весов. Порядок преобразования аналогового сигнала веса в цифровую форму с участием микропроцессора. Составление блок-схемы алгоритма работы электронных весов. Описание интерфейсов ввода и вывода.

    курсовая работа [784,9 K], добавлен 28.06.2011

  • Основные аналитические соотношения. Блок схемы и алгоритм решения задачи. Проверка работоспособности алгоритма вручную. Таблица идентификации переменных. Формы входной и выходной печати. Разработка и отладка программы. Инструкция для работы с программой.

    курсовая работа [69,8 K], добавлен 13.02.2012

  • Процесс моделирования работы САПР: описание моделирующей системы, разработка структурной схемы и Q-схемы, построение временной диаграммы, построение укрупненного моделирующего алгоритма. Описание математической модели, машинной программы решения задачи.

    курсовая работа [291,6 K], добавлен 03.07.2011

  • Преобразование матрицы по заданным правилам. Методика работы с массивами, основанная на классических алгоритмах. Разработка и описание блок-схемы алгоритма. Листинг программы, экраны работы и отладки программы. Инструкция для пользователей программы.

    контрольная работа [338,4 K], добавлен 29.01.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.