Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Примеры проектирования интерактивных систем




 

 

Задача 1. Электронная записная книжка

 

При включении питания на однострочном индикаторе отображается курсор. Записная книжка готова к вводу новых строк текста. При нажатии кнопки «Enter» происходит запись строки в память и очистка индикатора. Курсор ставится в начальную позицию. При нажатии кнопки «Del» происходит удаление символов справа от курсора. При нажатии кнопок «» и «®» курсор перемещается в соответствующую сторону. При нажатии кнопок «­» и «¯» происходит перелистывание записей книжки. При нажатии остальных кнопок происходит ввод соответствующих символов.

 

Перед проектированием рекомендуется построить структурную схему программной системы.

 

Структурная схема системы управления электронной записной книжкой

 

 


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

 

Код программы

 

void main (void) {

 

char key; // идентификатор кнопки

char i; // счетчик вх. симв.

char j; // счетчик строк массива

char S[17][3]; // строковый буфер

 

while(1) { // обр-ка вх. симв.

switch (key) {

case 13: Save_Buf(); Lcd_Clear(); break;

case 46: Lcd_Erase(i); break;

case 36: Lcd_Shift_Left(); break;

case 38: Lcd_Shift_Right(); break;

case 37: if(j>0) j--; Lcd_Put_Str(j); break;

case 40: if(j<2) j++; Lcd_Put_Str(j); break;

default: Put_Buf(key); Lcd_Put_Str(j); break;

}

DelayMs(100);

}

}

 

Задача 2. Программа управления светофором.

 

В начальном состоянии горит красный сигнал. На индикаторе отображается слово «красный». Через tк включается желтый сигнал. На индикаторе отображается слово «желтый». Через 2 секунды красный и желтый сигналы гаснут, включается зеленый сигнал на время tз. На индикаторе отображается слово «зеленый». Затем 3 секунды зеленый сигнал мигает с частотой 1 Гц и скважностью 50%. По окончании мигания зеленый сигнал выключается, на 2 секунды включается желтый сигнал, на индикаторе - слово «желтый», затем желтый сигнал выключается и включается красный сигнал, на индикаторе - слово «красный». Далее работа светофора повторяется.

При нажатии на кнопку «Н» в режиме горения красного, желтого или зеленого сигнала светофор входит в режим настройки и все сигналы выключаются. На индикаторе отображается «tк=XXc». После следующего нажатия на кнопку «Н» значение tк сохраняется и на индикаторе отображается «tз=XXc». После следующего нажатия на кнопку «Н» значение tз сохраняется и светофор переходит из режима настройки в состояние горения красного цвета. Значения tк и tз изменяются с помощью кнопок «◄» и «►» в интервале от 5с до 30с с шагом 1с.

 

 

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

 

 

Структурная схема системы управления светофором

 

 

Согласно условию задачи команды управления светофором зависят от того, какой свет горит в данный момент, то есть от текущего состояния светофора. Входной сигнал «время горения истекло» ведет к разным выходным сигналам в зависимости от состояния светофора. Нажатие кнопки «¯» и «­» также ведет к разной реакции программы: меняется время горения красного сигнала или зеленого или ничего не меняется.

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

 

1. По условию задачи выбираем внутренние состояния автомата:

1) горит красный свет

2) горят красный и желтый

3) горит зеленый

4) мигает зеленый

5) горит желтый

6) настройка времени горения красного цвета

7) настройка времени горения зеленого цвета

 

2. На базе условия задачи, структурной схемы и выбранных внутренних состояний строим таблицу переходов и выходов (матричная запись).

 

state Красный Красный-желтый Зеленый Миг. зеленый Желтый Настр. tк Настр. tз
Красный «Красный» (T){Z7(20), Z10} - - - (key=S) Z9 -
Красный-желтый - «Кр.-желтый» (T) {Z7(10tз), Z9, Z11, Z12} - - (key=S) { Z9, Z11} -
Зеленый - - «Зеленый» (T) Z7(3) - (key=S) Z13 -
Миг. зеленый - - - Z12, П(0,5) Z13, П(0,4) (T){Z7(20), Z10} - -
Желтый (T) {Z7(10tк), Z11, Z8} - - - «Желтый» (key=S) Z11 -
Настр. tк - - - - - «tк=XXc» (key=D) Z1 (key=U) Z2 (key=S)
Настр. tз (key=S) {Z7(10tк), Z8} - - - - - «tз=XXc» (key=D) Z3 (key=U) Z4

 

 

3. Код программы

 

const char D = 1; // Код нажатой кнопки

const char U = 2;

const char S = 3;

enum states {R,RY,G,GG,Y,SR,SG} state; // Состояния

char key; // Идентификатор нажатой кнопки

char state; // Идентификатор управляющего состояния

char t = 5; // Значение счетчика

char tr = 5; // Время красного сигнала, с

char tg = 5; // Время зеленого сигнала, с

bit T = 0; // Сигнал счетчика «время истекло»

bit RED = 1; // Красный цвет

bit YEL = 0; // Желтый цвет

bit GRN = 0; // Зеленый цвет

 

void main (void) {

t = 10*tr;

state = R;

// Реализация управляющего автомата

while (1) {

switch (state) {

case R: // Красный

printf(“Красный”);

if (T) { state=RY; T = 0; t=20; YEL=1; }

else if (key == S) { state=SR; RED=0; }

break;

case RY: // Красный-желтый

printf(“Красный-желтый”);

if (T) { state=G; T = 0; t=10*tg; RED=0; YEL=0; GRN=1; }

else if (key == S) { state=SR; RED=0; YEL=0; }

break;

case G: // Зеленый

printf(“Зеленый”);

if (T) { state=GG; T = 0; t=3; }

else if (key == S) { state=SR; GRN=0; }

break;

case GG: // Мигающий зеленый

GRN=1; DelayMs(500);

GRN=0; DelayMs(400);

if (T) { state=Y; T = 0; t=20; YEL=1; }

break;

case Y: // Желтый

printf(“Желтый”);

if (T) { state=R; T = 0; t=10*tr; YEL=0; RED=1; }

else if (key == S) { state=SR; YEL=0; }

break;

case SR: // Настройка времени красного сигнала

printf(“tк=%2dc”, tr);

switch(key) {

case D: if (tr>5) tr--; break;

case U: if (tr<30) tr++; break;

case S: state=SG; break;

}

break;

case SG: // Настройка времени зеленого сигнала

printf(“tз=%2dc”, tg);

switch(key) {

case D: if (tg>5) tg--; break;

case U: if (tg<30) tg++; break;

case S: state=R; T = 0; t=10*tr; RED=1; break;

}

break;

}

DelayMs(100); // такт работы автомата

if(t==0) T=1; else t--; // счетчик

}

}

 

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

Первая кнопка включает и выключает режим ввода числа (при этом включается и выключается выделение изменяемого разряда), переключает между разрядами и выделяет только изменяемый разряд, вторая - изменяет значение разряда числа от 0 до 9 (по кольцу). Вторая кнопка действуют только в режиме ввода числа.

Ввод кода кнопки осуществляется функцией сканирования клавиатуры ScanKbd, вывод символьного массива на индикатор - функцией Put_LCD, включение и отключение подсветки разряда - функциями Sel_ON(n) и Sel_OFF(n), где n - номер разряда; сохранение введенного числа в переменную целого типа при выключении режима ввода – Save(). Сканирование кнопок и вывод на индикатор выполняются через 50 мс.

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

 




Поделиться с друзьями:


Дата добавления: 2015-05-26; Просмотров: 382; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.026 сек.