//------------ Programme PROG_ELEVE.C --------------------------- // // Auteur : // Version: 1.0 //----------------------------------------------------------- #include <16F877.H> // fichier Header : Déclaration des registres internes #fuses XT,NOWDT,NOLVP // quatz, pas de chien de garde //contrainte pour fonctionnement en ICD //#DEVICE ICD=true // Déclaration des adresses des ports E/S #byte PORTA = 5 // adresse du PORT A #byte PORTB = 6 // adresse du PORT B #byte PORTC = 7 // adresse du PORT C #byte PORTD = 8 // adresse du PORT D #byte PORTE = 9 // adresse du PORT E // Gestion sélection afficheurs #bit N0 = PORTA.0 // Affectation de N0 à PORTA.4 #bit N1 = PORTA.1 // Affectation de N1 à PORTA.5 // Gestion segments afficheurs #bit sega = PORTD.0 // Affectation de sega à PORTC.0 #bit segb = PORTD.1 // Affectation de segb à PORTC.1 #bit segc = PORTD.2 // Affectation de segc à PORTC.2 #bit segd = PORTD.3 // Affectation de segd à PORTC.3 #bit sege = PORTD.4 // Affectation de sege à PORTC.4 #bit segf = PORTD.5 // Affectation de segf à PORTC.5 #bit segg = PORTD.6 // Affectation de segg à PORTC.6 // Déclaration des variables globales long VAL; // Déclaration des constantes // Fréquence du quartz #use delay (clock=20000000) // Fréquence du quartz 20MHz //----------DECLARATION DES PROTOTYPES ----------- void INIT_UC(void); void CONV_BCD_7SEG(int); void AFFICHAGE(long); //----------Programme principal --------------------------------- main() { VAL = 8888; INIT_UC(); // Appel du sous-programme INIT_UC do // Répéter { AFFICHAGE(VAL); } while(1); // Jusqu'a toujours ! } // Procédure AFFICHAGE // Entrée : non // Sortie : non // Description: Gestion affichage multiplexé void AFFICHAGE(long VAL) { // Déclaration variables internes int BCD_M1, BCD_C1, BCD_D1, BCD_U1; long RESTE1, RESTE2, RESTE3; // Conversion en BCD BCD_M1 = VAL / 1000; RESTE1 = VAL % 1000; BCD_C1 = RESTE1 / 100; RESTE2 = RESTE1 % 100; BCD_D1 = RESTE2 / 10; RESTE3 = RESTE2 % 10; BCD_U1 = RESTE3; // commande de l'affichage multiplexé CONV_BCD_7SEG(10); // Effacer affichage N0=0; // Sélection afficheur Unité N1=0; CONV_BCD_7SEG(BCD_U1); // Affichage des unités delay_ms(1); CONV_BCD_7SEG(10); // Effacer affichage N0=1; // Sélection afficheur Dizaine N1=0; CONV_BCD_7SEG(BCD_D1); // Affichage des dizaines delay_ms(1); CONV_BCD_7SEG(10); // Effacer affichage N0=0; // Sélection afficheur Centaine N1=1; CONV_BCD_7SEG(BCD_C1); // Affichage des centaines delay_ms(1); CONV_BCD_7SEG(10); // Effacer affichage N0=1; // Sélection afficheur Millier N1=1; CONV_BCD_7SEG(BCD_M1); // Affichage des milliers delay_ms(1); } // Procédure CONV_BCD_7SEG // Entrée : BCD : code BCD // Sortie : non // Description: Conversion de code BCD code 7 segments void CONV_BCD_7SEG(int BCD) { switch (BCD) { case 0 : sega=0;segb=0;segc=0;segd=0;sege=0;segf=0;segg=1; break; case 1 : sega=1;segb=0;segc=0;segd=1;sege=1;segf=1;segg=1; break; case 2 : sega=0;segb=0;segc=1;segd=0;sege=0;segf=1;segg=0; break; case 3 : sega=0;segb=0;segc=0;segd=0;sege=1;segf=1;segg=0; break; case 4 : sega=1;segb=0;segc=0;segd=1;sege=1;segf=0;segg=0; break; case 5 : sega=0;segb=1;segc=0;segd=0;sege=1;segf=0;segg=0;break; case 6 : sega=0;segb=1;segc=0;segd=0;sege=0;segf=0;segg=0;break; case 7 : sega=0;segb=0;segc=0;segd=1;sege=1;segf=1;segg=1;break; case 8 : sega=0;segb=0;segc=0;segd=0;sege=0;segf=0;segg=0;break; case 9 : sega=0;segb=0;segc=0;segd=0;sege=1;segf=0;segg=0;break; case 10 : sega=1;segb=1;segc=1;segd=1;sege=1;segf=1;segg=1;break; default : sega=1;segb=1;segc=1;segd=1;sege=0;segf=1;segg=0;break; } } // Procédure INIT_UC // Entrée : Rien // Sortie : Rien // Description : Configuration et initialisation des PORTS d’entrée (=1) et de sortie (=0) void INIT_UC(void) { // PORTA : // RA0 : // RA3 : // RA1 : // RA4 : // RA2 : // RA5 : PORTA=0x00; set_tris_a(0b11111100); // PORTB : // RB0 : // RB4 : // RB1 : // RB5 : // RB2 : // RB6 : en entrée liaison ICD // RB3 : en entrée liaison ICD // RB7 : en entrée liaison ICD PORTB=0x00; set_tris_b(0b11111111); // PORTC : // RC0 : // RC4 : // RC1 : // RC5 : // RC2 : // RC6 : // RC3 : // RC7 : PORTC=0x00; set_tris_c(0b11111111); // PORTD : // RD0 : // RD4 : // RD1 : // RD5 : // RD2 : // RD6 : // RD3 : // RD7 : PORTD=0x07; set_tris_d(0b00000000); // PORTE : // RE0 : // RE1 : // RE2 : PORTE=0x00; set_tris_e(0b11111110); }