Раздел: Документация
0 ... 32 33 34 35 36 37 38 ... 105 pieslice(x,y,0.360,10); setcolor(magenta), circle(x,y,10); setcolor(yellow); circle(x,y,5); (♦-Библиотека ресурсов № 03 (рисование окон и вывод сообщений).-*) procedure draw message(x1,у1,width,height,color box:integer, message.string; font,size text,color textinteger); (* x1,y1 - координаты левого края надписи; width и height - ширина и высота окна сообщения; color box - цвет окна сообщения; message - сообщение, выводимое на экран; Font,size text,color text - шрифт, размер и цвет текста.*) begin setfillstyle(1, color box); bar(x1,y1-round(height/2),x1+width,y1+round(height/2)); setcolor(color text); settextstyle(font,0, size text); outtextxy(x1+5,y1-4, message); end; («-Библиотека ресурсов № 04 (считывание символов при нажатии функциональных клавиш).-*) function getkey:string; var ch:char; begin ch:=readkey; («Считывание символа с клавиатуры.*) if ch=#0 then («Если нажата дополнительная клавиша, то выполняются следующие процедуры,*) ch:=readkey; («Считывание клавиши снова для получения кода символа.*) end; begin if ch=#72thengetkey=UP; if ch=#80thengetkey=D0WN; if ch=#75thengetkey=LEFT; if ch=#77thengetkey=RIGHT; if ch=#82thengetkey= INSERT if ch=#83thengetkey=DELETE if ch=#71thengetkey=HOME; if ch=#79thengetkey=END; («Стрелкавверх = #72.*) («Стрелкавниз = #80.*) (♦Стрелкавлево = #75.*) (•Стрелкавправо = #77.*) (♦Клавиша insert = #82.•) (•Клавиша delete = #83.•) (♦Клавиша home = #71.•) («Клавиша end = #79.«) end else (♦Если нажата не дополнительная клавиша.♦) begin if ch=#13 then getkey.=RETURN else if (ch=8) or (ch=127) then getkey.=BACKSPACE else getkey=ch; end; end; Procedure init 8253; begin (♦Управляющее слово = b6h = 10110110b: 10= выбор счетчика 2; 11= сначала чтение/запись младшего байта, 011 = режим 3; 0 = шестнадцатибитовый двоичный счет.*) затем старшего; port($43) port($42) port($43) port($61) port($43) end; =$Ь6;(«Запись слова в управляющий регистр §253.*) =255;(«Загрузка младшего байта.*) =255;(«Загрузка старшего байта.*) =port($61)or 1 (*Выключение внутреннего динамика.*) =$80(*80h - команда фиксации для счетчика 3.*) Function read 8253:integer; («Считывание младшего и старшего байтов счетчика.*) var low byte,high byte:byte; begin low byte:=port($42); high byte:=port($43); read 8253:=low byte+256*high byte; end; function find period(address:integer; bit weight:integer):real; (* Нахождение длительности периода входного цифрового сигнала. Входной сигнал определяется адресом порта ввода и номером бита: Бит 0 - bit weight=1 Бит 1 - bit weight=2 Бит 7 - bit weight=128.«) var count,average number,timel,time2:integer; begin («Определение промежутка времени, в течение которого входной сигнал имеет низкий уровен Это значение будет использоваться для вычисления переменной average number.*) repeat until port(address) and bit weight=bit weight; («Высокий уровень.*) repeat until port(address) and bit weight=0;(«Низкий уровень.*) timel:=read 8253;(«Считывание первого значения счетчика.*) repeat until port(address) and bit weight=bit weight; («Снова высокий уровень.*) tlme2:=read 8253;(«Считывание второго значения счетчика.*) average number:=round(10000/(time2-time1));(«Определение average number. if average number=0 then average number:=1; repeat until port(address) and bit weight=bit welght; (Высокий уровень.*) repeat until port(address) and bit weight=0;(«Низкий уровень.*) timel:=read 8253;(«Считывание первого значения счетчика.») for count:=1 to average number do («Нахождение спада входного сигнала.») begin repeat until port(address) and bit weight=bit weight; («Высокий уровень.») repeat until port(address) and bit weight=0;(«Низкий уровень.*) end; time2•=read 8253;(«Считывание второго значения счетчика.*) find period =((time1-time2)*i/2*l193180)*le6/average number), end; Библиотека ресурсов WLIB.PAS (•Программная библиотека ресурсов А.*) (Процедуры ввода/вывода для параллельного, последовательного и игрового портов.*) Library LibA; uses Wincrt; (•-Библиотека ресурсов № А1 (определение базового адреса LPT) -•) Function Centronic(x1 integer) integer; export; (• $000 $0408 содержит базовый адрес для LPT1, ):$040А содержит базовый адрес для LPT2, ,$040С содержит базовый адрес для LPT3, :$040В содержит базовый адрес для LPT4, ):$0411 содержит количество параллельных портов.*) var number of LPT,LPT1,LPT2,LPT3,LPT4:integer; begin number of lpt:=mem($0000,$0411); («Считывание количества установленных лараллельных портов *) number of lpt:=(number of lpt and (128+64)) shr 6; lpt1 lpt1 lpt2 lpt3 lpt4 =0; lpt2:=0, lpt3.=0; lpt4=0; =memw( =memw( =memw($0000.$040C); =memw($0000:$040E); (Процедура считывания из памяти.*) case х of centronic:=number of LPT; centromc:=LPT1; centronic:=LPT2; centronic:=LPT3; centronic:=LPT4; end; end; (♦-Библиотека ресурсов № A2 (нахождение веса бита).-*) Function bit weight(bit:integer):integer; export; var l,dummy.integer; begin if bit=l then bit weight:=1 else begin dummy:=1 for i:=i to bit-1 do dummy=dummy*2; bit weight:=dummy; end; end, 0 ... 32 33 34 35 36 37 38 ... 105
|