Автор: Пользователь скрыл имя, 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
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(
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)+'
bitmap:=tbitmap.Create;
case pr of
3: case st of
0: begin
bitmap.LoadFromFile('tank_
pole.Canvas.CopyRect(pole.
end;
1: begin
bitmap.LoadFromFile('tank_
pole.Canvas.CopyRect(pole.
end;
2: begin
bitmap.LoadFromFile('tank_
pole.Canvas.CopyRect(pole.
end;
3: begin
bitmap.LoadFromFile('tank_
pole.Canvas.CopyRect(pole.
end;
end;
4: case st of
0: begin
bitmap.LoadFromFile('tank_
pole.Canvas.CopyRect(pole.
end;
1: begin
bitmap.LoadFromFile('tank_
pole.Canvas.CopyRect(pole.
end;
2: begin
bitmap.LoadFromFile('tank_
pole.Canvas.CopyRect(pole.
end;
3: begin
bitmap.LoadFromFile('tank_
pole.Canvas.CopyRect(pole.
end;
end;
5: case st of
0: begin
bitmap.LoadFromFile('tank_
pole.Canvas.CopyRect(pole.
end;
1: begin
bitmap.LoadFromFile('tank_
pole.Canvas.CopyRect(pole.
end;
2: begin
bitmap.LoadFromFile('tank_
pole.Canvas.CopyRect(pole.
end;
3:begin
bitmap.LoadFromFile('tank_
pole.Canvas.CopyRect(pole.
end;
end;
0:
case st of
4: begin
bitmap.LoadFromFile('tank_h.
pole.Canvas.CopyRect(pole.
end;
5: begin
bitmap.LoadFromFile('tank_d.
pole.Canvas.CopyRect(pole.
end;
6: begin
bitmap.LoadFromFile('tank_l.
pole.Canvas.CopyRect(pole.
end;
7: begin
bitmap.LoadFromFile('tank_r.
pole.Canvas.CopyRect(pole.
end;
end;
end;
end;
Информация о работе Використання цифрових автоматів у проектуванні навчальних систем