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);
}
-----