Umwandlungsalgorithmuß optimieren?



  • Servus, ich schreibe gerade ein Programm für einen Mikrocontroller.

    dabei ergibt sich das Problem das ich aus dem AD-Wandler ne 4 stellige Zahl zb

    1234 auslese und diese nun in 4 einzelne chars umwandeln muß damit sie auf den 4 segmenten darstellbar sind.

    Also 1,2,3,4, wobei als sonderbedingung die Stelle 4 immer 0 ist.

    Da der Algorithmus recht lang ist frag ich mich ob sich da noch etwas optimieren läßt?

    void ausgabe(int displaywert)
    {
    	unsigned char seg1_1000=0x0;
    	unsigned char seg2_100=0x0;
    	unsigned char seg3_10=0x0;
    	unsigned char seg4_1=0x0;  // Immer = 0  
    	int n;
    
    	for(n=0; n<=displaywert+1; n++)
    	{
            if(n>(((seg1_1000)*1000)+1000) && n <= 10000)
    		{
    			seg1_1000++;
    		}
    	}
    
        displaywert-=seg1_1000*1000;
    
        for(n=0; n<=displaywert+1; n++)
    	{
    		if(n>(((seg2_100)*100)+100) && n <= 1000)
    		{
    			seg2_100++;
    		}
    	}
    
    	displaywert-=seg2_100*100;
    
        for(n=0; n<=displaywert+1; n++)
    	{
    		if(n>(((seg3_10)*10)+10) && n <= 100)			
    		{
    			seg3_10++;
    		}
    	}
    
    //Ausgabe auf Display
    }
    


  • Kennst du Arrays?

    void ausgabe(unsigned int display_wert)
    {
    	unsigned char segments[4] = {0, 0, 0, 0};
    
    	display_wert /= 10;
    	for (unsigned int i = 2; display_wert != 0; display_wert /= 10)
    	{
    		segments[i] = display_wert % 10;
    		--i;
    	}
    
    	// Ausgabe...
    }
    


  • void ausgabe(int displaywert)
    {
      unsigned char seg1_1000 = displaywert/1000;
      unsigned char seg2_100 = (displaywert-seg1_1000*1000)/100;
      unsigned char seg3_10 = (displaywert-seg1_1000*1000-seg2_100*100)/10;
      unsigned char seg4_1=0x0;  // Immer = 0  
    
      // Ausgabe auf display
      // printf ("%c %c %c %c\n", seg1_1000+'0', seg2_100+'0', seg3_10+'0', seg4_1+'0'); 
    }
    

    🙂



  • #include <stdio.h>
    #include <stdlib.h>
    
    void CoNvErToR( int num )
    {
    	char buf[5] = {0};	
    	itoa( num, buf, 10 ); // Die 10 ist die Basis des gewünschten Zahlensystems.
    	printf( "%c %c %c %c\n", buf[0], buf[1], buf[2], buf[3] );
    	return;
    }
    
    int main()
    {
    	CoNvErToR(1234);
    	return 0;
    }
    

Log in to reply