{ ********************************************************************** ** Programma: S2DEB2.PAS Versione: 1.1- 15 Marzo 1999 ** ** Ditta: GRIFO(r) Via Dell'Artigiano 8/6 ** ** 40016 San Giorgio di Piano (BO) ** ** Tel. 051-892052 FAX 051-893661 ** ** Realizzato da: Tassinari Enea ** ********************************************************************** Il programma e' in grado di visualizzare su un determinato display il codice esadecimale di un tasto premuto da tastiera. Per il funzionamento del seguente programma e' necessario un compilatore pascal (parte software), una scheda DEB01 e una scheda GPC-15R opportunamente collegate (parte hrdware). } program S2DEB2; {$C-} { disabilita il Ctrl+C } const CNT=$17; { registro di controllo e comando del PPI 82C55 } PDC=$16; { registro dati del port C } var TASTO:char; RIGA:integer; PC_OUT:integer; COLONNA:integer; const CODICI: array[1..16] of char = '147*2580369#ABCD'; { Assegno alla costante CODICI i sedici caratteri della tastiera esadecimale } procedure INIZIALIZZAZIONE; { Inizializzazione del registro di controllo dell' 82C55 } begin port[CNT]:=131; end; function LETT_PCL (INDIRIZZO:integer; BIT:byte):byte; { lettura dello stato del Port C } var TEMP:integer; begin TEMP:=port[INDIRIZZO]; { Leggo il port C } LETT_PCL:=TEMP and BIT; { Lettura del bit del port C indicato dalla variabile bit. } end; procedure VIS_TASTO; { Procedura per la visualizzazione di un tasto della tastiera della deb01 } var NUM:integer; begin NUM:=(COLONNA-1)*4+RIGA; gotoxy(50,8); write(CODICI[NUM]:2); { Visualizzo il carattere contenuto nella cella di memoria che corrisponde al risultato di NUM. } delay(400); { Immetto un ritardo di 400 ms } gotoxy(50,8); clreol; { Cancello la fine della riga } end; procedure TASTIERA; { Procedura per il controllo della tastiera della deb01 } var LETT_BIT:byte; VAL_RIG:integer; begin repeat PC_OUT:=16; for COLONNA:=1 to 4 do { Ciclo di scrittura della colonna } begin port[PDC]:=PC_OUT; { Settaggio del portC con PC_OUT. } for RIGA:=1 to 4 do { Ciclo di lettura della riga } begin VAL_RIG:=RIGA-1; LETT_BIT:=LETT_PCL(PDC,1 shl VAL_RIG); { Leggo le righe della tastiera. } if LETT_BIT=0 then VIS_TASTO; { Se leggo 0 ho premuto un tasto } end; { Chiudo il ciclo di lettura delle righe } PC_OUT:=PC_OUT shl 1;{ Aggiorno la variabile PC_OUT } end; { Chiudo il ciclo di lettura delle colonne } until keypressed; end; begin {programma principale } clrscr; INIZIALIZZAZIONE; gotoxy(12,3); writeln('VISUALIZZAZIONE DELLO STATO DELLA TASTIERA ESADECIMALE IN CORSO'); gotoxy(26,4); write('Premere un tasto per uscire'); gotoxy(27,8); write('* Stato della tastiera:'); gotoxy(27,7); write('**********************'); gotoxy(27,9); write('**********************'); TASTIERA; read(kbd,TASTO); end.