Bonjour tout le monde,
jai un probleme dans la programmation avec mikroc
voila mon prog:

char trame[14];
char ref1[]="P2233445566";
char ref2[]="A25361478";
char ref3[] ="W770008911";
int i;
char kp;
void keypad();
// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB6_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 TRISB6_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

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

void main() {
uart1_init(9600);
uart1_write_text("Start");
uart1_write(10);
uart1_write(13);
portb=0;
TRISB = 0b00000001;
portc=0b00000000;
trisc=0b11100000;
i=0;
Lcd_Init(); // Initialize LCD
delay_ms(500);
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off

Keypad_Init(); // Initialize Keypad

do{
if(uart1_data_ready()==1){
UART1_Read_Text(trame, "#",255);

if (trame[2]=='1') {
portc=0b0000011;

Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1, 1, "Ref manchon bac1:");
Lcd_Out(2, 1,ref1);
}

if (trame[2]=='2') {
portc=0b0000010;
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1, 1, "Ref manchon bac2:");
Lcd_Out(2, 1,ref2);
}

if (trame[2]=='3') {
portc=0b0000001;
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1, 1, "Ref manchon bac3:");
Lcd_Out(2, 1,ref3);
}

if (trame[2]=='k'){
keypad();}

}

} while(1);}

void keypad(){
Keypad_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_out(1,1,"tapez ref1");
do{

kp = 0;

do
kp = Keypad_Key_Click(); // Store key code in kp variable
while (!kp);

switch (kp) {

case 1: kp = 49; break; // 1 // Uncomment this block for keypad4x4
case 2: kp = 50; break; // 2
case 3: kp = 51; break; // 3
/*case 4: kp = 65; break;*/ // A
case 5: kp = 52; break; // 4
case 6: kp = 53; break; // 5
case 7: kp = 54; break; // 6
/*case 8: kp = 66; break;*/ // B
case 9: kp = 55; break; // 7
case 10: kp = 56; break; // 8
case 11: kp = 57; break; // 9
/*case 12: kp = 67; break;*/ // C
case 13: kp = 42; break; // *
case 14: kp = 48; break; // 0
case 15: kp = 35; break; // #
/*case 16: kp = 68; break*/; // D

}

ref1[i]=kp;
Lcd_chr(2,i+1,kp);
i++;
if(kp==35) { kp=0;
Lcd_Cmd(_LCD_CLEAR);
Lcd_out(1,1,"tapez ref2");
i=0;
ref2[i]=kp;
Lcd_chr(2,i+1,kp);
i++; }
if(kp==42) { kp=0;
Lcd_Cmd(_LCD_CLEAR);
Lcd_out(1,1,"tapez ref3");
i=0;
ref3[i]=kp;
Lcd_chr(2,i+1,kp);
i++;}
if(kp==48) {
Lcd_Cmd(_LCD_CLEAR);
Lcd_out(1,6,"Merciii");}

} while(1);


je veux utiliser le clavier seulement lorsque je veux changer les valeurs de ref1,ref2 et ref3 (si trame[2]=='k'). lorsque jenvoi 'k' je tape les nouvelles valeurs mais le probleme c'est que le prog ne sort pas del fonction keypad() càd lorsque j'envoi '1' ,'2' ou '3' pour voir la mise à jour des valeurs rien ne change (l'afficheur lcd affiche encore "Merciii") :/
note: j'utilise proteus pour la simulation
j'ai vraiment besoin de votre aide je c pas quoi faire. merciii