Fonction En C

Résolu
wallaby83140 Messages postés 9 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 10 mai 2011 - 10 mai 2011 à 22:56
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 - 11 mai 2011 à 08:43
Bonjour

Alors je dois transformer les fonctions MIL, CEN, DIX et UNI en une seule je sais qu'il faut mettre des argument genre void fonction(argument) mais je suis bloqué la car je ne sais pas commetn faire. Un petit coup de pouce ne sera pas de refu :)



#include <mega103.h>
#include <delay.h>

unsigned char M;
unsigned char C;
unsigned char D;
unsigned char U;

void MIL(void)
{
    if(M==0)
    {
        PORTB= 0xC0;
    }
    
    if(M==1)
    {
        PORTB=0xF9;
    }
     
    if(M==2)
    {
        PORTB=0xA4;
    }  
    
    if(M==3)
    {
        PORTB=0xB0;
    }

    if(M==4)
    {
        PORTB=0x99;
    }
    
    if(M==5)
    {
        PORTB=0x92;
    }
    
    if(M==6)
    {
        PORTB=0x82;
    }  
    
    if(M==7)
    {
        PORTB=0xF8;
    } 
    
    if(M==8)
    {
        PORTB=0x80;
    }
    
    if(M==9)
    {
        PORTB=0x90;
    } 
    
    PORTE=0x01;
    delay_us(65);
}

void CEN(void)
{
    if(C==0)
    {
        PORTB= 0xC0;
    }
    
    if(C==1)
    {
        PORTB=0xF9;
    }
     
    if(C==2)
    {
        PORTB=0xA4;
    }  
    
    if(C==3)
    {
        PORTB=0xB0;
    }

    if(C==4)
    {
        PORTB=0x99;
    }
    
    if(C==5)
    {
        PORTB=0x92;
    }
    
    if(C==6)
    {
        PORTB=0x82;
    }  
    
    if(C==7)
    {
        PORTB=0xF8;
    } 
    
    if(C==8)
    {
        PORTB=0x80;
    }
    
    if(C==9)
    {
        PORTB=0x90;
    } 
    
    PORTE=0x02;
    delay_us(65);
}
void DIX(void)
{
    if(D==0)
    {
        PORTB= 0xC0;
    }
    
    if(D==1)
    {
        PORTB=0xF9;
    }
     
    if(D==2)
    {
        PORTB=0xA4;
    }  
    
    if(D==3)
    {
        PORTB=0xB0;
    }

    if(D==4)
    {
        PORTB=0x99;
    }
    
    if(D==5)
    {
        PORTB=0x92;
    }
    
    if(D==6)
    {
        PORTB=0x82;
    }  
    
    if(D==7)
    {
        PORTB=0xF8;
    } 
    
    if(D==8)
    {
        PORTB=0x80;
    }
    
    if(D==9)
    {
        PORTB=0x90;
    } 
    
    PORTE=0x04;
    delay_us(65);
}

void UNI(void)
{
    if(U==0)
    {
        PORTB= 0xC0;
    }
    
    if(U==1)
    {
        PORTB=0xF9;
    }
     
    if(U==2)
    {
        PORTB=0xA4;
    }  
    
    if(U==3)
    {
        PORTB=0xB0;
    }

    if(U==4)
    {
        PORTB=0x99;
    }
    
    if(U==5)
    {
        PORTB=0x92;
    }
    
    if(U==6)
    {
        PORTB=0x82;
    }  
    
    if(U==7)
    {
        PORTB=0xF8;
    } 
    
    if(U==8)
    {
        PORTB=0x80;
    }
    
    if(U==9)
    {
        PORTB=0x90;
    } 
    
    PORTE=0x08;
    delay_us(65);
}

void main(void)
{   
    DDRB= 0xFF;
    PORTB= 0x00;
    
    DDRE= 0xFF;
    PORTE= 0x00;
    
    while(1)
    {
        M=9;
        C=8;
        D=7;
        U=1;
        
        MIL();
        CEN();
        DIX();
        UNI();
    }
}



PS: compilateur CVAVR.

2 réponses

wallaby83140 Messages postés 9 Date d'inscription vendredi 19 février 2010 Statut Membre Dernière intervention 10 mai 2011
10 mai 2011 à 23:49
C'est bon résolu .
3
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
11 mai 2011 à 08:43
Bonjour,
A la place des "if" utilise "switch" le code n'en sera que plus lisible et maintenable.


louis
0
Rejoignez-nous