User Tools

Site Tools


start:eti:carte:sources:uprincpl

Uprincpl.pas

UNIT Uprincpl;
{-----------------------------------------------------------------------------
  NOM DE L'UNITE : UPRINCIPL.PAS
  BUT            : Unité principale du projet.
  AUTEUR         : Michael Amarantidis & Stéphane Claus
  DATE           : Décembre 1996 / Janvier 1997
 
  MODIFIE LE     : 12.04.1997  -  2.02ß  -  S.Claus
  RAISON(S)      : - Ajout d'un menu pour le 8254
                   - Correction du composant PPI8255
                   - Ajout de commentaires
 
  REMARQUES      : - Ce programme utilise le fichier d'aide ETIPCBUS.HLP.
                     Pour en connaitre la liste complète: double clic sur
                     l'îcone de l'application dans la boîte de dialogue
                     "A propos de...".
 
                   - Pratiquement toutes les procédures et fonctions ont un
                     paramètre "Sender: TObject".
                     Il n'est jamais décrit dans les entêtes des procédures.
                     Ce paramètre Sender, dans un gestionnaire d'événement,
                     communique à Delphi le composant qui a reçu l'événement
                     et par conséquent fait appel au gestionnaire.
 -----------------------------------------------------------------------------}
 
 
{=============================================================================}
INTERFACE   {============================================== I N T E R F A C E }
{=============================================================================}
 
 
 
