création d'une touche de validation ou effacement
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

création d'une touche de validation ou effacement



  1. #1
    invitec93fa417

    Exclamation création d'une touche de validation ou effacement


    ------

    salut,
    je vous demande, humblement, de me donner une idée sur comment créer une touche de validation ou effacement (dans mon cas '#' pour valider et le '*' pour effacer) en programme C (compilation sur pic c) un code saisi composé de 4 chiffres et merci infiniment pour l'aide...

    -----

  2. #2
    invite849f6457

    Re : création d'une touche de validation ou effacement

    Bonjour,
    je ne comprend pas vraiment ton probléme.
    Tu gére les touches comme tu le souhaite, dans ton programme tu fait un test si la touche reçu et '*' alors tu effacer le dernier caractére reçu (en réalitée l'avant dernier car le dernier et "*") de ton buffer de mémorisation. si tu reçoi le caractére "#" tu vérifier que le code saisi avant est correcte (par comparaison avec un code prédéfini).
    Mais il nous manque des infos pour étre plus précis.

    Cordialement
    charléne

  3. #3
    invitec93fa417

    Re : création d'une touche de validation ou effacement

    bonjour,
    mon code consiste à valider un code saisi composé de 4 chiffres (dans mon cas 1234), à n'importe quel instant bien sur (il n'est pas nécessaire de saisir 4 chiffres pour que la validation soit fonctionnelle). En plus, l'autre fonction est l'effacement d'un chiffre au cas ou l'utilisateur a saisi un chiffre incorrect. J’espère que je me fais comprendre et merci pour toutes les indices d'avance.

  4. #4
    invite025015c2

    Re : création d'une touche de validation ou effacement

    Je ne vois pas trop la difficulté ?!

    Tu arrive bien a recuperer les chiffre, que tu stock dans un char* je suppose ?
    Il suffit de verifier, avant de mettre dans ton buffer, le caractere.

    Si c'est un # tu peux faire le test de ton mot de passe, si c'est un * tu efface le dernier caractere de ton buffer, sinon tu met a la suite de ton buffer.

  5. A voir en vidéo sur Futura
  6. #5
    invitec93fa417

    Question Re : création d'une touche de validation ou effacement

    salut,
    merci pour tes indications. Je viens de réaliser ce code, tout comme tes indications, en compilant c'est sans erreur mais en simulation sur isis il prend les charactéres '#' et '*' et les affiche aussi sur l'écran lcd. voici mon code :

    Code:
     k=0;
       func2: 
       while(touche!='#')
       {
          
             while(touche!=' ')
          {
             envoie_caractere('*');
             Ts[k]=touche;
             touche=' ';
             k++;
         
            
                if(touche=='*')
             { 
                envoie_commande(0x10);    //retour curseur
                delay_us(40);
                envoie_caractere(' ');
                k--;
             }
          }
       }
          
          
       if(touche=='#')
       {
          if(k!=3)
          {  
             disable_interrupts(INT_TIMER0);
             envoie_commande(0x80);
             for(i=0;i<24;i++)   envoie_caractere(Tfrep[i]);
             {
                delay_ms(1000);
                rotation(texte);
             }
                enable_interrupts(INT_TIMER0);
            goto func2;
          }
          else {goto func4;}
       }

  7. #6
    Jack
    Modérateur

    Re : création d'une touche de validation ou effacement

    des goto dans du code C: beurk!

    De plus, comment comptes-tu sortir de la boucle ...
    while(touche!='#') {
    ...
    }
    ... vu que tu ne rafraichis pas systématiquement la valeur de touche ?

    A+

  8. #7
    invitec93fa417

    Re : création d'une touche de validation ou effacement

    comment le faire alors?

  9. #8
    Jack
    Modérateur

    Re : création d'une touche de validation ou effacement

    je manque de données:
    c'est où func4:?

    Comment se fait la saisie d'une touche?

    Que se passe-t-il si on entre 4 caractères corrects? On doit valider où c'est automatique?

    A+

  10. #9
    invitec93fa417

    Re : création d'une touche de validation ou effacement

    tout d'abord merci et voici mon programme:
    Code:
    #include "16F877A.h"
    #use delay(clock=10M)
    #byte PORTB= 0x06
    #byte PORTC= 0x07
    #byte TRISB= 0x86
    #byte TRISC= 0x87
    #byte PORTD= 0x08
    #byte TRISD= 0x88
    #bit E =PORTC.0
    #bit RS=PORTC.1
    #bit C1=PORTD.0
    #bit C2=PORTD.1
    #bit C3=PORTD.2
    char texte[28]="veuillez saisir le code    ";
    char Tvrep[18]="code correct     ";
    char Tfrep[15]="code incorrect";
    char texte2[40]="portail ouverte pendant 5 minutes";
    int i;
    char touche=' ';
    void envoie_commande(char commande)
    {
       E=0;
       RS=0;//mode commande
       PORTB=commande;
       E=1;
       delay_us(50);
       E=0;
    }
    void envoie_caractere(char caractere)
    {
       E=0;
       RS=1;//mode affichage
       PORTB=caractere;
       E=1;
       delay_us(50);
       E=0;
    }
    #int_timer0
    void clavier()
    {
       touche=' ';
       PORTD=0x08;//Selection de la ligne A
       if(C1==1){touche='1';while(C1==1);}
       if(C2==1){touche='2';while(C2==1);}
       if(C3==1){touche='3';while(C3==1);}
       PORTD=0x10;//Selection de la ligne B
       if(C1==1){touche='4';while(C1==1);}
       if(C2==1){touche='5';while(C2==1);}
       if(C3==1){touche='6';while(C3==1);}
       PORTD=0x20;//Selection de la ligne C
       if(C1==1){touche='7';while(C1==1);}
       if(C2==1){touche='8';while(C2==1);}
       if(C3==1){touche='9';while(C3==1);}
       PORTD=0x40;//Selection de la ligne D
       if(C1==1){touche='*';while(C1==1);}
       if(C2==1){touche='0';while(C2==1);}
       if(C3==1){touche='#';while(C3==1);}
    }
    void init_LCD()
    {
       delay_ms(15);//attendre le démarrage du LCD
       envoie_commande(0x3C);//Mode 8bits, 2ligne, 5*10 font
       delay_ms(5);
       envoie_commande(0x3C);//Mode 8bits, 2ligne, 5*10 font
       delay_ms(100);
       envoie_commande(0x0E);//display on, Corseur on, blink off
       delay_ms(5);
       envoie_commande(0x01);// clear dispaly
       delay_ms(5);
    }
    void rotation(int texte[26])
    {
      int A;
      A=Texte[0];
      for(i=0;i<25;i++)  texte[i]=texte[i+1];
      texte[24]=A;
    }     
    
    void main()
    {
       int T[4]={'1','2','3','4'};
       int Ts[4];
       int j,k,code;
       TRISB=0x00;
       TRISC=0xFC;
       TRISD=0x87;
       setup_timer_0 (RTCC_DIV_128|RTCC_INTERNAL);
       enable_interrupts(INT_TIMER0);
       enable_interrupts(GLOBAL);
       init_LCD();
       
       func3:
       while(code==1)
       {
          disable_interrupts(INT_TIMER0);
          envoie_commande(0x80);
          for(i=0;i<41;i++)  envoie_caractere(texte2[i]);
         {
             delay_ms(200);
             rotation(texte);
         }
             enable_interrupts(INT_TIMER0);
       
    //!   envoie_commande(0x01);// clear dispaly
    //!   delay_ms(5);
       }
       func1:
       while(touche==' ')
       {
          disable_interrupts(INT_TIMER0);
          envoie_commande(0x80);
          for(i=0;i<24;i++)  envoie_caractere(texte[i]);
         {
             delay_ms(200);
             rotation(texte);
         }
             enable_interrupts(INT_TIMER0);
       }
          envoie_commande(0x01);// clear dispaly
          delay_ms(5);
       
       k=0;
       func2: 
       while(touche!='#')
       {
          
             while(touche!=' ')
          {
             envoie_caractere('*');
             Ts[k]=touche;
             touche=' ';
             k++;
         
            
                if(touche=='*')
             { 
                envoie_commande(0x10);    //retour curseur
                delay_us(40);
                envoie_caractere(' ');
                k--;
             }
          }
       }
          
          
       if(touche=='#')
       {
          if(k!=3)
          {  
             disable_interrupts(INT_TIMER0);
             envoie_commande(0x80);
             for(i=0;i<24;i++)   envoie_caractere(Tfrep[i]);
             {
                delay_ms(1000);
                rotation(texte);
             }
                enable_interrupts(INT_TIMER0);
            goto func2;
          }
          else {goto func4;}
       }
       
    func4: while(true)
       {
          for (j=0;j<4;j++)
       {  
          if (Ts[j]==T[j])
          {
             code=1;
          }
       else
          {
             code=0;
          }
       }
       
       
          if(code==0)
          {
             disable_interrupts(INT_TIMER0);
             envoie_commande(0x80);
             for(i=0;i<24;i++)   envoie_caractere(Tfrep[i]);
             {
                delay_ms(1000);
                rotation(texte);
             }
                enable_interrupts(INT_TIMER0);
                goto func1;
          }
       else
       {
          disable_interrupts(INT_TIMER0);
          envoie_commande(0x80);
          for(i=0;i<24;i++)  envoie_caractere(Tvrep[i]);
         {
             delay_ms(1000);
             rotation(texte);
         }
             enable_interrupts(INT_TIMER0);
             goto func3;
       }
       }
       }

  11. #10
    Jack
    Modérateur

    Re : création d'une touche de validation ou effacement

    tu n'as pas répondu à toutes les questions, mais tout le code est à remanier. Il y a toujours moyen de faire sans goto. Ca parait plus compliqué au premier abord, mais ça résulte d'une bonne analyse du problème, et ça débouche surtout sur une meilleure maintenance du code.

    A la limite, on peut sortie d'une boucle avant sa fin "normale" grâce à l'instruction break.

    A+

  12. #11
    invitec93fa417

    Re : création d'une touche de validation ou effacement

    merci beaucoup pou l'aide.

Discussions similaires

  1. validation d'une demarche mathematique
    Par invited94ea965 dans le forum Mathématiques du supérieur
    Réponses: 5
    Dernier message: 20/09/2010, 18h09
  2. principe d'une touche sensitive capacitive
    Par inviteb7268b6b dans le forum Électronique
    Réponses: 11
    Dernier message: 17/02/2009, 10h23
  3. validation analytique d'une ccm
    Par invite5438d091 dans le forum Chimie
    Réponses: 7
    Dernier message: 26/04/2008, 14h18
  4. [Divers] Touche de validation de mon code Blaupunkt Montreux RCR 44
    Par mooh dans le forum Dépannage
    Réponses: 0
    Dernier message: 19/03/2008, 01h26
  5. Validation d'une méthode karl fisher
    Par invite3ae7280b dans le forum Chimie
    Réponses: 1
    Dernier message: 09/11/2007, 14h06