Використання цифрових автоматів у проектуванні навчальних систем

Автор: Пользователь скрыл имя, 15 Декабря 2011 в 15:14, курсовая работа

Описание работы

Метою даної курсової роботи є допомога у вивчені системного програмування студентами. Надати студентові змогу наглядно побачити системне програмування пристроїв, об’єктів, які існують фізично, але в рамках навчальної програми не можуть використовуватись. Тому студентові надається можливість програмувати та керувати пристроями у так званих програмах-симуляторах.

Содержание

ВСТУП 3
РОЗДІЛ І. ОСНОВНІ ПОНЯТТЯ ТА СИНТЕЗ ЦИФРОВИХ АВТОМАТІВ 5
1.1 Класифікація Цифрових автоматів 5
1.1.1Акцептори і розпізнавачі. 5
1.1.2 Перетворювачі (Трансдруктори) 6
1.1.3 Детермінованість 7
1.2 Математична модель СА 8
1.3 Синтез цифрових автоматів 9
1.3.1 Формалізація завдання 10
1.3.2 Кодування станів 11
1.3.3 Синтез комбінаційної схеми 11
РОЗДІЛ ІІ. РОЗРОБКА ТА СИНТЕЗ ЦА ДЛЯ РЕАЛІЗАЦІЇ ПРОГРАМИ-СИМУЛЯТОРА КЕРУВАННЯ РОБОТОМ 12
2.1 Постановка задачі та вибір методів її реалізації 12
2.2 Синтез ЦА для керування роботом 12
2.3 Реалізація прграми-симулятора 16
2.3.1 Вибір методів та засобів для реалізації програми 16
ВИСНОВКИ 26
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ 27

Работа содержит 1 файл

Курсовой_ф.doc

— 201.50 Кб (Скачать)

procedure WMuser(var p: TMessage); message WM_User; 

Далі  описується процедура-обробник повідомлення, яка має наступний вигляд:

procedure TForm1.WMuser(var p: TMessage);  // надходить команда

begin

edit1.Text:=inttostr(p.LParam);

if p.LParam=1 then //стан не змінюється

begin

stan_n:=stan_r;

end;

case p.LParam of

2: case stan_r of

    0:   begin

          stan_n:=2;

          end;

    1:   begin

          stan_n:=3;

          end;

    2:   begin

          stan_n:=1;

          end;

    3:    begin

          stan_n:=0;

          end;

    4:    begin

          stan_n:=6;

          end;

    5:    begin

          stan_n:=7;

          end;

    6:     begin

          stan_n:=5;

          end;

    7:    begin

          stan_n:=4;

          end;

    end;

3:  case stan_r of

    0:   begin

          stan_n:=3;

          end;

    1:   begin

          stan_n:=2;

          end;

    2:   begin

          stan_n:=0;

          end;

    3:    begin

          stan_n:=1;

          end;

    4:    begin

          stan_n:=7;

          end;

    5:    begin

          stan_n:=6;

          end;

    6:     begin

          stan_n:=4;

          end;

    7:    begin

          stan_n:=5;

          end;

    end;

4:  case stan_r of             //загрузка предмета

    4:    begin

          stan_n:=0;

          end;

    5:    begin

          stan_n:=1;

          end;

    6:     begin

          stan_n:=2;

          end;

    7:    begin

          stan_n:=3;

          end;

    end;

5:   case stan_r of           //вигрузка предмета

    0:   begin

          stan_n:=4;

          end;

    1:   begin

          stan_n:=5;

          end;

    2:   begin

          stan_n:=6;

          end;

    3:    begin

          stan_n:=7;

          end; 

    end;

end;

dv_rob(p.LParam, stan_r);

if (p.LParam=4)and(pred<>2)and(pred<>0) then

  gruz:=pred;

if p.LParam=5 then

begin

  mas[an,bn]:=gruz;

  gruz:=0;

end;

graf(stan_r,stan_n);

draw(stan_n,gruz,an,bn) ;

stan_r:=stan_n;

end; 

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

Зміна положення  робота на полі здійснюється за допомогою процедури dv_rob(p.LParam, stan_r),  яка контролює стан поля та положення робота на полі шляхом занесення змін до масиву, який відповідає за поле. Контроль здійснюється наступною процедурою:

procedure TForm1.dv_rob(kom, stan: integer);

var

i,j: integer;

begin

bitmap:= tbitmap.Create;

for i:=1 to 22 do       //координати робота на полі

  for j:=1 to 14 do

    if mas[i,j]=1 then

      begin

        ax:=i;

        bx:=j;

      end;

case kom of        //аналіз вхідної команди

1: begin

