Програма керування пристроєм відображення графічних ефектів на базі мікроконтроллера ATMEGA16 через послідовний порт RS-232

Розробка програмного забезпечення керування роботою мікропроцесорної системи на базі мікроконтролера ATMEGA16 по протоколу RS-232. Технічне завдання, напрямки і спеціальні вимоги розробки системи. Вибір об’єктно-орієнтованої технології програмування.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык украинский
Дата добавления 23.01.2012
Размер файла 649,6 K

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

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

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

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

ВСТУП

Ми переживаємо епоху мікропроцесорної техніки, яка все швидше розвивається і уже є невід'ємною частиною усіх галузей виробництва та медицини. Виходячи з цього постає проблема управління пристроями, які керуються мікроконтролерами.

Перед розробником програмного забезпечення стоїть декілька проблем в розробці, які потрібно вирішити. Необхідно забезпечити пряме управління пристроєм з зрозумілим інтерфейсом, щоб необізнаний користувач у тонкощах роботи системи міг керувати нею.

У цьому і полягає суть даної курсової роботи. Розробити програму керування мікропроцесорної системи.

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

1.1 Аналіз технічного завдання

Мето даної роботи є розробка програми керування пристроєм відображення графічних ефектів на базі мікроконтроллера ATMEGA16 через послідовний порт RS-232.

Розроблений програмний продукт має отримувати доступ до керування пристроєм, отримання даних про його поточний стан та вивід зображення за його допомогою.

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

Детальніше ці та інші вимоги можна переглянути у технічному завданні (додаток А) до курсової роботи.

1.2 Архітектура та опис послідовного порту RS-232

Стандарт на послідовний інтерфейс RS-232C був опублікований в 1969 р. Асоціацією електронної промисловості (EIA). Спочатку цей інтерфейс використовувався для підключення ЕОМ і терміналів до системи зв'язку через модеми, а також для безпосереднього підключення терміналів до машин. До недавнього часу послідовний інтерфейс використовувався для широкого спектру периферійних пристроїв (плоттери, принтери, миші, модеми і ін.), але зараз активно витісняється інтерфейсом USB.

Стандарт RS-232C визначає:

· механічні характеристики інтерфейсу - роз'єми і з'єднувачі;

· електричні характеристики сигналів - логічні рівні;

· функціональні описи інтерфейсних схем - протоколи передачі;

· стандартні інтерфейси для вибраних конфігурацій систем зв'язку;

У 1975 р. були прийняті стандарти RS-422 (електричні характеристики симетричних ланцюгів цифрового інтерфейсу) і RS-423 (електричні характеристики несиметричних ланцюгів цифрового інтерфейсу), що дозволяють збільшити швидкість передачі даних по послідовному інтерфейсу.

Зазвичай ПК мають в своєму складі два інтерфейси RS-232C, які позначаються COM1 і COM2. Можлива установка додаткового устаткування, яке забезпечує функціонування у складі РС чотири, восьми і шістнадцяти інтерфейсів RS-232C. Для підключення пристроїв використовується 9-контактний (DB9) або 25-контактний (DB25) роз'єм.

