Раздел: Документация
0 ... 28 29 30 31 32 33 34 ... 105 Terminals for connecting resistors ЯВеш .button inputs El [ARROW]:Select ResistorSPACE]:Get resistance and button status [C]: Calibration at resistance input channelQ]j Quit , Рис. 3.9. Виртуальная панель управления экспериментальной платой игрового порта 3.3.1. Описание программы GAMEEXP.PAS Программа выполняет следующие функции: О считывает состояния двух (или четырех) цифровых входов; О измеряет длительность периода одновибратора для двух (четырех) аналоговых каналов; О калибрует аналоговые каналы; О измеряет сопротивление резистора. После запуска программы на экране появляется виртуальная панель управления (рис. 3.9), где изображены четыре виртуальных светодиода и восемь виртуальных контактов, соответствующих светодиодам и контактам на экспериментальной плате игрового порта. Внизу расположена панель помощи, на которой показаны клавиши управления программой с кратким описанием их действий: О [ARROW] (клавиши управления курсором) - выбор аналогового канала; О [SPASE] (пробел) - считывание сопротивления выбранного канала и состояния входов; О [С] или [с] - калибровка выбранного аналогового канала; О [QJ или [q] - выход из программы. Посредством клавиш <- и -> можно указать входной аналоговый канал. Выбранный канал выделяется двумя окружностями вокруг виртуального контакта на панели. Нажав на клавишу пробела при наличии резистора, соединенного с входом, вы получите длительность периода одновибратора. Если этот канал откалиб-рован, выводится также сопротивление резистора. Перед калибровкой (она осуществляется с помощью клавиши С) необходимо замкнуть накоротко входные контакты, а затем соединить с контактом резистор с известным сопротивлением. При работе программы данные считываются и с цифровых входов порта. Состояние битов данных индицируется виртуальными светодиодами. Текст программы GAMEEXP.PAS Program Game tester; («Программа управления экспериментальной платой игрового порта.*) uses graph,crt,dos; const game address=513; var l,led selected,Timel, Time2:integer; ch:char; status:array[1..18] of integer, period:real; interval 0,Interval R,standard R:array[1. .4] of real, key pressed:string[10]; strxstring, («Загрузка файлов библиотек.*) {$1 c:\ioexp\tplib2.pas} {$1 c:\ioexp\tplib1.pas} Function Resistance(period.real; led selected:integer):real; («Вычисление сопротивления при известном периоде.*) («Необходима калибровка.*) var dummy,dummy2.real; begin dummy2:=interval R[led selected]-interval 0[led selected]; if abs(dummy2)<0.0001 then dummy2:=1; dummy:=standard R[led selected]/dummy2»(period-interval 0[led selected]); if abs(dummy)>200 then resistance:=200 else resistance:=dummy; end, procedure draw panel; («Рисование панели управления.*) begin for i.=1 to 16 do status[i]-=0; setbkcolor(cyan), for i:=1 to 8 do draw led(20+i*40,350,status[i]); for i:=1 to 4 do draw led(420+i*40,350,status[i+8]); draw led(20,20,1); draw message(50,20,70,20,lightblue,LEO ON,0,1,yellow); draw led(20,60,0); draw message(50,60,70,20,lightblue,LEO OFF,0,1,yellow); setfillstyle(1,magenta); bar(1,420,800,480); settextstyle(0,0,1); outtextxy(10,425,[ARROW]:Select Resistor [Space]:Get resistance and button status); outtextxy(10,425,[C]Calibration of resistance input channel [Q]:Quit); draw message(60,200,500,50,blue,Game port Experimental board,0,2,yellow); drawjnessage(50,390,305,20,blue,AX VCC AY VCC BX VCC BY VCC,0,1,yellow); draw message(450,390,149, 20, blue, BB2BB1 BA2 BA1,0,1,yellow); draw message(55,320,280,20,cyan, Terminals for connecting resistors,0,1,red); draw message(450,320,120,20,cyan,Button inputs,0,1,red): end; procedure output input; var output byte,input byte:byte; begin («Считывание состояния кнопок.*) status[9]:=read game port(8); status[10]:=read game port(7); status[11]:=read game port(6); status[12]:=read game port(5); end; procedure scan keyboard; begin key pressed:=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 begin period :=interval game port(led selected); str(period«0.838:10:2,strx); draw message(25,460,250,10,magenta,Interval (us): +strx,0,1, lightcyan); str(resistance(period,led selected):10:2, strx); draw message(370,460,250,10,magenta,Resistance (kOhm): +strx,0,1, lightcyan); end; if (keypressed=Q) or (key pressed=q) then begin closegraph; clrscr: writeln(Calibration of resistance input channels CH,led selected:4); writeln(Short the input terminal for the selected channel); writeln(Press RETURN to continue); readln; interval 0[led selected]:=interval game port(led selected); writeln(Connect the standard resistor to the selected channel); write(Input the resistance of the resistor); readln(standard R[led selected]); intervalJ[led selected]:=interval game port(led selected); initialize graph; draw panel; end; end; 0 ... 28 29 30 31 32 33 34 ... 105
|