case stan of        //аналіз поточного снану

    0,4: begin

          case mas[ax,bx-1] of

          0: pred:=0;  //Пуста клытинка

          2: pred:=2;  //стіна

          3: pred:=3;   //сoin

          4: pred:=4;    //rectangle

          5: pred:=5;   //trycle

          end;

          if pred<>2 then

          begin

          mas[ax,bx-1]:=1;

          an:=ax;

          bn:=bx-1;

          mas[ax,bx]:=0;

          end;           

        end;

    1,5:  begin

          case mas[ax,bx+1] of

          0: pred:=0;

          2: pred:=2;

          3: pred:=3;

          4: pred:=4;

          5: pred:=5;

          end;

           if pred<>2 then

           begin

        mas[ax,bx+1]:=1;

         an:=ax;

          bn:=bx+1;

          mas[ax,bx]:=0;

          end;

          end;

    2,6: begin

          case mas[ax-1,bx] of

          0: pred:=0;

          2: pred:=2;

          3: pred:=3;

          4: pred:=4;

          5: pred:=5;

          end;

          if pred<>2 then

           begin

          mas[ax-1,bx]:=1;

           an:=ax-1;

          bn:=bx;

        mas[ax,bx]:=0;

        end;

        end;

    3,7: begin

    case mas[ax+1,bx] of

          0: pred:=0;

          2: pred:=2;

          3: pred:=3;

          4: pred:=4;

          5: pred:=5;

          end;

          if pred<>2 then

           begin

    mas[ax+1,bx]:=1;

     an:=ax+1;

          bn:=bx;

        mas[ax,bx]:=0;

        end;

        end;

    end;  

Зображення робота на полі здійснюється за рахунок процедури  draw(stan_n,gruz,an,bn),яка має наступний вигляд: 

procedure TForm1.draw(st:integer; pr: integer; ad: integer; bd: integer);   //перемальовуєм робота 

begin

label2.Caption:=inttostr(ad)+'#'+inttostr(bd);

bitmap:=tbitmap.Create;

case pr of

3: case st of

  0:   begin

       bitmap.LoadFromFile('tank_coin.bmp');

       pole.Canvas.CopyRect(pole.CellRect(ad,bd),bitmap.Canvas,rect(0,0,35,35)); 

      end;

  1: begin

       bitmap.LoadFromFile('tank_coin_d.bmp');

       pole.Canvas.CopyRect(pole.CellRect(ad,bd),bitmap.Canvas,rect(0,0,35,35)); 

      end;

  2: begin

       bitmap.LoadFromFile('tank_coin_l.bmp');

       pole.Canvas.CopyRect(pole.CellRect(ad,bd),bitmap.Canvas,rect(0,0,35,35)); 

      end;

   3: begin

       bitmap.LoadFromFile('tank_coin_r.bmp');

       pole.Canvas.CopyRect(pole.CellRect(ad,bd),bitmap.Canvas,rect(0,0,35,35)); 

      end;

  end;

4:  case st of

  0:   begin

       bitmap.LoadFromFile('tank_rectan.bmp');

       pole.Canvas.CopyRect(pole.CellRect(ad,bd),bitmap.Canvas,rect(0,0,35,35)); 

      end;

  1:  begin

       bitmap.LoadFromFile('tank_rectan_d.bmp');

       pole.Canvas.CopyRect(pole.CellRect(ad,bd),bitmap.Canvas,rect(0,0,35,35)); 

      end;

  2:  begin

       bitmap.LoadFromFile('tank_rectan_l.bmp');

       pole.Canvas.CopyRect(pole.CellRect(ad,bd),bitmap.Canvas,rect(0,0,35,35)); 

      end;

  3:  begin

       bitmap.LoadFromFile('tank_rectan_r.bmp');

       pole.Canvas.CopyRect(pole.CellRect(ad,bd),bitmap.Canvas,rect(0,0,35,35)); 

      end;

  end;

5:  case st of

  0:  begin

       bitmap.LoadFromFile('tank_trycle.bmp');

       pole.Canvas.CopyRect(pole.CellRect(ad,bd),bitmap.Canvas,rect(0,0,35,35)); 

      end;

  1:  begin

       bitmap.LoadFromFile('tank_trycle_d.bmp');

       pole.Canvas.CopyRect(pole.CellRect(ad,bd),bitmap.Canvas,rect(0,0,35,35)); 

      end;

  2:  begin

       bitmap.LoadFromFile('tank_trycle_l.bmp');

       pole.Canvas.CopyRect(pole.CellRect(ad,bd),bitmap.Canvas,rect(0,0,35,35)); 

      end;

  3:begin

       bitmap.LoadFromFile('tank_trycle_r.bmp');

       pole.Canvas.CopyRect(pole.CellRect(ad,bd),bitmap.Canvas,rect(0,0,35,35)); 

      end;

  end;

0:

  case st of

  4:    begin

       bitmap.LoadFromFile('tank_h.bmp');

       pole.Canvas.CopyRect(pole.CellRect(ad,bd),bitmap.Canvas,rect(0,0,35,35)); 

      end;

  5: begin

       bitmap.LoadFromFile('tank_d.bmp');

       pole.Canvas.CopyRect(pole.CellRect(ad,bd),bitmap.Canvas,rect(0,0,35,35)); 

      end;

  6:  begin

       bitmap.LoadFromFile('tank_l.bmp');

       pole.Canvas.CopyRect(pole.CellRect(ad,bd),bitmap.Canvas,rect(0,0,35,35)); 

      end;

  7:   begin

       bitmap.LoadFromFile('tank_r.bmp');

       pole.Canvas.CopyRect(pole.CellRect(ad,bd),bitmap.Canvas,rect(0,0,35,35)); 

      end;

  end;

end;

end;

Информация о работе Використання цифрових автоматів у проектуванні навчальних систем