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

C Discussion :

interruption clavier


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2003
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 4
    Points : 8
    Points
    8
    Par défaut interruption clavier
    qui peut me donné un petit exemple de programme d'interruption clavier
    pour gérer le clavier moi meme

    je programme sous dos avec borland turbo c

    merci d'avance.

  2. #2
    fd
    fd est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Points : 162
    Points
    162
    Par défaut bios ?
    tu veux détourner l'int bios ou l'irq ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2003
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 4
    Points : 8
    Points
    8
    Par défaut
    je veux le faire avec l'irq car je croix que c plus simple

    mais je veux un exemple de prog car sinon je risque de pener grave pour faire fonctionner un prog d'exemple

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 65
    Points : 105
    Points
    105
    Par défaut
    Bonsoir,

    un exemple de détournement d'interruption clavier. Testé sous TC++ 3.0:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    #include <dos.h>
     
    int keypressed_i;
    void interrupt (*old_keyb_handler)();
     
    void interrupt new_keyb_handler()
    {
    	keypressed_i++;
    	old_keyb_handler();	// on n'oublie pas d'appeler l'ancien isr
    };
     
    int main()
    {
    	// int 9 est l'interruption clavier
    	old_keyb_handler = getvect(0x09);	// choppe adresse de la routine d'int. originale
     
    	keypressed_i=0;
    	setvect(0x09, &new_keyb_handler);	// installe notre nouveau isr clavier
     
    	while( keypressed_i < 10)	// attend la frappe de 5 touches ( 1 touche => 1 Makecode + 1 Breakcode)
    	{
    		gotoxy(1,1);
    		printf("%d", keypressed_i);
    	}
     
    	setvect(0x09, old_keyb_handler);	// restaure ancienne routine clavier
    	return 0;
    };
    mon exemple n'est pas transcendant, mais suffisant pour comprendre ce qu'il faut faire.


    golem
    +++

  5. #5
    Membre émérite

    Homme Profil pro
    Urbaniste
    Inscrit en
    Mars 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mars 2002
    Messages : 255
    Points : 2 717
    Points
    2 717
    Par défaut
    Un peu de pub pour mes unités Pascal : télécharge mes unités
    http://www.developpez.com/pascal/unite/src_unit.zip

    Ouvre "SClavier.pas", et découvre la reprogrammation complète du clavier avec en retour une code ASCII (l'interruption renvoie un "code clavier", il faut remaper le clavier ...).

    Pour t'aider à la convertion Pascal -> C :
    http://www.developpez.com/pascal/tutorial/TP-C.htm

    ---
    Parties intéressantes du code :
    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
    asm
        cli
     
        in al,60h
        mov [TmpTouche],al       { Stocke la touche pressée                      }
     
        in al,61h
        or al,130
        out 61h,al               { Dit à l'ordi qu'une touche a été pressée      }
     
        and al,127
        out 61h,al               { Reinitialisation terminée                     }
     
        mov al,32
        out 20h,al               { Revalider les interruptions                   }
     
        sti
    end;
    à placer dans ton interruption, récupère le code clavier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Codes claviers spéciaux :
    224 : Annonce que la touche suivante sera "une touche étendue"
    255 : Le tampon est plein !
    Quelques codes de clavier :
    1 -> Echappe
    28 -> Entrée
    57 -> Espace

    Ce qui est super, c'est qu'après tu auras un tableau pouvant dire si une touche est pressée ou non ! (et donc gèrer la pression simultanée de touches)

    @+ Haypo

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment masquer les interruption clavier
    Par clubinfo dans le forum Langage
    Réponses: 3
    Dernier message: 22/06/2008, 04h10
  2. Réponses: 2
    Dernier message: 21/04/2005, 12h18
  3. [MFC] interruption clavier (KEYBOARD) [MFC]
    Par pi05 dans le forum MFC
    Réponses: 3
    Dernier message: 06/04/2005, 14h44
  4. Interruptions clavier - Ports 60h et 61h
    Par Paradam dans le forum x86 16-bits
    Réponses: 32
    Dernier message: 10/07/2003, 11h09
  5. Utiliser l'interruption clavier
    Par Ninkosen dans le forum x86 16-bits
    Réponses: 7
    Dernier message: 28/03/2003, 01h01

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