Bonjours !
Je suis une débutante en électronique et je suis chargée de la conception d'une carte électronique d'une serrure codée
j'ai fait le schéma électronique et le code source en C en utilisant le compilateur PIC C
Le code
le schéma lors de la simulation :Code:#include "16f877A.h" // PIC16F877 HEADER FILE #include "lcd.c" #use delay (clock =20M) // 20 MHZ CRYSTAL #fuses HS,NOWDT,NOPROTECT #byte TRISA=0x85 #byte TRISB=0x86 #byte TRISC=0x87 #byte TRISD=0x88 #byte PORTA=0x05 #byte PORTB=0x06 #byte PORTC=0x07 #byte PORTD=0x08 #bit c1=PORTD.1 #bit c2=PORTD.2 #bit c3=PORTD.3 #bit l1=PORTD.4 #bit l2=PORTD.5 #bit l3=PORTD.6 #bit l4=PORTD.7 #bit red=PORTA.0 #bit green=PORTA.1 #bit BUZZ=PORTB.0 #bit RELAY=PORTC.2 #define LCD_DATA_PORT getenv("SFR:PORTD") //CONFIGURATION LCD methode "port access" #define LCD_ENABLE_PIN PIN_B1 #define LCD_RS_PIN PIN_B2 #define LCD_RW_PIN PIN_B3 #define LCD_DATA4 PIN_B4 #define LCD_DATA5 PIN_B5 #define LCD_DATA6 PIN_B6 #define LCD_DATA7 PIN_B7 int touche; char welcome[16]={'-','-','-','-','B','i','e','n','v','e','n','u','e','-','-','-'}; char Ancien_cod[16]={'A','n','c','i','e','n',' ','c','o','d','e'}; char Nouveau_cod[16]={'N','o','u','v','e','a','u',' ','c','o','d','e'}; char Erreur_cod[16]={'E','r','r','e','u','r'}; char Entrer_cod[16]={'E','n','t','r','e','r',' ','c','o','d','e'}; int code[4]={0,0,0,0},code_saisie[4]; void clavier(void) { int i=0; PORTD=PORTD&0xF0; touche=13; l1=1; if(c1==1) {touche=1;++i;while(c1==1);} if(c2==1) {touche=2;++i;while(c2==1);} if(c3==1) {touche=3;++i;while(c3==1);} l1=0; l2=1; if(c1==1) {touche=4;++i;while(c1==1);} if(c2==1) {touche=5;++i;while(c2==1);} if(c3==1) {touche=6;++i;while(c3==1);} l2=0; l3=1; if(c1==1){ touche=7;++i;while(c1==1);} if(c2==1) {touche=8;++i;while(c2==1);} if(c3==1) {touche=9;++i;while(c3==1);} l3=0; l4=1; if(c1==1) {touche=10;++i;while(c1==1);} //'*' if(c2==1) {touche=0;++i;while(c2==1);} if(c3==1) {touche=11;++i;while(c3==1);}//'#' l4=0; } void mise_a_jour_code() { int j,i=0,Nb_vrai=0; if (touche==10) { lcd_gotoxy(1,1); for(j=0;j<16;j++)lcd_putc(Ancien_cod[j]); lcd_gotoxy(1,0x0D); while(i<4) { clavier(); if((touche!=13) & (touche!=10) & (touche!=11)) { code_saisie[i]=touche; lcd_putc('*'); i++; } } for(i=0;i<4;i++) if(code[i]==code_saisie[i]) Nb_vrai++; i=0; if (Nb_vrai==4) { lcd_gotoxy(1,1); for(j=0;j<16;j++)lcd_putc(Nouveau_cod[j]); lcd_gotoxy(1,0x0E); while(i<4) { clavier(); if((touche!=13) & (touche!=10) & (touche!=11)) { code[i]=touche; lcd_putc('*'); i++; } } lcd_gotoxy(1,1); for(j=0;j<16;j++)lcd_putc(welcome[j]); } else { lcd_gotoxy(1,1); for(j=0;j<16;j++)lcd_putc(Erreur_cod[j]); } } } void saisie_code() { int j=0,Nb_essais=0,Nb_vrai=0; if (touche==11) { Lab1: lcd_gotoxy(1,1); for(j=0;j<16;j++) lcd_putc(Entrer_cod[j]); j=0; lcd_gotoxy(1,0x0D); while(j<4) { clavier(); if((touche!=13) & (touche!=10) & (touche!=11)) { code_saisie[j]=touche; lcd_putc('*'); j++; } } delay_ms(1000); for(j=0;j<4;j++) if(code[j]==code_saisie[j]) Nb_vrai++; if(Nb_vrai==4) { lcd_gotoxy(1,1); for(j=0;j<16;j++)lcd_putc(welcome[j]); RELAY=1; green=1; delay_ms(5000); RELAY=0; green=0; } else { Nb_essais++; lcd_gotoxy(1,1); for(j=0;j<16;j++)lcd_putc(Erreur_cod[j]); if (Nb_essais==3) { BUZZ=1; red=1; delay_ms(10000); BUZZ=0; red=1; break; } delay_ms(2000); goto Lab1; } } } void main() { SET_TRIS_A(0x00); SET_TRIS_B(0x00); SET_TRIS_C(0x00); SET_TRIS_D(0xff); lcd_init(); while(true) { int j; lcd_gotoxy(1,1);; for(j=0;j<16;j++){lcd_putc(welcome[j]);} clavier(); mise_a_jour_code(); saisie_code(); } }
Simulation.JPG
J'ai remarqué un problème dans le fonctionnement de l'LCD
simulation LCD.JPG
Je doute que j'ai fait une faute de configuration de l'LCD dans le code source vu mes connaissance limitées et que c'esi la première fois que j'utilise ce compilateur
Avez vous des remarques ou des idées?
Merci pour votre aide
-----