USES
  { Unités "Maison" ajoutée par moi et réalisée par myself }
  Vcl8255,           { Composant PPI 8255}
  Vcl8254,           { Composant PIT 8254}
  UAPropos,          { Boîte de dialogue "A propos de..." }
  UCfgPrgm,          { Configuration du programme }
  UCfgPrts,          { Configuration des ports du PPI 8255 }
  UCfgBs55,          { Choix de l'adresse de base }
  ULit,              { Lecture de l'état d'un des ports du PPI 8255 }
  UEcrit,            { Ecriture sur l'un des ports du PPI 8255 }
  UChen,             { Effet de chenillard sur un des ports du PPI 8255 }
  UPattern,          { Transmission de données entre 2 ou 3 ports du PPI 8255 }
  Uchrono,           { Chronogramme du PPI 8255 (Ne fonctionne pas) }
  UQuartz,           { Fréquence du quartz pour le PIT 8254 }
  UGenerat,          { Générateur de fréquence }
  UFreq,
  { Unités Delphi ajoutées automatiquement par Delphi himself... }
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, Menus, ExtCtrls, StdCtrls, IniFiles,
  Buttons, Wordcap, Prevchek;
 
 
CONST
  version = 'Version 2.03ß';                           { Version du programme }
  copyright = '© 1996, 1997 by S.Claus & M.Amarantidis';      { Commentaire ? }
  fichierini = 'ETIPCBUS.INI';                           { Nom du fichier INI }
 
  debugmode : BOOLEAN = TRUE;                      { Activation du mode debug }
  debugcolor : TColor = clRed;               { Couleur fenêtres en mode debug }
  debugetatports : BOOLEAN = FALSE;                { Affiche l'état des ports }
  debugdelaietatports : INTEGER = 1000;         { Vitesse de rafraîchissement }
  affichehint : BOOLEAN = TRUE;                          { Affichage des Hint }
  base8255 : WORD = $300;                        { Adresse de base du PPI8255 }
  offset8254 : BYTE = 8;           { Différence entre les 2 addresses de base }
  en8255_8254 : BOOLEAN = TRUE;                         { 8255 & 8254 Enabled }
  freqquartz : EXTENDED = 6000000;                      { Fréquence du Quartz }
 
 
TYPE
  TfrmMain = CLASS(TForm)
    MainMenu1: TMainMenu;
    Fichier1: TMenuItem;
    mQuitter: TMenuItem;
    N1: TMenuItem;
    mConfigurationProgramme: TMenuItem;
    pnlStatuts: TPanel;
    pnlDebug: TPanel;
    lblEtatPorts: TLabel;
    grpbx8255: TGroupBox;
    lblPortA: TLabel;
    lblPortC: TLabel;
    lblPortB: TLabel;
    lblModePortA: TLabel;
    lblModePortB: TLabel;
    lblModePortC: TLabel;
    timerEtatPorts: TTimer;
    lblBase55: TLabel;
    m8255: TMenuItem;
    mChenillard: TMenuItem;
    mPattern: TMenuItem;
    mLecture: TMenuItem;
    mEcriture: TMenuItem;
    N2: TMenuItem;
    mConfiguration8255: TMenuItem;
    mAdresseBase8255: TMenuItem;
    mEtatPorts8255: TMenuItem;
    Aide1: TMenuItem;
    Apropos1: TMenuItem;
    mHelpIndex: TMenuItem;
    N3: TMenuItem;
    mChronogramme: TMenuItem;
    MSOfficeCaption1: TMSOfficeCaption;
    m8254: TMenuItem;
    mGenerateur: TMenuItem;
    mFrequencemetre: TMenuItem;
    mConfiguration8254: TMenuItem;
    mAdresseDeBaseBis: TMenuItem;
    N4: TMenuItem;
    PIT8254: TPIT8254;
    grpbx8254: TGroupBox;
    lblBase54: TLabel;
    lblModeCnt0: TLabel;
    lblModeCnt1: TLabel;
    lblModeCnt2: TLabel;
    lblCompteur0: TLabel;
    lblCompteur1: TLabel;
    lblCompteur2: TLabel;
    mFrquenceQuartz: TMenuItem;
    lblQuartz: TLabel;
    N5: TMenuItem;
    PPI8255: TPPI8255;
    OneInstance: TOneInstance;
    PROCEDURE mQuitterClick(Sender: TObject);
    PROCEDURE mConfigurationProgrammeClick(Sender: TObject);
    PROCEDURE timerEtatPortsTimer(Sender: TObject);
    PROCEDURE mHelpIndexClick(Sender: TObject);
    PROCEDURE mEtatPorts8255Click(Sender: TObject);
    PROCEDURE mAdresseBaseClick(Sender: TObject);
    PROCEDURE FormActivate(Sender: TObject);
    PROCEDURE AProposClick(Sender: TObject);
    PROCEDURE FormCreate(Sender: TObject);
    PROCEDURE FormClose(Sender: TObject; VAR Action: TCloseAction);
    PROCEDURE mLectureClick(Sender: TObject);
    PROCEDURE mEcritureClick(Sender: TObject);
    PROCEDURE mChenillardClick(Sender: TObject);
    PROCEDURE PPI8255ChenillardBouge(Sender: TObject);
    PROCEDURE mPatternClick(Sender: TObject);
    PROCEDURE PPI8255ErrorPattern(Sender: TObject);
    PROCEDURE mChronogrammeClick(Sender: TObject);
    PROCEDURE mGenerateurClick(Sender: TObject);
    PROCEDURE mFrquenceQuartzClick(Sender: TObject);
    procedure mFrequencemetreClick(Sender: TObject);
  PRIVATE
    { Private-déclarations }
  PUBLIC
    { Public-déclarations }
    PROCEDURE DisplayHint(Sender: TObject);
    PROCEDURE LireFichierINI(Sender: TObject);
    PROCEDURE EcrireFichierINI(Sender: TObject);
  END; {CLASS}
 
 
VAR
  frmMain: TfrmMain;
 
 
 
{=============================================================================}
IMPLEMENTATION   {================================= I M P L E M E N A T I O N }
{=============================================================================}
 
 
 
{$R *.DFM}
 
 
VAR
  FreqStr  : STRING;               { Stokage de la fréquence du Quartz pour la
                                     sauvegarde dans le fichier INI. }
 
 
 
{=============================================================================}
{ DIVERS ------------------------------------------------------------- Divers }
{=============================================================================}
 
 
 
PROCEDURE TfrmMain.LireFichierINI(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Initialise les constantes en lisant le contenu du fichier
                    INI
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : Les constantes sont initialisées
  REMARQUE(S) ... : --
 -----------------------------------------------------------------------------}
VAR
  FicINI: TIniFile;     { Objet permetant d'écrire ou de lire un fichier .INI }
BEGIN
  TRY
    FicINI := TIniFile.Create(fichierini);
    WITH FicINI DO BEGIN
      debugmode := ReadBool ('DEBUG', 'Active', debugmode);
      debugcolor := ReadInteger('DEBUG', 'Couleur', debugcolor);
      debugetatports := ReadBool('DEBUG', 'Etat', debugetatports);
      debugdelaietatports := ReadInteger('DEBUG', 'Delai', debugdelaietatports);
      affichehint := ReadBool('SETUP', 'Hint', affichehint);
      en8255_8254 := ReadBool('SETUP', 'en8255_8254', en8255_8254);
      base8255 := ReadInteger ('SETUP', 'Base8255', base8255);
      offset8254 := ReadInteger ('SETUP', 'offset8254', offset8254);
      FreqStr := ReadString ('SETUP', 'Quartz', FloatToStr(freqquartz));
    END; {WITH}
  FINALLY
    { De toute façon on passe par là pour retirer FicINI de la mémoire.
      Au cas où il y a eu une erreur lors de la lecture... on ne sait jamais. }
    FicINI.Free;
  END; {TRY}
END; {PROCEDURE LireFichierINI}
 
 
 
PROCEDURE TfrmMain.EcrireFichierINI(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Inscrit dans le fichier INI l'état des différentes
                    constantes qui ont pu changer durant l'utilisation du
                    programme
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : --
  REMARQUE(S) ... : --
 -----------------------------------------------------------------------------}
VAR
  FicINI: TIniFile;
BEGIN
  TRY
    FicINI := TIniFile.Create(fichierini);
    WITH FicINI DO BEGIN
      WriteBool ('DEBUG', 'Active', debugmode);
      WriteInteger('DEBUG', 'Couleur', debugcolor);
      WriteBool('DEBUG', 'Etat', debugetatports);
      WriteInteger('DEBUG', 'Delai', debugdelaietatports);
      WriteBool('SETUP', 'Hint', affichehint);
      WriteBool('SETUP', 'en8255_8254', en8255_8254);
      WriteInteger ('SETUP', 'Base8255', base8255);
      WriteString ('SETUP', 'Quartz', FloatToStr(frmMain.PIT8254.quartz));
      WriteInteger ('SETUP', 'offset8254', offset8254);
    END; {WITH}
  FINALLY
    FicINI.Free;
  END; {TRY}
END; {PROCEDURE LireFichierINI}
 
 
 
PROCEDURE TfrmMain.DisplayHint(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Affiche dans la barre d'état tous les hint rencontrés
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : --
  REMARQUE(S) ... : L'affichage dans la barre d'état ne peut être désactivé
                    par l'écran de configuration. Donc même si on affiche pas
                    le hint dans une infobulle, on l'affiche dans la barre
                    d'état
 -----------------------------------------------------------------------------}
BEGIN
  pnlStatuts.Caption := Application.Hint;
END; {PROCEDURE TForm1.DisplayHint}
 
 
 
{=============================================================================}
{ DEBUG --------------------------------------------------------------- Debug }
{=============================================================================}
 
 
 
PROCEDURE TfrmMain.timerEtatPortsTimer(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Affiche sur l'écran principal l'état du PPI8255 et du
                    PIT8254 toutes les "debugdelaietatports" [ms] si
                    debugetatports est à TRUE (donc que le timer
                    "timerEtatPorts" est activé)
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : Des valeurs sont affichées à l'écran
  REMARQUE(S) ... : --
 -----------------------------------------------------------------------------}
BEGIN
  { * 8255 * Adresse de base }                                 { *-* 8255 *-* }
  lblBase55.Caption := 'Base = ' + IntToHex(PPI8255.Adresse,3) + 'h';
  { * 8255 * Valeurs présentes sur les ports }
  lblPortA.Caption := 'A = ' + IntToHex(PPI8255.PortA,2) + 'h';
  lblPortC.Caption := 'B = ' + IntToHex(PPI8255.PortB,2) + 'h';
  lblPortB.Caption := 'C = ' + IntToHex(PPI8255.PortC,2) + 'h';
  { * 8255 * Configuration des ports }
  CASE PPI8255.ModePortA OF
    mpIndefini : lblModePortA.Caption := 'A => Indéfini';
    mpEntree   : lblModePortA.Caption := 'A => Entrée';
    mpSortie   : lblModePortA.Caption := 'A => Sortie';
  END; {CASE OF}
  CASE PPI8255.ModePortB OF
    mpIndefini : lblModePortB.Caption := 'B => Indéfini';
    mpEntree   : lblModePortB.Caption := 'B => Entrée';
    mpSortie   : lblModePortB.Caption := 'B => Sortie';
  END; {CASE OF}
  CASE PPI8255.ModePortC OF
    mpIndefini : lblModePortC.Caption := 'C => Indéfini';
    mpEntree   : lblModePortC.Caption := 'C => Entrée';
    mpSortie   : lblModePortC.Caption := 'C => Sortie';
  END; {CASE OF}
  { * 8254 * Adresse de base }                                 { *-* 8254 *-* }
  lblBase54.Caption := 'Base = ' + IntToHex(PIT8254.Adresse,3) + 'h';
  { * 8254 * Configuration des compteurs }
  CASE PIT8254.ModeCompteur0 OF
    mcIndefini   : lblModeCnt0.Caption := '0 => Indéfini';
    mcGenerateur : lblModeCnt0.Caption := '0 => Générateur';
  END; {CASE OF}
  CASE PIT8254.ModeCompteur1 OF
    mcIndefini   : lblModeCnt1.Caption := '1 => Indéfini';
    mcGenerateur : lblModeCnt1.Caption := '1 => Générateur';
  END; {CASE OF}
  CASE PIT8254.ModeCompteur2 OF
    mcIndefini   : lblModeCnt2.Caption := '2 => Indéfini';
    mcGenerateur : lblModeCnt2.Caption := '2 => Générateur';
  END; {CASE OF}
  { * 8254 * Valeurs présentes sur les compteurs }
  lblCompteur0.Caption := '0 = ' + IntToStr(PIT8254.Compteur0);
  lblCompteur1.Caption := '1 = ' + IntToStr(PIT8254.Compteur1);
  lblCompteur2.Caption := '2 = ' + IntToStr(PIT8254.Compteur2);
  { * 8254 * Fréquence du quartz utilisé }
  lblQuartz.Caption := FloatToStr(PIT8254.Quartz) + ' [Hz]';
END; {PROCEDURE timerEtatPortsTimer}
 
 
 
{=============================================================================}
{ INITIALISATIONS ------------------------------------------- Initialisations }
{=============================================================================}
 
 
 
PROCEDURE TfrmMain.FormCreate(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Initialisations du programme lors de la création de la
                    fenêtre principale.
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : --
  REMARQUE(S) ... :
 -----------------------------------------------------------------------------}
BEGIN
  Caption := Application.Title;                           { Affichage du titre}
  Application.OnHint := DisplayHint;                     { Affichage des hint }
  LireFichierINI(Sender);                            { Lecture du fichier INI }
  PPI8255.Adresse := base8255;                  { Initialisation des adresses }
  {2.01ß: L'espace entres les adresses de bases du PPI8255 et du PIT 8254 n'est
          pas fixe, mais il est défini par la constante offset8254
  PIT8254.Adresse := base8255 + 8; }
  PIT8254.Adresse := base8255 + offset8254;
  TRY                              { Initialisation de la fréquence du quartz }
    freqquartz := StrToFloat(FreqStr);
    frmMain.PIT8254.Quartz := freqquartz;
  EXCEPT
    { ERREUR lors de la conversion STRING -> FLOAT. On initialise alors avec
      une valeur correcte (enfin, espérons !) }
    freqquartz := 6000000;
    frmMain.PIT8254.Quartz := freqquartz;
  END; {TRY}
END; {PROCEDURE FormCreate}
 
 
PROCEDURE TfrmMain.FormActivate(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Initialisations du programme lors de la création de la
                    fenêtre principale.
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : --
  REMARQUE(S) ... :
 -----------------------------------------------------------------------------}
BEGIN
  { Activation du PPI8255 et du PIT8254 si on est pas en mode DEBUG }
  PPI8255.Enabled := en8255_8254 AND (NOT debugmode);
  PIT8254.Enabled := en8255_8254 AND (NOT debugmode);
  { Activation des menus si le 8255 et le 8254 sont activés }
  mEtatPorts8255.Enabled := en8255_8254;
  mChenillard.Enabled := en8255_8254;
  mPattern.Enabled := en8255_8254;
  mLecture.Enabled := en8255_8254;
  mEcriture.Enabled := en8255_8254;
  mChronogramme.Enabled := en8255_8254;
  mGenerateur.Enabled := en8255_8254;
  mFrequencemetre.Enabled := en8255_8254;
  { Affichage de l'état des ports et des compteurs }
  WITH timerEtatPorts DO BEGIN
    Enabled := debugetatports;
    {2.01ß: Et si on initialisait l'intervalle du timer, ça ne serait pas
            mieux ?}
    Interval := debugdelaietatports;
  END; {WITH}
  pnlDebug.Visible := debugetatports;
  IF debugetatports THEN timerEtatPortsTimer(Sender);
END; {PROCEDURE FormActivate}
 
 
PROCEDURE TfrmMain.FormClose(Sender: TObject; VAR Action: TCloseAction);
{-----------------------------------------------------------------------------
  BUT ........... : Sauvegarde des paramètres en quittant le programme, soit
                    lors de la fermeture de la  fenêtre principale.
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : --
  REMARQUE(S) ... : Le type TCloseEvent de OnClose a un paramètre Action. La
                    valeur du paramètre Action détermine si la fiche peut
                    effectivement être fermée. Les valeurs possibles de Action
                    sont :
                    Valeur	Signification
                    -----------------------------------------------------------
                    caNone	La fiche n'a pas le droit de se fermer, donc il
                                ne se passe rien.
                    caHide	La fiche n'est pas fermée, juste cachée.
                                L'application peut toujours accéder à une fiche
                                cachée.
                    caFree	La fiche est fermée et la mémoire allouée à la
                                fiche libérée.
                    caMinimize	La fiche n'est pas fermée, juste réduite en
                                icône. C'est l'action par défaut des fiches
                                enfant MDI.
 -----------------------------------------------------------------------------}
BEGIN
  EcrireFichierINI(Sender);
END; {PROCEDURE FormClose}
 
 
 
{=============================================================================}
{ MENU FICHIER ------------------------------------------------- Menu fichier }
{=============================================================================}
 
 
 
PROCEDURE TfrmMain.mQuitterClick(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Quitte le programme par Fichier|Quitter
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : --
  REMARQUE(S) ... : - Identique à ALT-F4
                    - La méthode Close ferme une fiche. L'appel de la
                      méthode Close d'une fiche correspond à la sélection par
                      l'utilisateur de l'élément de menu Fermer dans le menu
                      système. La méthode Close appelle d'abord la méthode
                      CloseQuery pour déterminer si la fiche peut être fermée.
                      Si CloseQuery renvoie False, l'opération de fermeture est
                      interrompue. Dans le cas où CloseQuery renvoie True, le
                      code rattaché à l'événement OnClose s'exécute.
                      Le paramètre CloseAction de l'événement OnClose contrôle
                      la façon dont s'opère la fermeture effective de la fiche.
 -----------------------------------------------------------------------------}
BEGIN
  Close;
END; {PROCEDURE mQuitterClick}
 
 
PROCEDURE TfrmMain.mConfigurationProgrammeClick(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Appel de la boîte de dialogue pour la configuration du
                    programme.
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : L'état des constantes du programme peuvent être modifiées
  REMARQUE(S) ... : Identique à F12
 -----------------------------------------------------------------------------}
BEGIN
  frmCfgProgramme.ShowModal; { Appel de la boîte de dialogue }
  FormActivate(Sender); { Réinitialisation des contrôles, car il est possible
                          que la configuration ait changé }
END; {PROCEDURE mConfigurationProgrammeClick}
 
 
 
{=============================================================================}
{ MENU AIDE ------------------------------------------------------- Menu aide }
{=============================================================================}
 
 
 
PROCEDURE TfrmMain.mHelpIndexClick(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Appel de l'index du ficher d'aide
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : --
  REMARQUE(S) ... : Identique à F1
 -----------------------------------------------------------------------------}
BEGIN
  Application.HelpCommand(HELP_CONTENTS, 0);
END; {PROCEDURE mHelpIndexClick}
 
 
PROCEDURE TfrmMain.AProposClick(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Afiche la fenêtre "A propos de..."
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : --
  REMARQUE(S) ... : Il y a un écran caché dans la fenêtre "A propos de..."
 -----------------------------------------------------------------------------}
BEGIN
  frmAbout.ShowModal;
END; {PROCEDURE AProposClick}
 
 
 
{=============================================================================}
{ MENU 8255 ------------------------------------------------------- Menu 8255 }
{=============================================================================}
 
 
 
PROCEDURE TfrmMain.mAdresseBaseClick(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Configuration de l'adresse de base du 8255 et du 8254
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : Les constantes "base8255", "offset8254" et "en8255_8254"
                    peuvent être modifiées.
  REMARQUE(S) ... : --
 -----------------------------------------------------------------------------}
BEGIN
  frmAdresseBase.ShowModal;             { Affiche la fenêtre de configuration }
  FormActivate(Sender);  { Si une des constantes a été modifiées, réinitialise
                           les contrôles de la fenêtres principale }
END; {PROCEDURE TfrmMain.mAdresseBaseClick}
 
 
PROCEDURE TfrmMain.mEtatPorts8255Click(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Appel de la boîte de dialogue pour la modification de
                    l'état des ports
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : Les propriétés ModePortA, ModePortB et ModePortC du
                    composant TPPI8255 seront configurées selon les désirs de
                    l'utilisateur.
  REMARQUE(S) ... : --
 -----------------------------------------------------------------------------}
BEGIN
  frmCfgPorts.ShowModal;
  {2.01ß: Ca, il n'y a pas besoin de le faire...
  FormActivate(Sender); }
END; {PROCEDURE mEtatPorts8255Click}
 
 
PROCEDURE TfrmMain.mLectureClick(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Appel de la boîte de dialogue pour la lecture de la valeur
                    actuellement présente sur un des ports du PPI8255
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : --
  REMARQUE(S) ... : Les propriétés ModePortA, ModePortB et ModePortC du
                    composant TPPI8255 seront configurées en entrée lors de la
                    lecture sur le port correspondant.
 -----------------------------------------------------------------------------}
BEGIN
  frmLire.ShowModal;
END; {PROCEDURE mLectureClick}
 
 
PROCEDURE TfrmMain.mEcritureClick(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Appel de la boîte de dialogue pour l'écriture d'une valeur
                    sur un des ports du PPI8255
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : --
  REMARQUE(S) ... : Les propriétés ModePortA, ModePortB et ModePortC du
                    composant TPPI8255 seront configurées en sortie lors de
                    l'écriture de la valeur sur le port correspondant.
 -----------------------------------------------------------------------------}
BEGIN
  frmEcrire.ShowModal;
END; {PROCEDURE mEcritureClick}
 
 
PROCEDURE TfrmMain.mChenillardClick(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Appel de la boîte de dialogue de gestion du chenillard
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : --
  REMARQUE(S) ... : Une des propriétés ModePortx du composant TPPI8255 sera
                    configuré en sortie, et les autres en entrées
 -----------------------------------------------------------------------------}
BEGIN
  frmChenillard.ShowModal;
END; {PROCEDURE mChenillardClick}
 
 
PROCEDURE TfrmMain.PPI8255ChenillardBouge(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Affiche l'état du chenillard lorsque le chenillard vient de
                    changer d'état
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : --
  REMARQUE(S) ... : --
 -----------------------------------------------------------------------------}
BEGIN
  frmChenillard.MAJEtatLEDs(Sender); { L'afichage de l'état des LEDs se fait
                                       dans l'unité UChen (fiche frmChenillard)
                                       par la méthode MAJEtatLEDs. }
END; {PROCEDURE PPI8255ChenillardBouge}
 
 
PROCEDURE TfrmMain.mPatternClick(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Appel de la boîte de dialogue de gestion du test de pattern
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : --
  REMARQUE(S) ... : Une des propriétés ModePortx du composant TPPI8255 sera
                    configuré en sortie, et les autres en entrées
 -----------------------------------------------------------------------------}
BEGIN
  frmPattern.ShowModal;
END; {PROCEDURE mPatternClick}
 
 
PROCEDURE TfrmMain.PPI8255ErrorPattern(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Gestion des erreurs lors du test de transfert de pattern.
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : --
  REMARQUE(S) ... : L'afichage de l'erreur détectée se fait dans l'unité
                    UPattern (fiche frmPattern) par la méthode AjouteErreur.
 -----------------------------------------------------------------------------}
BEGIN
  frmPattern.AjouteErreur(Sender, FALSE);
                                  { ¦ }
                                  { +-- TRUE = Sans ajout à la liste }
END; {PROCEDURE PPI8255ErrorPattern}
 
 
PROCEDURE TfrmMain.mChronogrammeClick(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Petite boucle de test pour relevé le chronogramme du
                    PPI 8255
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : --
  REMARQUE(S) ... : Ne pas utiliser cette possibilité du programme, mais le
                    programme DOS "Chrono.exe" qui sera plus rapide et moins
                    perturbé par le multitâche de Windows
 -----------------------------------------------------------------------------}
BEGIN
  frmChronoPPI.ShowModal;
END; {PROCEDURE mChronogrammeClick}
 
 
 
{=============================================================================}
{ MENU 8254 ------------------------------------------------------- Menu 8254 }
{=============================================================================}
 
 
 
PROCEDURE TfrmMain.mFrquenceQuartzClick(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Sélection de la fréquence du quartz
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : La propriété Quartz du composant PIT8254 est mise à jour
  REMARQUE(S) ... : --
 -----------------------------------------------------------------------------}
BEGIN
  frmQuartz.ShowModal;
  IF frmQuartz.ModalResult=mrOK THEN BEGIN  { 2.01ß: MAJ de la constante.. }
    freqquartz := PIT8254.Quartz;           { ..freqquartz & de la variable.. }
    FreqStr := FloatToStr(freqquartz);      { ..FreqStr si la fréquence a.. }
  END; {IF}                                 { ..changé }
END; {PROCEDURE mFrquenceQuartzClick}
 
 
PROCEDURE TfrmMain.mGenerateurClick(Sender: TObject);
{-----------------------------------------------------------------------------
  BUT ........... : Générateur de fréquence
  ENTREE ........ : --
  SORTIE ........ : --
  EFFETS DE BORDS : Les propriété ModeCompteurx du composant PIT8254 sont MAJ
  REMARQUE(S) ... : --
 -----------------------------------------------------------------------------}
BEGIN
  frmgenerateur.ShowModal;
END; {PROCEDURE mGenerateurClick}
 
 
 
{=============================================================================}
{ INITIALISATIONS ------------------------------------------- Initialisations }
{=============================================================================}
 
 
 
procedure TfrmMain.mFrequencemetreClick(Sender: TObject);
begin
  frmFrequencemetre.ShowModal;
end;
 
INITIALIZATION
END. {UNIT Uprincpl}
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
start/eti/carte/sources/uprincpl.txt · Last modified: 2016/07/24 01:30 by admin