Інтерфейс RS-232 містить сигнали керування, забезпечуючи асинхронний режим функціонування. При цьому один з пристроїв (зазвичай комп'ютер) виступає як DTE (Data Terminal Equipment - крайовий пристрій), а інше - як DCE (Data CommunicationEquipment - пристрій передачі даних), наприклад, модем. Відповідно, якщо для DTE якийсь сигнал є вхідним, то для DCE цей сигнал буде вихідним, і навпаки.

В той же час, в простому випадку для обміну можуть використовуватися лише три лінії: TXD, RXD і SG - без використання сигналів керування.

Основні принципи обміну інформацією по інтерфейсу RS-232C полягають в наступному:

· Обмін даними забезпечується по двох ланцюгах, кожна з яких є для однієї із сторін передавальною, а для іншої - приймальні.

· У початковому стані по кожному з цих ланцюгів передається двійкова одиниця, тобто стопова посилка. Передача стопової посилки може виконуватися скільки завгодно довго.

· Передачі кожного пакету даних передує передача стартової посилки, тобто передача двійкового нуля протягом часу, рівного часу передачі одного біта даних.

· Після передачі стартової посилки забезпечується послідовна передача всіх розрядів даних, починаючи з молодшого розряду. Кількість бітів може бути 5, 6, 7 або 8.

· Після передачі останнього біта даних можлива передача контрольного розряду, який доповнює суму по модулю 2 переданих розрядів до парності або непарності. У деяких системах передача контрольного біта не виконується.

· Після передачі контрольного розряду або останнього біта, якщо формування контрольного розряду не передбачене, забезпечується передача стопової посилки.

Обмін даними по описаних вище принципах вимагає попереднього узгодження приймача і передавача за (тривалості біта) (300-115200 біт/с) швидкістю, кількості використовуваних розрядів в символі (5, 6, 7 або 8), правилам формування контрольного розряду (контроль по парності, по непарності або відсутність контрольного розряду), тривалості передачі стопової посилки (1 битий, 1,5 битий або 2 битий).

Рисунок 1.1 - Схема виходів на послідовному порті RS-232

2. РОЗРОБКА СТРУКТУРИ ПРОГРАМИ

2.1 Опис структурної моделі програми

Программа складається з чотирьох функціональних блоків, вводу вхідних даних, перевірки з'єднання, керування сигналами та блоку завантаження ефектів. Структура та опис їх роботи наведені нижче.

Завданням блоку вводу вхідних даних є збір параметрів для роботи з програмою, вибір користувачем режиму роботи з приладом, встановлення параметрів з'єднання та вибору ефектів для завантаження.

Блок перевірки з'єднання реалізує отримання даних з послідовного порту, наявність порту, статус передачі, та визначення стану приладу.

В реалізацію блоку керування сигналами ввійшли операції над пристроєм в режимі реального часу, та відповіді його на сигнали протоколу.

Блок завантаження ефектів в свою чергу виконується в тому разі коли користувач вибрав завантаження уже підготовлених раніше наборів операцій для приладу.

2.2 Опис функціональної моделі програми

Для більшого розуміння роботи блоків програми, етапи роботи розбито на функції, які описуються у функціональній схемі роботи програми.

Насамперед, встановлюються початкові параметри роботи та вибір її режиму. Користувачу надається вибір, працювати з пристроєм у режимі реального часу, завантажити підготовлені раніше набори операцій, чи за допомогою редактора створювати власні набори ефектів.

Наступним кроком є перевірка на доступність з'єднання з приладом та послідовного порту, за який слідує повернення результату перевірки у вигляді виводу повідомлення.

Якщо усі попередні операції були успішні слідує завантаження даних в мікроконтролер з подальшим відображенням операцій на матриці індикаторів.

2.3 Проектування компонентів програми

Перш, ніж розпочати реалізацію програми, проводиться відображення функціональної взаємодії процедур та методів у програмі за допомогою блок-схем. Структурні взаємозв'язки у блок-схемах алгоритмів показують, наприклад, яка дія відбудеться внаслідок виконання тої чи іншої команди, або ж який результат буде отриманий при певних вхідних даних.

Спочатку проводиться побудова загального алгоритму роботи всієї програми. Даний алгоритм зображений нижче на рис.2.3.

Одразу після завантаження програми користувач повинен вибрати режим роботи з приладом або почати створення графічних ефектів. В залежності від вибору будуть відбуватися наступні етапи: встановлення з'єднання, яке передбачає собою вибір режиму роботи, NORMAL - що являє собою завантаження уже раніше підготовлених ефектів з збереженого файлу. LIVE - керування приладом в режимі реального часу, яке реалізовує передачу інструкцій на індикатори при редагування моделі куба в програмному вікні.

Після чого слідує вибір порту для роботи та його прослуховування для отримання інформації про поточний стан приладу у вигляді повідомлення про результат з'єднання. За успішного виконання цих дій проходить завантаження ефектів у мікроконтролер, та проводиться затримка у закритті порту поки передача не буде завершеною. Кінцем роботи стане відображення результату на матриці індикаторів, що і є успішним виконанням даного алгоритму роботи. Також потрібно звернути увагу на опис роботи вибору порту для комунікації з приладом та встановлення з'єднання.

Даний алгоритм описує процес попереднього з'єднання з кубом для отримання даних про стан приладу та його готовність до програмування.

Пункт встановлення порту для комунікації, передбачає собою пошук та завантаження доступних портів в системі. Серед яких потрібно вибрати той, до якого підключений пристрій, фрагмент коду наведено нижче.

QextSerialPort::QextSerialPort(const QString & name, QueryMode mode)

QextBaseType(name, mode)

Наступним кроком є перевірка вибраного порту на доступність, перевірки чи не зайнятий він іншим процесом, чи була здійснена його конфігурація системою, якщо ні, то повертаємося до вибору порту.

При успішній перевірці відправляється запит на поточний стан куба, який дає змогу визначити чи він активний та завантажити початкові конфігураційні дані. Щоб забезпечити подальшу роботу з кубом. В наступному алгоритмі, роботу з'єднання через послідовний буде розглянуто детальніше на рис.2.5. який показує структуру передачі уже готових фігур на мікроконтролер. Перших два пункти ідентичні схемі 2.4., якщо вони пройшли успішно то далі проводиться передача інформації про фігури, їх кількість та порядок відображення, час відображення.

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

Наступним слідує опис роботи та створення фігури на 3D моделі приладу.

Робота цієї операції можлива лише при виборі роботи в режимі реального часу. Передача сигналу матриці ініціалізує перевірку на доступність усіх індикаторів та підготовлює її для заповнення.

Наступним кроком є встановлення направляючих осей на координатній площині матриці, для коректного відображення при редагуванні віртуального зразка. Також додаються параметри засвічування чи згасання індикаторів.

3. РЕАЛІЗАЦІЯ ПРОГРАМИ

3.1 Вибір середовища розробки

Даний продукт реалізований в середовищі Qt 4.5 на мові програмування С++. C++ - мова програмування високого рівня з підтримкою декількох парадигм програмування: об'єктно-орієнтованої, узагальненої та процедурної. Розроблена Б'ярном Страуструпом в AT&T у 1979 році та названа «Сі з класами». Страуструп перейменував мову у C++ у 1983 р. Базується на мові С. Визначена стандартом ISO/IEC 14882:2003.

Вибір цієї мови був спричинений рядом її переваг для реалізації даного проекту, таких як:

· Швидкодія. Швидкість роботи програм на С++ практично не поступається програмам на С, хоча програмісти отримали в свої руки нові можливості і нові засоби.

· Масштабованість. На мові C++ розробляють програми для найрізноманітніших платформ і систем.

· Можливість роботи на низькому рівні з пам'яттю, адресами, портами. (Що, при необережному використанні, може легко перетворитися на недолік.)

· Можливість створення узагальнених алгоритмів для різних типів даних, їхня спеціалізація, і обчислення на етапі компіляції, з використанням шаблонів.

· Підтримуються різні стилі та технології програмування, включаючи традиційне директивне програмування, ООП.

Повний код програми, включно з усіма оголошеними і описаними процедурами, функціями, змінними та бібліотеками, знаходиться в лістингу головної програми в додатку Б. Код розробки робочого вікна (графічного інтерфейсу користувача) міститься у додатку В. Функції та структури, що використовуються, описані в даному розділі.

3.2 Розробка компонентів програми

Для ініціалізації керування послідовними портами, що реалізують підключення до продукту в програмі оголошено клас QextSerialPort. Крос-платформенний клас для послідовних портів.

Цей клас бере за основу наявний порт та перетворює його у віртуальний для більшого контролю і коректності роботи. Також присутня можливість керування повідомленнями про помилки та можливі конфлікти, які виникають під час виконання програми за замовчуванням, така поведінка може бути відключена шляхом визначення _TTY_NOWARN_ (відключити всі попередження) або _TTY_NOWARN_PORT_ (щоб включити від попередження) в проекті.

В даному випадку програмний продукт розрахований на запуск в середовищі ОС Windows, тому використовуватиметься інший тип цього класу, а саме Win_QextSerialPort. Фрагмент коду цього класу наведено нижче:

class Win_QextSerialPort: public QextSerialBase{

Q_OBJECT

friend class Win_QextSerialThread;

private:

/*!

* Цей метод являється частиною конструктора

*/

void init();

protected:

HANDLE Win_Handle;

HANDLE threadStartEvent;

HANDLE threadTerminateEvent;

OVERLAPPED overlap;

OVERLAPPED overlapWrite;

COMMCONFIG Win_CommConfig;

COMMTIMEOUTS Win_CommTimeouts;

QReadWriteLock * bytesToWriteLock;

qint64 _bytesToWrite; Win_QextSerialThread * overlapThread;

void monitorCommEvent();

void terminateCommWait();

virtual qint64 readData(char *data, qint64 maxSize);

virtual qint64 writeData(const char *data, qint64 maxSize);

public:

Win_QextSerialPort();

Win_QextSerialPort(Win_QextSerialPort const& s);

Win_QextSerialPort(const QString & name, QextSerialBase::QueryMode mode = QextSerialBase::Polling);

Цей конструктор пов'язує об'єкт з першим портом в системі, наприклад, COM1 для ОС Windows.

Win_QextSerialPort::Win_QextSerialPort():

QextSerialBase()

{

Win_Handle=INVALID_HANDLE_VALUE;

init();

}

Наступна функція задає параметри для послідовного порту, його ім'я та параметри.

Win_QextSerialPort::Win_QextSerialPort(const QString & name, const PortSettings& settings, QextSerialBase::QueryMode mode) {

Win_Handle=INVALID_HANDLE_VALUE;

setPortName(name);

setBaudRate(settings.BaudRate);

setDataBits(settings.DataBits);

setStopBits(settings.StopBits);

setParity(settings.Parity);

setFlowControl(settings.FlowControl);

setTimeout(settings.Timeout_Millisec);

setQueryMode(mode);

init();}

void Win_QextSerialPort::init()

{

_bytesToWrite = 0;

overlap.Internal = 0;

overlap.InternalHigh = 0;

overlap.Offset = 0;

overlap.OffsetHigh = 0;

overlap.hEvent = CreateEvent(NULL, true, false, NULL);

overlapThread = new Win_QextSerialThread(this);

bytesToWriteLock = new QReadWriteLock;}

Встановлення затримки на читання та запис для порту в мілісекундах. 0 затримка заборонена, -1 затримати негайно.

void Win_QextSerialPort::setTimeout(long millisec) {

LOCK_MUTEX();

Settings.Timeout_Millisec = millisec;

if (millisec == -1) {

Win_CommTimeouts.ReadIntervalTimeout = MAXDWORD;

Win_CommTimeouts.ReadTotalTimeoutConstant = 0;

} else {

Win_CommTimeouts.ReadIntervalTimeout = millisec;

Win_CommTimeouts.ReadTotalTimeoutConstant = millisec;

}

Win_CommTimeouts.ReadTotalTimeoutMultiplier = 0;

Win_CommTimeouts.WriteTotalTimeoutMultiplier = millisec;

Win_CommTimeouts.WriteTotalTimeoutConstant = 0;

if (queryMode() != QextSerialBase::EventDriven)

SetCommTimeouts(Win_Handle, &Win_CommTimeouts);

UNLOCK_MUTEX();}

Закриття послідовного порту реалізується в наступній функції.

void Win_QextSerialPort::close()

{

LOCK_MUTEX();

if (isOpen()) {

flush();

if (overlapThread->isRunning()) {

overlapThread->stop();

if (QThread::currentThread() != overlapThread)

overlapThread->wait();

}

if (CloseHandle(Win_Handle))

Win_Handle = INVALID_HANDLE_VALUE;

_bytesToWrite = 0;

QIODevice::close();

UNLOCK_MUTEX();

}

Після перевірки портів системи та встановлення їм параметрів роботи, керування ними передається користувачеві, виводиться його ім'я, перевіряється доступність. Після чого ці значення присвоюються інтерфейсам програми для взаємодії з ними. Функції перечисленні вище, наведені в прикладах коду, що слідуватимуть далі.

Наступний фрагмент коду описує перевірку порту на доступність та можливість підключення чи відключення користувача.

void CubeCommunication::ConnectionToggle(bool state) {

qDebug() << "ConnectionToggled";

//Підключення

if(state == true) {

if(this->ConnectionOpen()) { //Порт відкритий??

if(ConnectionTest()==1) { //Куб підключено??

connected = true;

ComPortCombo->setEnabled(false);

}

else {

this->ConnectionClose();

connected = false;

QPushButton* PSender = (QPushButton*)QObject::sender();

PSender->setChecked(false);

emit findingCubeFailed(serial->portName());

}

}

else {

QPushButton* PSender = (QPushButton*)QObject::sender();

PSender->setChecked(false);

ComPortCombo->setEnabled(true);

connected=false;

}

}

//Відключення

else {

this->ConnectionClose();

ComPortCombo->setEnabled(true);

connected=false;

}

Після чого слідує вибір режиму роботи з приладом. Режим програмування, або режим реального часу.

void CubeCommunication::LiveModeToggle(bool state) {

qDebug()<<"LiveModeToggle";

if(state == true) {

if(this->LiveModeEnter()) {

qDebug("CubeCommunications: Live Mode Entered");

liveModeActive=true;

}

else {

QPushButton* PSender = (QPushButton*)QObject::sender();

PSender->setChecked(false);

liveModeActive=false;

}

}

else {

if(this->LiveModeLeave()) {

qDebug("CubeCommunications: Live Mode Left");

qDebug() << Q_FUNC_INFO;

liveModeActive = false;

}

}

Наступні дві функції описують команди входу і виходу кубу з режиму реального часу.

int CubeCommunication::LiveModeEnter() {

if(!isConnected()) {

return 0;}

qDebug("LiveModeEnter");

this->serial->write("L"); //Вхід в LiveMode

char c; //Очистка буферу послідовного порту

while(this->serial->getChar(&c));

return 1;}

//! Вихід з LiveMode

int CubeCommunication::LiveModeLeave() {

if(!isConnected()) {

return 0;}

qDebug("LiveModeLeave");

this->serial->write("N"); // Вихід з LiveMode

char c; // Очистка буферу послідовного порту

while(this->serial->getChar(&c));

return 1;}

Наступник кроком є запуск нового послідовного потоку для програмування куба. Новий потік створюється з низьким приорітетом.

void CubeCommunication::startProgramming(QByteArray data, int count) {

qDebug()<<"startProgramming " << count << "Figures";

SerialThread *programmThread = new SerialThread(this->serial, data, count);

programmThread->start(QThread::LowPriority);

connect(programmThread, SIGNAL(percentageFinished(int)), this, SIGNAL(programmingPercentage(int)));

connect(programmThread, SIGNAL(programmingSuccessful()), this, SIGNAL(programmingSuccessful()));

connect(programmThread, SIGNAL(programmingFailed()), this, SIGNAL(programmingFailed()));

}

При взаємодії з інтерфейсом 3D моделі дані посилаються на куб, якщо він в режимі реального часу, та відображаються на ньому.

void CubeCommunication::updateLiveModeStates(QBitArray *states) {

if(!this->connected || !this->liveModeActive)

return;

QByteArray bytesFigure(27,'0');

bytesFigure[0] = '*'; //Початок даних

int i = 0;

for(int b = 1; b < 26; b++) {

char Insertion = 0;

Insertion += (int)states->at(++i)<<4;

Insertion += (int)states->at(++i)<<3;

Insertion += (int)states->at(++i)<<2;

Insertion += (int)states->at(++i)<<1;

Insertion += (int)states->at(++i);

bytesFigure[b]=Insertion;

}

bytesFigure[26] = '~'; //Кінець

serial->write(bytesFigure);

char c; //Очистка буфера

while(this->serial->getChar(&c));

}

Далі проходить відкриття порту який виводиться на головне вікно програми, результати відкриття слідують виводом повідомлень.

int CubeCommunication::ConnectionOpen() {

qDebug()<<"ConnectionOpen";

serial->setPortName(ComPortCombo->currentText());

serial->setBaudRate(BAUD19200);

serial->setFlowControl(FLOW_OFF);

serial->setParity(PAR_NONE);

serial->setDataBits(DATA_8);

serial->setStopBits(STOP_1);

serial->setTimeout(50);

if(serial->open(QIODevice::ReadWrite))

{

qDebug() << tr("Opening %1 successful").arg(serial->portName());

serial->setBaudRate(BAUD19200);

serial->setFlowControl(FLOW_OFF);

serial->setParity(PAR_NONE);

serial->setDataBits(DATA_8);

serial->setStopBits(STOP_1);

serial->setTimeout(50);

emit(openingCOMPortSuccessful(serial->portName()));

return 1;

}

else {

emit(openingCOMPortFailed(serial->portName()));

qDebug() << tr("Failed opening %1").arg(serial->portName());

return 0;

В наступній функції описані дії по перевірці підключення куба по вже

відкритому порту. Якщо кую отримує #T, то відповідає Т, що означає він присутній по заданому порту.

int CubeCommunication::ConnectionTest() {

qDebug()<<"ConnectionTest";

if(!serial->isOpen())

return 0;

char c; //Очистка буфера

while(this->serial->getChar(&c));

serial->write("#"); //Перехід до загрузчика

serial->write("T"); //Запис 'T'

int out_time = 0;

c = 0;

do{

serial->getChar(&c) ; //отримання відповіді

out_time++;

qDebug()<<" Character Received: " << c << "- Time: "<<out_time;

if(out_time > 2) break;

}

while(c != 'T');

if(out_time > 2) {

return -1; //перевірка провалилась

qDebug()<< "Could not find a Cube at Port" << serial->portName();

} else {

serial->write("R"); //повернення до головного вікна

return 1; //куб підключено

}

}

Приведено фрагмент функції закриття з'єднання.

int CubeCommunication::ConnectionClose(){

qDebug("Close COM PORT ");

serial->close();

return 1;

}

4. ТЕСТУВАННЯ ПРОГРАМИ

4.1 Алгоритм тестування програми

З метою уникнення небажаних результатів роботи програми, необхідно провести її комплексне тестування. Тестування являє собою перевірку правильності роботи програми, чи всі необхідні функції вона виконує, як саме вона їх виконує, та чи немає критичних збоїв чи переривання роботи (некоректного завершення) програми і являється обов'язковим при розробці програмних продуктів.

У разі виявлення певних проблем при роботі програми, розробник має можливість (і зобов'язаний) усунути ці проблеми, щоб користувач мав повноцінну програму, яка забезпечує коректне виконання всіх функції, обумовлених в технічній документації, яка завжди обов'язково поставляється з програмним продуктом.

Тестування програми проводиться за певним алгоритмом, який відображає порядок виконання дій при тестуванні. Даний алгоритм забезпечує черговість перевірки виконання тих чи інших функцій.

Дана черговість визначається пріоритетністю тих чи інших функцій. Це зрозуміло, адже як можна проводити перевірку вилучення пристрою, якщо не відбувалася перевірка формування списку пристроїв: можливо необхідний пристрій навіть не система не «бачить» і він не доданий до списку.

Схему алгоритму тестування програми зображено на графічному додатку Д.

4.2 Опис інтерфейсів програми

На рисунку 4.1 зображено загальне вікно програми. В цюому вікні зібрані усі інтерфейси керування програмою.

По центру рисунка зображено 3D модель куба, реалізовану за допомогою технології OpenGL.

Рисунок 4.1 - Загальний інтерфейс програми

Рисунок 4.2 - Панель інструментів програми

На даному рисунку зображено панель інструментів, яка є доступна для користувача. За допомогою цієї панелі можливо зберегти файл ефектів, відкрити раніше підготовлений, виставити індикатори в ряд, встановити осі відображення, змінити тіло моделі на чорний колір для кращого сприйняття, та перейти в діалогове меню вибору колірної схеми моделі

Рисунок 4.3 - Інтерфейси керування індикацією

На рисунку 4.3 показані інтерфейси взаємодії користувача з індикаційною матрицею, за допомогою яких можна засвітити всі індикатори, погасити їх, засвітити індикатори в випадковому порядку, та інвертувати індикатори.

Рисунок 4.4 - Панель обернення індикаторів за осями

На цій панелі присутні інтерфейси керування переміщенням засвітки індикаторів за допомогою зміщення їх по заданій осі на 1.

Рисунок 4.5 - Панель керування системами індикаторів

За допомогою цієї панелі можна засвічувати одразу ряд індикаторів, по горизонталі та вертикалі.

Рисунок 4.6 - Комунікаційні інтерфейси програми

Наступною було реалізовано панель керування підключенням. На ній присутні доступні послідовні порти для з'єднання, вибір режиму роботи з приладом а також індикатор процесу завантаження даних.

Рисунок 4.7 - Вікно параметрів фігур

В даному вікні були реалізовані наступні дії: додавання нової фігури, переміщення її вперед та назад відносно іншої, клонування т, видалення фігур. Також здійснено встановлення часу затримки кожної фігури та попередній перегляд за допомогою 3D моделі.

ВИСНОВОК

програмне забезпечення керування мікропроцесорна система

Метою даної лабораторної роботи була розробка програмного забезпечення керування роботою мікропроцесорної системи на базі мікроконтролера ATMEGA16 по протоколу RS-232. Під час виконання роботи було сформовано технічне завдання, в якому були визначені основні напрямки і спеціальні вимоги, необхідні для розробки системи.

Наступним етапом був вибір об'єктно-орієнтованої технологій програмування. Також була вибрана мова програмування C++ та середовище розробки QT-creator. На етапі аналізу предметної області задачі було побудована структурна схема програмного продукту та описана взаємодія її функціональних елементів. На етапі реалізації було розроблено код програмних компонентів, а також здійснена інтеграція цих компонентів у єдиний продукт та приведена схема їх взаємодії.

На останньому етапі складено алгоритм тестування та проведено опис інтерфейсу програми.

ПЕРЕЛІК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ

1. Программирование на C++ с использованием библиотеки Qt 4 / Юрий Владимирович Земсков / БХВ-Петербург, 2007. 880с.

2. Справочная документация по Qt: URL: http://doc.crossplatform.ru/qt/4.7.x/qtopengl.html.

3. Qt+OpenGl -- Основы : URL : http://habrahabr.ru/blogs/cpp/132674/

Размещено на Allbest


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

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