Accès dans un menu avec LCD
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Accès dans un menu avec LCD



  1. #1
    invited5a795fe

    Accès dans un menu avec LCD


    ------

    Bonjour à tous,

    j'ai un problème quand à la détection d'un bouton dans un menu LCD.
    J'ai résolu bcp de problèmes pour le moment et j'ai besoin de votre aide.

    Avant de commencer je vais vous mettre le code du programme qui fonctionne nikel pour le moment
    Code:
    // LCD module connections
    sbit LCD_RS at RB4_bit;
    sbit LCD_EN at RB5_bit;
    sbit LCD_D4 at RB0_bit;
    sbit LCD_D5 at RB1_bit;
    sbit LCD_D6 at RB2_bit;
    sbit LCD_D7 at RB3_bit;
    
    sbit LCD_RS_Direction at TRISB4_bit;
    sbit LCD_EN_Direction at TRISB5_bit;
    sbit LCD_D4_Direction at TRISB0_bit;
    sbit LCD_D5_Direction at TRISB1_bit;
    sbit LCD_D6_Direction at TRISB2_bit;
    sbit LCD_D7_Direction at TRISB3_bit;
    // End LCD module connections
    
    char txt1[] = "OPEN - FIRE";
    char txt2[] = "MSTK CORPORATION";
    
    char txt3[] = "MODE ON";
    char txt4[] = "MODE OFF";
    char txt5[] = "MODE TIMING";
    
    char txt6[] = "Allume";
    char txt7[] = "Eteind";
    char txt8[] = "Temporise";
    
    char txt9[] = "Arret";
    char txt10[]= "Tourne";
    
    char txt11[]= "OK -> demarrer";
    char txt12[]= "OK -> arreter";
    char txt13[]= "moteur -> STOP";
    
    char menu_principal = 1;
    char nb_total_menu = 4;
    char menu_OK = 0;
    
    char oldstate_menu = 0;
    char oldstate_ok = 0;
    
    void main()
    {
        ANSELA = 0;
        ANSELB = 0;
        ANSELD = 0;                        // SET AN IND as difital
    
        TRISD0_bit = 0;                    // set RD0 pin as input
    
        Lcd_Init();                        // Initialize LCD
        Sound_Init(&PORTE, 2);             // Initialize Sound
    
        Lcd_Cmd(_LCD_CLEAR);               // Clear display
        Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off
    
    
        Lcd_Out(1,4,txt1);                 // Write text in first row
        Lcd_Out(2,1,txt2);                 // Write text in second row
    
        Delay_ms(3000);
        Lcd_Cmd(_LCD_CLEAR);
        
      do
      {
    // DETECTION DU BOUTON MENU
    /******************************************************************************/
           if (Button(&PORTD, 0, 1, 1))         // Detect logical one
               oldstate_menu = 1;               // Update flag
    
           if (oldstate_menu == 1 && Button(&PORTD, 0, 1, 0))
            {                      // Detect one-to-zero transition
              menu_principal += 1;
              if (menu_principal == nb_total_menu)
                  menu_principal = 1;
              oldstate_menu = 0;                              // Update flag
              Lcd_Cmd(_LCD_CLEAR);
             }
    /******************************************************************************/
    
    // DETECTION DU BOUTON OK
    /******************************************************************************/
    
    /******************************************************************************/
    //Menu principal
    /******************************************************************************/
        switch(menu_principal)
             {
                 case 1 :                          // mode OFF
                          Lcd_Out(1,5,txt4);       // MODE OFF
                          Lcd_Out(2,3,txt12);      // OK pour arreter
                          break;
                 case 2 :
                          Lcd_Out(1,6,txt3);       // MODE ON
                          Lcd_Out(2,2,txt11);      // OK pour arreter
                         break;
                 case 3 :
                          Lcd_Out(1,4,txt5);       // MODE Timing
                          Lcd_Out(2,2,txt11);      // OK pour arreter
                         break;
             }
    /******************************************************************************/
    
       } while(1);
    
    
    } // fin du programme
    Le but étant d'avoir un menu : si appuie du bouton menu -> on swich de menu, ce qui fonctionne nikel pour le moment.

    Dpuis 3 jours je voudrais entrer dans le menu 1, soit le menu OFF.
    En appuyant sur le bouton correspondant à la pin D2 (exemple) en étant dans le menu 1, je voudrais afficher un mot (salut, bonjour...etc), simplement un test, mais ça ne marche pas!

    J'ai vérifié les niveaux logique sur la pin, lorsque j'appuie sur le BP la pin D2 (tjs l'exemple) se met à 1 et 0 lors du relâchement...

    Ce code à été fait avec mikroC for pic.
    J'ai d'abord été dans le case "menu_principal = 1, dire ceci :

    Code:
                 case 1 :                          // mode OFF
                          Lcd_Out(1,5,txt4);       // MODE OFF
                          Lcd_Out(2,3,txt12);      // OK pour arreter
                         /*Détection du bouton Pin D2*/
                          if (Button(&PORTD, 2, 1, 1))         // Detect logical one
                              oldstate_ok = 1;               // Update flag
    
                          if (oldstate_ok == 1 && Button(&PORTD, 2, 1, 0))
                          {
                              oldstate_ok = 0;                              // Update flag
                              Lcd_Cmd(_LCD_CLEAR);
                              Lcd_Out(2,3,"salut");
                          }
                          break;
    Mais c'est seulement en relâchant le bouton pin D2 que je vois apparaitre le mot "salut". Ensuite, le tecte "OK-> arreter" qui était là précédement reapparait...

    Je sens que je suis sur la bonne voie, mais je suis un peu coincer...pouvez-vous m'éclairer?

    Si vous savez me donner des idées ça m'intéresserait.

    Je vous remercie.

    -----

  2. #2
    sdec25

    Re : Accès dans un menu avec LCD

    Salut,
    Mais c'est seulement en relâchant le bouton pin D2 que je vois apparaitre le mot "salut".
    Visiblement, l'état du bouton est inversé par rapport à ce que tu attends. Peux-tu montrer ton schéma (au moins les boutons) ? Que renvoie la fonction Button en fonction de la valeur du dernier paramètre et de l'état logique sur la broche correspondante.

    Ensuite, le tecte "OK-> arreter" qui était là précédement reapparait...
    Ce n'est pas ce que tu veux ?

  3. #3
    invitea5e3e6e1

    Re : Accès dans un menu avec LCD

    Bonjour
    Simple avis, pour ne pas afficher le message "OK arrêter" il faut modifier le flag menu_principal, sinon le retour du switch re-affiche le message.
    Bon, suis pas certain...pour la gestion des boutons j'utilise systématiquement les interruptions, car cela me semble plus simple...à chacun sont style.

Discussions similaires

  1. Probleme dans programme menu du LCD
    Par invited5a795fe dans le forum Électronique
    Réponses: 3
    Dernier message: 06/10/2010, 20h20
  2. gestion de menu et affichage sur un lcd
    Par insadelyon dans le forum Technologies
    Réponses: 0
    Dernier message: 23/04/2010, 18h39
  3. [Brun] lcd samsung mauvaise manip. service menu
    Par u_ns dans le forum Dépannage
    Réponses: 11
    Dernier message: 27/11/2009, 07h23
  4. [Brun] TV Grundig P37 841 fr chassis cuc 7303 : accès menu ?
    Par chauffeurtele dans le forum Dépannage
    Réponses: 5
    Dernier message: 19/10/2009, 12h04
  5. sony kv-21v6b télécommande et accès menu
    Par invite65213079 dans le forum Dépannage
    Réponses: 6
    Dernier message: 30/03/2005, 09h29
Découvrez nos comparatifs produits sur l'informatique et les technologies.