All pastes #511848 Raw Edit

Untitled

public text v1 · immutable
#511848 ·published 2007-05-26 16:47 UTC
rendered paste body
//------------ 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);
}