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.0
#bit N1 = PORTA.1 // Affectation de N1 à PORTA.1
// Gestion segments afficheurs
#bit sega = PORTD.0 // Affectation de sega à PORTD.0
#bit segb = PORTD.1 // Affectation de segb à PORTD.1
#bit segc = PORTD.2 // Affectation de segc à PORTD.2
#bit segd = PORTD.3 // Affectation de segd à PORTD.3
#bit sege = PORTD.4 // Affectation de sege à PORTD.4
#bit segf = PORTD.5 // Affectation de segf à PORTD.5
#bit segg = PORTD.6 // Affectation de segg à PORTD.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 dentré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);
}