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
-----