Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OKIU / методичка_ОКІУ.doc
Скачиваний:
25
Добавлен:
16.02.2016
Размер:
1.11 Mб
Скачать

Текст програми centexp.Pas

Рrоgram Centroniс_Ехреrimenta1_Воаrd;

(• Програма управління експериментальною платою паралельного порту *)

uses graph, crtt, dos;

var

l,led_selected:integer;

ch:char;

status: array [1..18] of integer;

key_pressed: string [10];

(* Підключення двох бібліотек: TLIB1 і TLIB2.*)

($1 c \ioexp\tplib1.pas}

{$1 c \ioexp\tplib2.pas}

Procedure Draw_panel;

(* Малювання панелі управління експериментальної плати *)

begin

(*Малювання 16 світлодіодів на екрані *)

serbkcolor(cyan);

for i:=1 to 16 do status[i]:=0;

for i:=1 to 8 do draw_led(30+i*30, 350, status[i]);

for i:=1 to 8 do draw_led(340+i*30, 350, status[8+i]); (*Виведення назв*)

draw_led(20,20,1);

draw_message(50,20,70,20,lightblue,'LED ON',0,1,yellow);

draw_led(20,60,0):

draw_message(50,60,70,20,lightblue,'LED OFF',0,1,yellow);

draw_message(50,390,230,20,blue, 'DATA PORT D1 - D8 ',0,1,yellow);

draw_message(360,390,110,20,blue, 'CONTROL D1 - D4 ',0,1,yellow);

draw_message(480,390,110,20,blue, 'STATUS D1 - D4 ',0,1,yellow);

(*Малювання панелі допомоги pнизу.*)

setfillstyle(1,magenta);

bar(1,420,800,480);

settextstyle(0,0,1);

outtextxy(20,430,'[ARROW]: Select а LED [SPACE]:Change LED status [Q]:Quit');

(*Малювання центрального повідомлення*)

draw_message(60,200,500,50,blue, 'Centronic Experimental Board',0,1,yellow);

(*Ініціалізація виходів.*)

write_data_port(p_address,0);

write_control_port(P_address,0);

end;

Procedure Output_Input; (*Процедура вводу/виводу.*)

var

output_byte, input_byte:byte;

begin

(*Обчислення значення даних, що передаються в порт даних.*)

output_byte:=0;

for i:=1 to 8 do output_byte:=output_byte+status[i]*bit_weight(i);

write_data_port(P_address,output_byte);

(|Обчислення значення даних, о передаються в порт управління.*)

output_byte:=0;

for i:=9 to 12 do output_byte:=output_byte+status[i]*bit_weight(i-8);

write_control_port(P_address,output_byte);

(*Зчитування даних з порту стану і обчислення стану світлодіодів.*)

input_byte:=read_status_port(P_address);

for i:=1 to 4 do status[12+i]:=round((input_byte and bit_weight(i))/bit_weight(i));

end;

Procedure scan_keyboard;

(*Опитування клавіатури для виявлення натиснення клавіші.*)

var

led_selected_old:integer;

begin

led_selected_old:=led_selected;

(*Виявлення натиснення клавіші.*)

keyрressed:=getkey;

if key_pressed='LEFT' then led_selected: = led_selected - 1;

if key_pressed='RIGHT' then led_selected: = led_selected + 1;

if key_pressed=' ' then status[led_selected]: = 1- status[led_selected];

(*Показ віртуальних світлодіодів та їх стану.*)

setbkcolor(cyan):

for i:=1 to 8 do draw_led(30+i*30,350,status[i]);

for i:=1 to 4 do draw_led(340+i*30,350,status[8+i]);

output_input;

for i:=5 to 8 do draw_led(340+i*30,350,status[8+i]);

if led_selected>12 then led_selected:=i2;

if led_selected<1 then led_selected:=1;

(*Відображення кола навколо вибраного світлодіода.*)

setlinestyle(0,0,3);

setcolor(cyan);

if led_selected_old<=8 then circle(30+30*led_selected_old,350,15)

else circle(340+30*(led_selected_old-8),350,15);

setcolor(yellow);

if led_selected<=8 then circle(30+30*led_selected,350,15)

else circle(340+30*(led_selected-8),350,15);

end;

(«Головна програма.*)

begin

centronic_address; (*Введення адреси паралельного порту.*)

initialize_graph; (*Ініціалізація графічного режиму.*)

draw_panel; (*Малювання віртуальної панелі.*)

led_selected:=1;

repeat

scan_keyboard;

(*Опитування клавіатури для виявлення натиснення клавіші.*)

until (key_pressed='Q') or (key_рressed='q');

closegraph; (*3акриття графічного режиму.*)

end.

Тут використовуються дві бібліотеки - TPLIB1.PAS і TPLIB2.PAS, які підключаються за допомогою директиви Тр6 INCLUDE.

{$I c:\ioexp\tplib1.pas}

{$I c:\ioexp\tplib2.pas}

Програма містить три головні процедури, що знаходяться в бібліотеці TLIB2.PAS: Draw_panel малює віртуальну панель управління експериментальною платою, Draw_led() і Draw_message() - зображення віртуальних світлодіодів і напису. Процедура Output_input управляє операціями вводу/виводу паралельного порту, Write_data_port(), write_control_port() і read_status_port() - операціями запису в регістри порту і читання з них; вони містяться в бібліотеці TPLIB1.PAS.

Процедура Scan_keyboard опитує клавіатуру для виявлення натиснення клавіш управління. Тут використовується функція getkey з бібліотеки TPLIB2.PAS.

Соседние файлы в папке OKIU