tout d'abord, merci pour l'explication. ensuite, le message de "veuillez saisir le code" ne s'affiche pas, le pic exécute directement la saisie du clavier comme si il ignore la condition de choix du bouclage...
tout d'abord, merci pour l'explication. ensuite, le message de "veuillez saisir le code" ne s'affiche pas, le pic exécute directement la saisie du clavier comme si il ignore la condition de choix du bouclage...
j'ai essayé votre solution mais il y'a des tons d'erreurs, s'il vous plait pourquoi?
voici la liste d'erreur ainsi le programme et en compilant tu verras qu'il y a 43 erreurs!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126 #include "16F877A.h" #use delay(clock=10M) #byte PORTB= 0x06 #byte PORTC= 0x07 #byte TRISB= 0x86 #byte TRISC= 0x87 #byte PORTD= 0x08 #byte TRISD= 0x88 #bit E =PORTC.0 #bit RS=PORTC.1 #bit C1=PORTD.0 #bit C2=PORTD.1 #bit C3=PORTD.2 char texte[28]="veuillez saisir le code "; int i; char touche; void envoie_commande(char commande) { E=0; RS=0;//mode commande PORTB=commande; E=1; delay_us(50); E=0; } void envoie_caractere(char caractere) { E=0; RS=1;//mode affichage PORTB=caractere; E=1; delay_us(50); E=0; } #int_timer0 char clavier() { touche='\n'; PORTD=0x08;//Selection de la ligne A if(C1==1){touche='1';while(C1==1);} if(C2==1){touche='2';while(C2==1);} if(C3==1){touche='3';while(C3==1);} PORTD=0x10;//Selection de la ligne B if(C1==1){touche='4';while(C1==1);} if(C2==1){touche='5';while(C2==1);} if(C3==1){touche='6';while(C3==1);} PORTD=0x20;//Selection de la ligne C if(C1==1){touche='7';while(C1==1);} if(C2==1){touche='8';while(C2==1);} if(C3==1){touche='9';while(C3==1);} PORTD=0x40;//Selection de la ligne D if(C1==1){touche='*';while(C1==1);} if(C2==1){touche='0';while(C2==1);} if(C3==1){touche='#';while(C3==1);} return touche; } //!void decodage(char touche) //!{ //! switch(touche) //! { //! case '0': PORTB=0x3F;break; //! case '1': PORTB=0x06;break; //! case '2': PORTB=0x5B;break; //! case '3': PORTB=0x4F;break; //! case '4': PORTB=0x66;break; //! case '5': PORTB=0x6D;break; //! case '6': PORTB=0x7D;break; //! case '7': PORTB=0x07;break; //! case '8': PORTB=0x7F;break; //! case '9': PORTB=0x6F;break; //! } //!} void init_LCD() { delay_ms(15);//attendre le démarrage du LCD envoie_commande(0x3C);//Mode 8bits, 2ligne, 5*10 font delay_ms(5); envoie_commande(0x3C);//Mode 8bits, 2ligne, 5*10 font delay_ms(100); envoie_commande(0x0E);//display on, Corseur on, blink off delay_ms(5); envoie_commande(0x01);// clear dispaly delay_ms(5); } void rotation(int texte[26]) { int A; A=Texte[0]; for(i=0;i<25;i++) texte[i]=texte[i+1]; texte[24]=A; } void main() { void __ISR(PORTD,0x08) clavier(void) TRISB=0x00; TRISC=0xFC; TRISD=0x87; setup_timer_0 (RTCC_DIV_128|RTCC_INTERNAL); enable_interrupts(INT_TIMER0); enable_interrupts(GLOBAL); enable_interrupts(clavier); init_LCD(); while(touche) { envoie_commande(0x80); for(i=0;i<24;i++) envoie_caractere(texte[i]); { delay_ms(200); rotation(texte); } } //! while(touche) //! { //!if (touche!='\n') //! { //! envoie_caractere(touche); //! touche='\n'; //! } //! } }
Je n'ai pas de compilo pour PIC32 sous la main. Il me semblerait plus logique que tu donnes ces messages d'erreur.
Dans ta boucle for, tu appelles bien une fonction envoie_caractere: il y a de fortes chance chances que ton problème soit dans le dialogue avec le LCD. Un port dans le mauvais sens, un timing non respecté, je ne sais pas, en tout cas des choses bien imbriquées dans le hardware que toi seul peut vérifier. Ça veut dire oscilloscope et deboggueur.
Au lieu de dire que tu as 43 messages d'erreur, ne pourrais tu pas plutôt essayer de les comprendre? Ton problème est là, tu n'essaies pas de comprendre. Exemple type:
Ca, c'est écrit au petit bonheur, ça ne veut rien dire, et dans tes 43 erreurs, il y en a au moins une qui se rapporte à ça.
Code : Sélectionner tout - Visualiser dans une fenêtre à part enable_interrupts(clavier);
Plutôt que de compter sur les autres pour débugger ton code ouvre un tuto, fait des recherches sur internet. Jusqu'à maintenant la plupart de tes réponses ressemblent à "aidez-moi, je comprend pas". Fais une bonne sieste, reprend ton code à tête reposée et essaye de l'analyser pas par pas pour comprendre ce qu'il se passe à chaque étape et si l'enchainement des étapes est logique. A priori c'est toi qui l'a écrit ce code donc tu devrais savoir à quoi correspond chaque fonction et chaque étape. Pour ce qui est des erreurs de compilo, va voir sur google ce que veulent dire ces erreurs ensuite rend toi à la ligne correspondante et analyse. La programmation c'est encore plus dur si on ne fait pas l'effort de chercher et de comprendre.
salut,
Je vous remercie pour votre aide...
salut encore,
je viens de réaliser la saisie du clavier mais mon nouveau problème consiste à comparer deux tableaux d'entier l'un d'eux est prédéfini (dans mon cas est "1234") avec le tableau des valeurs qui sera saisi à partir du clavier, ainsi, si le code est correct il affiche le message "code correct" sinon "code incorrect" mais en simulation il affiche toujour "code incorrect" malgré que le code que j'ai saisi est "1234". j'ai rein compris du tout, j'ai tout essayé mais rien...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155 #include "16F877A.h" #use delay(clock=10M) #byte PORTB= 0x06 #byte PORTC= 0x07 #byte TRISB= 0x86 #byte TRISC= 0x87 #byte PORTD= 0x08 #byte TRISD= 0x88 #bit E =PORTC.0 #bit RS=PORTC.1 #bit C1=PORTD.0 #bit C2=PORTD.1 #bit C3=PORTD.2 char texte[28]="veuillez saisir le code "; char Tvrep[13]="code correct"; char Tfrep[15]="code incorrect"; int i; char touche=' '; void envoie_commande(char commande) { E=0; RS=0;//mode commande PORTB=commande; E=1; delay_us(50); E=0; } void envoie_caractere(char caractere) { E=0; RS=1;//mode affichage PORTB=caractere; E=1; delay_us(50); E=0; } #int_timer0 void clavier() { touche=' '; PORTD=0x08;//Selection de la ligne A if(C1==1){touche='1';while(C1==1);} if(C2==1){touche='2';while(C2==1);} if(C3==1){touche='3';while(C3==1);} PORTD=0x10;//Selection de la ligne B if(C1==1){touche='4';while(C1==1);} if(C2==1){touche='5';while(C2==1);} if(C3==1){touche='6';while(C3==1);} PORTD=0x20;//Selection de la ligne C if(C1==1){touche='7';while(C1==1);} if(C2==1){touche='8';while(C2==1);} if(C3==1){touche='9';while(C3==1);} PORTD=0x40;//Selection de la ligne D if(C1==1){touche='*';while(C1==1);} if(C2==1){touche='0';while(C2==1);} if(C3==1){touche='#';while(C3==1);} } void init_LCD() { delay_ms(15);//attendre le démarrage du LCD envoie_commande(0x3C);//Mode 8bits, 2ligne, 5*10 font delay_ms(5); envoie_commande(0x3C);//Mode 8bits, 2ligne, 5*10 font delay_ms(100); envoie_commande(0x0E);//display on, Corseur on, blink off delay_ms(5); envoie_commande(0x01);// clear dispaly delay_ms(5); } void rotation(int texte[26]) { int A; A=Texte[0]; for(i=0;i<25;i++) texte[i]=texte[i+1]; texte[24]=A; } void main() { int T[4]={1,2,3,4}; int Ts[4]; int cmp,j,code; TRISB=0x00; TRISC=0xFC; TRISD=0x87; setup_timer_0 (RTCC_DIV_128|RTCC_INTERNAL); enable_interrupts(INT_TIMER0); enable_interrupts(GLOBAL); init_LCD(); func1: while(touche==' ') { disable_interrupts(INT_TIMER0); envoie_commande(0x80); for(i=0;i<24;i++) envoie_caractere(texte[i]); { delay_ms(200); rotation(texte); } enable_interrupts(INT_TIMER0); } envoie_commande(0x01);// clear dispaly delay_ms(5); for(cmp=1;cmp<5;cmp++) { func2: if (touche!=' ') { envoie_caractere('*'); touche=' '; Ts[cmp]=touche; } else {goto func2;} } for (j=1;j<5;j++) { if (Ts[j]==T[j]) { code=1; } else{code=0;} } while(true) { if(code==0) { disable_interrupts(INT_TIMER0); envoie_commande(0x80); for(i=0;i<24;i++) envoie_caractere(Tfrep[i]); { delay_ms(1000); rotation(texte); } enable_interrupts(INT_TIMER0); goto func1; } else { disable_interrupts(INT_TIMER0); envoie_commande(0x80); for(i=0;i<24;i++) envoie_caractere(Tvrep[i]); { delay_ms(1000); rotation(texte); } enable_interrupts(INT_TIMER0); } } }
Partager