Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

besoin d'aide pour Entrer des valeurs dans un pic 16F877A à travers un clavier 4X4



  1. #1
    ensolo

    besoin d'aide pour Entrer des valeurs dans un pic 16F877A à travers un clavier 4X4


    ------

    Entrer des valeurs dans un pic 16F877A à travers un clavier 4X4

    Bonjour!
    j'essaie d'écrire un programme pour entrer des nombres à 4 chiffres dans un pic 16F877A à l'aide d'un clavier 4X4 et d'afficheur ces nombres sur un LCD 4X20 à l'aide du logiciel MikroC pro.
    Voilà mon programme qui ne s'exécute par correctement.

    S'il vous plait, m'indiquer où j'ai fait l'erreur et merci d'avance!

    unsigned short kp, cnt, oldstate = 0,i=0;
    char txt[6];
    float T[6];


    // Keypad module connections
    char keypadPort at PORTD;
    // End Keypad module connections

    // LCD module connections
    sbit LCD_RS at RB2_bit;
    sbit LCD_EN at RB3_bit;
    sbit LCD_D4 at RB4_bit;
    sbit LCD_D5 at RB5_bit;
    sbit LCD_D6 at RB6_bit;
    sbit LCD_D7 at RB7_bit;
    sbit LCD_RS_Direction at TRISB2_bit;
    sbit LCD_EN_Direction at TRISB3_bit;
    sbit LCD_D4_Direction at TRISB4_bit;
    sbit LCD_D5_Direction at TRISB5_bit;
    sbit LCD_D6_Direction at TRISB6_bit;
    sbit LCD_D7_Direction at TRISB7_bit;
    // End LCD module connections


    char txt1[] = " Initialisation ";
    char txt2[] = " ...Machine prete...";
    char txt3[] = "Largeur:";
    char txt4[] = "ON:valider =:effacer";
    char txt5[] = "X:annuler";

    void main() {
    cnt = 0; // Reset counter
    Keypad_Init(); // Initialize Keypad
    ADCON1=6;
    Lcd_Init(); // Initialize LCD
    Lcd_Cmd(_LCD_CLEAR); // Clear display
    Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
    Lcd_Out(2,6,txt1); // Write text in first row
    delay_ms(2000);
    Lcd_Cmd(_LCD_CLEAR);
    Lcd_Out(1,1,txt2); // Write text in second row
    //Lcd_Out(2,1,txt3);
    //Lcd_Out(3,1,txt4);
    //Lcd_Out(4,1,txt5);

    do {
    kp = 0; // Reset key code variable

    // Wait for key to be pressed and released
    do
    kp = Keypad_Key_Click(); // Store key code in kp variable
    while (!kp);
    // Prepare value for output, transform key to it's ASCII value
    switch (kp) {

    case 1: kp = 55; break; // 7 // Uncomment this block for keypad4x4
    case 2: kp = 56; break; // 8
    case 3: kp = 57; break; // 9
    case 4: kp = 27; break; // ESC
    case 5: kp = 52; break; // 4
    case 6: kp = 53; break; // 5
    case 7: kp = 54; break; // 6
    case 8: kp = 127; break; // DEL
    case 9: kp = 49; break; // 1
    case 10: kp = 50; break; // 2
    case 11: kp = 51; break; // 3
    case 12: kp = 95; break; // -
    case 13: kp = 42; break; // *
    case 14: kp = 48; break; // 0
    case 15: kp = 61; break; // =
    case 16: kp = 43; break; // +

    }
    barnabe: i=0;
    do { steve: kp = Keypad_Key_Click();}
    while( (Kp==27)||(Kp==127)||(Kp==95)| |(Kp==42)||(Kp==61)||(Kp==43)) ;
    T[i]= kp;
    i=i+1;
    FloatToStr(T[i], txt);
    // WordToStr(cnt, txt); // Transform counter value to string
    Lcd_Out(2, 9, txt); // Display counter value on LCD
    if(i<1){goto steve;}
    else
    if(i>2){goto barnabe;}
    else
    do{
    Lcd_Out(3, 1, txt4);
    Lcd_Out(4, 1, txt5);
    kp = Keypad_Key_Click(); // Store key code in kp variable
    } while(kp!=42);
    PORTB.B0=1;
    } while (1);
    }

    Répondre avec citation Répondre au message privé Transférer le message Transférer

    Réponse rapide
    Historique du message Voir l'historique

    Supprimer ce message
    Supprimer ce message

    Pour supprimer ce message, cocher la case appropriée ci-dessous et cliquez sur le bouton « Supprimer ce message ».
    Mes messages

    Boîte de réception
    Éléments envoyés

    Envoyer un message
    Suivre vos messages
    Modifier vos dossiers

    Mes abonnements

    Abonnements

    Modifier vos dossiers

    Mes paramètres

    Mon profil Mon profil
    Modifier votre profil
    Modifier votre signature
    Vie privée
    Mon compte utilisateur Mon compte utilisateur
    Email & Mot de passe
    Options générales
    Modifier la liste d'ignorés
    Réseau social Réseau social
    Amis & Contacts
    Rappel des événements
    Forums Divers
    Pièces jointes

    -----

  2. Publicité
  3. 📣 Nouveau projet éditorial de Futura
    🔥🧠 Le Mag Futura est lancé, découvrez notre 1er magazine papier

    Une belle revue de plus de 200 pages et 4 dossiers scientifiques pour tout comprendre à la science qui fera le futur. Nous avons besoin de vous 🙏 pour nous aider à le lancer...

    👉 Je découvre le projet

    Quatre questions à explorer en 2022 :
    → Quels mystères nous cache encore la Lune 🌙 ?
    → Pourra-t-on bientôt tout guérir grâce aux gènes 👩‍⚕️?
    → Comment nourrir le monde sans le détruire 🌍 ?
    → L’intelligence artificielle peut-elle devenir vraiment intelligente 🤖 ?
  4. #2
    Franck-026

    Re : besoin d'aide pour Entrer des valeurs dans un pic 16F877A à travers un clavier 4X4

    c'est pas les exemples qui manquent sur le web... Chercher sous: "clavier matriciel" ou "matrice keyboard"

  5. #3
    ensolo

    Re : besoin d'aide pour Entrer des valeurs dans un pic 16F877A à travers un clavier 4X4

    Bonjour Franck!
    mon problème c'est le programme, je ne sais pas trop pourquoi ça ne fonctionne pas bien quand je lance la simulation sur ISIS.
    S'il te plait, mets y un peu de ton temps.



    besoin d'aide pour Entrer des valeurs dans un pic 16F877A à travers un clavier 4X4

    Entrer des valeurs dans un pic 16F877A à travers un clavier 4X4

    Bonjour!
    j'essaie d'écrire un programme pour entrer des nombres à 4 chiffres dans un pic 16F877A à l'aide d'un clavier 4X4 et d'afficheur ces nombres sur un LCD 4X20 à l'aide du logiciel MikroC pro.
    Voilà mon programme qui ne s'exécute par correctement.

    S'il vous plait, m'indiquer où j'ai fait l'erreur et merci d'avance!

    unsigned short kp, cnt, oldstate = 0,i=0;
    char txt[6];
    float T[6];


    // Keypad module connections
    char keypadPort at PORTD;
    // End Keypad module connections

    // LCD module connections
    sbit LCD_RS at RB2_bit;
    sbit LCD_EN at RB3_bit;
    sbit LCD_D4 at RB4_bit;
    sbit LCD_D5 at RB5_bit;
    sbit LCD_D6 at RB6_bit;
    sbit LCD_D7 at RB7_bit;
    sbit LCD_RS_Direction at TRISB2_bit;
    sbit LCD_EN_Direction at TRISB3_bit;
    sbit LCD_D4_Direction at TRISB4_bit;
    sbit LCD_D5_Direction at TRISB5_bit;
    sbit LCD_D6_Direction at TRISB6_bit;
    sbit LCD_D7_Direction at TRISB7_bit;
    // End LCD module connections


    char txt1[] = " Initialisation ";
    char txt2[] = " ...Machine prete...";
    char txt3[] = "Largeur:";
    char txt4[] = "ON:valider =:effacer";
    char txt5[] = "X:annuler";

    void main() {
    cnt = 0; // Reset counter
    Keypad_Init(); // Initialize Keypad
    ADCON1=6;
    Lcd_Init(); // Initialize LCD
    Lcd_Cmd(_LCD_CLEAR); // Clear display
    Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
    Lcd_Out(2,6,txt1); // Write text in first row
    delay_ms(2000);
    Lcd_Cmd(_LCD_CLEAR);
    Lcd_Out(1,1,txt2); // Write text in second row
    //Lcd_Out(2,1,txt3);
    //Lcd_Out(3,1,txt4);
    //Lcd_Out(4,1,txt5);

    do {
    kp = 0; // Reset key code variable

    // Wait for key to be pressed and released
    do
    kp = Keypad_Key_Click(); // Store key code in kp variable
    while (!kp);
    // Prepare value for output, transform key to it's ASCII value
    switch (kp) {

    case 1: kp = 55; break; // 7 // Uncomment this block for keypad4x4
    case 2: kp = 56; break; // 8
    case 3: kp = 57; break; // 9
    case 4: kp = 27; break; // ESC
    case 5: kp = 52; break; // 4
    case 6: kp = 53; break; // 5
    case 7: kp = 54; break; // 6
    case 8: kp = 127; break; // DEL
    case 9: kp = 49; break; // 1
    case 10: kp = 50; break; // 2
    case 11: kp = 51; break; // 3
    case 12: kp = 95; break; // -
    case 13: kp = 42; break; // *
    case 14: kp = 48; break; // 0
    case 15: kp = 61; break; // =
    case 16: kp = 43; break; // +

    }
    barnabe: i=0;
    do { steve: kp = Keypad_Key_Click();}
    while( (Kp==27)||(Kp==127)||(Kp==95)| |(Kp==42)||(Kp==61)||(Kp==43)) ;
    T[i]= kp;
    i=i+1;
    FloatToStr(T[i], txt);
    // WordToStr(cnt, txt); // Transform counter value to string
    Lcd_Out(2, 9, txt); // Display counter value on LCD
    if(i<1){goto steve;}
    else
    if(i>2){goto barnabe;}
    else
    do{
    Lcd_Out(3, 1, txt4);
    Lcd_Out(4, 1, txt5);
    kp = Keypad_Key_Click(); // Store key code in kp variable
    } while(kp!=42);
    PORTB.B0=1;
    } while (1);
    }

  6. #4
    Franck-026

    Re : besoin d'aide pour Entrer des valeurs dans un pic 16F877A à travers un clavier 4X4

    Si isis etait l'outil de simulo par excellence, ca se saurait. Ce qui ne m'etonne pas, c'est qu'une simulo reussie aboutit sur un fiasco en reel. et ca c'est normal.
    Isis ne simule que des cas generaux avec de grosses bisouilles pour arranger la sauce (surtout avec les µC)...
    Et c'est un programme que tu as pondu toi? ou repiqué a quelqu'un d'autre?

  7. A voir en vidéo sur Futura
  8. #5
    ensolo

    Re : besoin d'aide pour Entrer des valeurs dans un pic 16F877A à travers un clavier 4X4

    oui, c'est un programme que j'ai écris moi même, et comme je suis nul dans ce domaine, c'est pourquoi je demande votre aide!

Discussions similaires

  1. comment faire pour entrer ce code dans mon PIC?
    Par badr-MOB dans le forum Électronique
    Réponses: 8
    Dernier message: 13/02/2011, 12h00
  2. cherche code source pour clavier 4x4
    Par LABTOOL48 dans le forum Électronique
    Réponses: 1
    Dernier message: 20/04/2010, 19h22
  3. Besoin d'aide interruption pic 16F877A
    Par yannick13 dans le forum Électronique
    Réponses: 0
    Dernier message: 25/05/2009, 09h35
  4. Réponses: 0
    Dernier message: 05/03/2007, 16h48
  5. besoin d'aide pour realiser des formule pour inserer dans un tableur
    Par sixrocco dans le forum Mathématiques du collège et du lycée
    Réponses: 1
    Dernier message: 23/08/2006, 19h20
Découvrez nos comparatifs produits sur l'informatique et les technologies.