so
tut mir echt leid für die verspätete antwort hatte letzen tage bissl stress^^
das hier ist mein volles programm
ich gehe mal von aus das ihr das dann versteht was o auf sich hat
Code:
#include "stdlib.h"
#include "asuro.h"
#include "lcd.h"
#include "i2c.h"

int speed = 100;
int o = 1;

void start(int speed)
{
 int keys;
 int i = 1;
 int zaehler = 0 ;
 while(i >0)
	  {
 	   keys = PollSwitchLCD();
   	   if (keys & LCD_KEY_YELLOW)		//schwarzer Taster
  	   {
	   	while ( zaehler == 0)
		{
		 if(speed < 350)					//Geschwindigkeit erhöhen
		 {
         speed = speed +10;
		 ClearLCD(); 
		 PrintSetLCD(0,0,"Geschwindigkeit");
		 SetCursorLCD(0, 1);
		 zaehler  = zaehler +1;
    	 PrintIntLCD(speed);
		 }
         zaehler  = zaehler +1;
		 }
  		 }
         else if (keys & LCD_KEY_RED )	//roter Taster
    	 {								//wechseln von der Geschwindigkeiseinstellung
         i = 0;							//in den Messbetrieb	
    	 }
    	 else if (keys & LCD_KEY_BLUE )	//Blauer Taster
    	 {
		 while ( zaehler == 0)
		 {
		 if(speed >0)
		 {
         speed = speed -10;				//Geschwindigkeit vermindern
		 ClearLCD();
		 PrintSetLCD(0,0,"Geschwindigkeit");
		 SetCursorLCD(0, 1);
	     PrintIntLCD(speed);
		 zaehler  = zaehler +1;
		 }
		 zaehler  = zaehler +1;
		}
    	}
		if(!keys)				// für das einmalige hochzählen beim drücken eines knopfes
		{
		Msleep(100);
		zaehler = 0;
        }
		
      }
	  o--;

	  

}

void berechnung(int zeit)
{
 int keys;
 int reifen = 120; //Reifenumfang in mm
 int wegaenderung = 0;
 int inszeit = 0;
 int geschwindigkeit = 0;
 int durchschnitt = 0;
 int zaehler = 1 ;


  while(1)
  {	
  	
  	int odometrie =  encoder[0];

    wegaenderung = odometrie + reifen / 8 / 10;
	inszeit = Gettime() /1000;
	geschwindigkeit = wegaenderung / inszeit;
	durchschnitt = wegaenderung / inszeit;
    keys = PollSwitchLCD();
      if(keys)				// für das ständige aktuallisieren der Daten
	     {
	     zaehler = 0;
         }
      if ((keys & LCD_KEY_YELLOW) || (zaehler == 1) ) // Geschwindigkeit
         {
		 ClearLCD(); 
		 PrintSetLCD(0,0,"CM pro S");
		 SetCursorLCD(0, 1);
    	 PrintIntLCD(geschwindigkeit);
		 zaehler = 1; 
		 }
      else if ((keys & LCD_KEY_RED) || (zaehler == 2)) //Zurückgelegter Weg
         {
		 ClearLCD(); 
		 PrintSetLCD(0,0,"Weg in CM");
		 SetCursorLCD(0, 1);
    	 PrintIntLCD(wegaenderung);
		 zaehler = 2;  
         }
      else if ((keys & LCD_KEY_BLUE) || (zaehler == 3)) // Durchschnittsgeschwindigkeit
         {
		 ClearLCD(); 
		 PrintSetLCD(0,0,"CM pro S");
		 SetCursorLCD(0, 1);
    	 PrintIntLCD(durchschnitt);
		 zaehler = 3;
		 }
	
    Msleep(100);
  }
}
 
 //Hauptprogramm 
int main(void)
{

    //Geschwindigkeit 
    //void int speed = 100;
   

	
    Init();
	InitI2C();
    InitLCD();
	EncoderInit();
	EncoderSet(780,790);
	EncoderStart();
    GREEN_LED_ON;

	while(o > 0)
	{
    PrintSetLCD(0,0,"Geschwindigkeit");
	SetCursorLCD(0, 1);
	PrintIntLCD(speed);
	start(speed);
	}
	MotorDir(FWD,FWD);
    MotorSpeed(speed,speed);
	int zeit = Gettime() / 1000;	//zeit in Sekunden
	ClearLCD(); 
	PrintIntLCD(zeit);
	berechnung(zeit);
	
    
  	 
}
das einzigste problem ist einfach das speed mit start zwar verändert werden kann aber nicht weiter übernommen wird