IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Turbo Pascal Discussion :

[TP]Créer une animation leds clavier


Sujet :

Turbo Pascal

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [TP]Créer une animation leds clavier
    Bonjour tlm j'etudie en 1ere année de programmation et je vais vous exposer mon probleme: voila j'ai aquis un clavier logitech sans fil qui ne dispose pas de diodes lumineuses (puisque a piles) et j'ai eut l'idée de les placer en facade de ma tour, pour se faire j'ai recuperer un circuit d'un vieu clavier, je l'ai coller deriere mon cache de facade en percant 3 trous pour les diodes et je l'ai brancher en ps/2 (mon clavier infrarouge etant usb)
    Et cela fonctionne, mais voila j'aimerais realiser un programme qui ferrais clignoter ces diodes (genre a le K2000 par ex )l'orce que windows passe en veille et pascal puisque c'est le language que j'utilise au cours.
    merci d'aissyer de maider car je patauge

  2. #2
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Salut j'ai egalement un clavier sans fil en ps/2 et sans led j'aurai aimer savoir comment tu a brancher les tiennes merci
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  3. #3
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Selon la RBIL, il faut envoyer ça sur le port 64h (qui est le port du controller clavier) :

    Citation Envoyé par Ralf Brown
    EDh
    this is a two part command to control the state of the NumLock, CpasLock and ScrollLock LEDs.
    The second byte contains the state to set LEDs.
    bit 7-3 reserved. should be set to 0.
    bit 2 = 0 Caps Lock LED off
    bit 1 = 0 Num Lock LED off
    bit 0 = 0 Scroll Lock LED off
    Il faut donc envoyer un EDh suivi d'un octet donné par le codage cité, sur le port 64h... Jamais testé, mais ca devrait marcher

    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  4. #4
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Moi j'ai déjà testé
    Le code suivant permet de modifier les LED de clavier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    const
      ledCapsLock   = 4;
      ledNumLock    = 2;
      ledScrollLock = 1;
     
    procedure SetKbdLeds(Led: Byte);
    begin
      Mem[Seg0040:$0017] := Mem[Seg0040:$0017] xor (Led shl 4);
      Port[$60] := $ED;
      Port[$60] := (Mem[Seg0040:$0017] shr 4) and 7;
    end;
     
    ...
     
    begin
      SetKbdLeds(ledCapsLock);
    end.
    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  5. #5
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Rectification, c'est le port 60h et non pas le port 64h, comme l'a dit Hdd34 (le port 64h ne semble plus être utilisé depuis les PC XT...)

    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  6. #6
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Citation Envoyé par Hdd34
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure SetKbdLeds(Led: Byte);
    begin
      Mem[Seg0040:$0017] := Mem[Seg0040:$0017] xor (Led shl 4);
      Port[$60] := $ED;
      Port[$60] := (Mem[Seg0040:$0017] shr 4) and 7;
    end;
    Je ne comprends pas bien ce que fait cette procédure (faut dire que j'ai jamais touché à la mémoire). Est-ce que tu pourrais détailler ce qu'elle permet s'il te plaît ?

    D'après ce que j'ai compris, mem[] est vraie si elle et égale à elle même ou, et seulement ou, si elle vaut Led décallé de 4 bits ? J'avoue avoir du mal à comprendre le principe, même celui de la variable Port[]...

  7. #7
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Mem est une sorte de matrice, donnant une représentation abstractive de la mémoire (c'est beau ce que je dis ). On spécifie à Mem l'octet auquel on veut accéder en mémoire. Mem[Seg0040:$0017] signife donc qu'on veut accéder à l'octet situé à l'adresse $0040:$0017. Port est un tableau qui permet d'accéder aux ports de la machine, le port étant passé entre crochets.

    Pour simplifier le fonctionnement, cette procédure récupère l'octet situé en mémoire à l'adresse $0040:$0017, le modifie en fonction du paramètre. En envoie le tout sur le port 60h...

    Voilà à peu près

    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  8. #8
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Salut !

    L'état des touches bascules du clavier est stocké en mémoire dans le segment des données du BIOS (le 40h), à l'offset 17h. L'état des touches qui possèdent une LED (Caps-, Num- et ScrollLock) est codé sur les bits 4, 5 et 6 (valeurs 1 shl 4, 2 shl 4 et 4 shl 4).
    L'utilisation du xor permet de faire varier en on/off la valeur d'un bit, car :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    0 xor 1 = 1
    1 xor 1 = 0
    Donc, à supposer que la LED de NumLock soit éteinte, un appel SetKbdLed(ledNumLock) va l'allumer, et un second appel va l'éteindre.

    La modification de la couleur des LED n'intervient que dans les instructions utilisant Port. La ligne :
    indique au clavier (dont le port est le 60h) que l'on va modifier l'état des LED, et que va suivre l'état souhaité (combinaison des bits 0, 1 et 2). On écrit alors cet état toujours dans le port 60h. Cette procédure étant intégrée à la base dans un gestionnaire de clavier complet, elle lisait donc l'état du clavier et modifiait les LED en conséquence.

    On pourrait simplifier le problème comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure SetKbdLed(Led: Byte);
    begin
      Port[$60] := $ED;
      Port[$60] := Led;
    end;
    Mais dans ce cas, quand on quittera le programme, les LED seront dans un état ne correspondant pas du tout à l'état réel des touches bascules.

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  9. #9
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Merci bien, c'est très clair.

  10. #10
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Et "mem" marche avec un compilateur 32bits sous win xp?
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  11. #11
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Certainement pas D'ailleurs, il me semble que Mem ne marche qu'en mode réel, puisqu'on utilise la représentation sur 20 bits, avec la représentation segment:déplacement... Or WinXp marche en mode protégé 32 bits...
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  12. #12
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Lol je m'attendai a cette reponse et ya une solution?
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Créer une animation leds clavier
    Arf, c'est vachement complexe pour moi qui fair de la programation purement économique....

  14. #14
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Citation Envoyé par cerede2000
    Lol je m'attendai a cette reponse et ya une solution?
    Pour accéder directement à la mémoire ? J'en connais pas, sauf peut-être en passant par le DPMI, mais là non seulement je ne suis pas sûr que tu puisses, mais aussi je ne suis pas sûr que cela existe encore sous XP....
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  15. #15
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Ok et une solution pour faire la meme chose autrement?
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  16. #16
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Des solutions simples ? Y'en a pas
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  17. #17
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Mais si il y en a ! Mais pas sous Dos...
    Donc, au choix...

    • Soit on est sous Win9x et on programme sous Dos, et dans ce cas on utilise la procédure définie plus haut
    • Soit on est sous WinXP, et dans ce cas on utilise un compilateur 32 bits capable de créer une application Windows (Console ou pas), et on utilise la fonction keybd_event pour simuler l'appui sur les touches...


    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

Discussions similaires

  1. Controler une anim Flash
    Par Nico-ganja dans le forum Flash
    Réponses: 2
    Dernier message: 04/03/2003, 00h37
  2. Réponses: 3
    Dernier message: 25/11/2002, 14h15
  3. comment integer une animation swf dans une page
    Par naili dans le forum Intégration
    Réponses: 7
    Dernier message: 18/09/2002, 18h54
  4. Comment ne pas rejouer une animation après un clic ?
    Par mmmmhhh dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 04/09/2002, 16h11
  5. Passage de parametre a une anim Flash 5
    Par debug dans le forum Intégration
    Réponses: 4
    Dernier message: 03/06/2002, 17h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo