Hallo Michele,

also ich habe in einem Projekt in dem ich einen Auto und einen Handbetrieb habe das ganze so gelöst...

Funktion LCD:

Code:
void fnLCDAusgabe(int iTemperature) 
{ 
   if (bBetriebsart==1)  //Handbetrieb
   { 
                
                
     switch(uiMenuCounter)
     {

       case 0:  //wird nur zur Kurzzeitigen Anzeige auf Display benötigt
         
                lcd_clear();
    
                //-----LCD Zeile 1-----
                
                lcd_putsf("HANDBETRIEB");    //... schreibe ""
                delay_ms(1500); 
                //-----LCD Zeile 1-----

                lcd_clear();
                lcd_putsf("durchs Menue mit");   //... schreibe ""

                //-----LCD Zeile 2-----

                lcd_gotoxy(0,1);  //gehe an Position xy
                lcd_putsf("Taster 1");   //... schreibe ""
                delay_ms(1500);

                //-----LCD Zeile 1-----  
                
                lcd_clear();
                lcd_putchar(225); // "ä" auf Display ausgeben
                lcd_putsf("ndern mit ");  //... schreibe ""
                
                //-----LCD Zeile 2-----  
                
                lcd_gotoxy(0,1);//gehe an Position xy
                lcd_putsf("Taster 2");    //... schreibe ""
                delay_ms(1500);
                               
                uiMenuCounter++;
                                       
                break;
    
       case 1:  
                break;

       case 2:  // Stunden erhöhen
       
                //-----LCD Zeile 1-----  
       
                lcd_clear();
                lcd_putsf("Std erh"); //... schreibe ""
                lcd_putchar(239);    //"ö" auf Display ausgeben
                lcd_putsf("hen");   //... schreibe ""

                //-----LCD Zeile 2-----

                lcd_gotoxy(0,1);           //gehe an Position xy
                itoa(uiStunde,strTemp);   // Integer Wert in AScii Zeichen umwandeln 
                if (uiStunde<10)            // Wenn wert für Stunde kleiner 10(einstellig) ...
                {                           
                  lcd_putsf("0");           //... schreibe eine Null davor 
                }                          
                lcd_puts(strTemp);        //String Strunde auf Display ausgeben
                break;


       case 3:  // Stunden verringern
       
                //-----LCD Zeile 1-----  
       
                lcd_clear();
                lcd_putsf("Std verringern");  //... schreibe ""

                //-----LCD Zeile 2-----

                lcd_gotoxy(0,1);           //gehe an Position xy
                itoa(uiStunde,strTemp);   // Integer Wert in AScii Zeichen umwandeln 
                if (uiStunde<10)            // Wenn wert für Stunde kleiner 10(einstellig) ...
                {                           
                  lcd_putsf("0");           //... schreibe eine Null davor 
                }                          
                lcd_puts(strTemp);        //String Stunde auf Display ausgeben
                break;

       case 4:  // Minuten erhöhen 
       
                //-----LCD Zeile 1-----
       
                lcd_clear();
                lcd_putsf("Min  erh");//... schreibe ""
                lcd_putchar(239);   //"ö" auf display ausgeben
                lcd_putsf("hen");           //... schreibe ""

                //-----LCD Zeile 2-----

                lcd_gotoxy(0,1);           //gehe an Position xy
                
                itoa(uiMinute,strTemp);   //Integer Wert in AScii Zeichen umwandeln 
                if (uiMinute<10)            // Wenn wert für Minute kleiner 10(1-Stellig)...
                {
                  lcd_putsf("0");           //... schreibe eine Null davor
                }
                lcd_puts(strTemp);        //String Minute auf Display ausgeben
                break;


       case 5:  // Minuten verringern 
       
                //-----LCD Zeile 1-----
       
                lcd_clear();
                lcd_putsf("Min verringern");           //... schreibe "zeit"

                //-----LCD Zeile 2-----

                lcd_gotoxy(0,1);            //gehe an Position xy
                
                itoa(uiMinute,strTemp);   //Integer Wert in AScii Zeichen umwandeln   
                
                if (uiMinute<10)            // Wenn wert für Minute kleiner 10(1-Stellig)...
                {
                  lcd_putsf("0");           //... schreibe eine Null davor
                }
                lcd_puts(strTemp);        //String Minute auf Display ausgeben
                break;
                
                
                
       case 6: // Intervall für Themperaturmessung erhöhen
       
               //-----LCD Zeile 1-----               
       
               lcd_clear();
               lcd_putsf("Interv. erh");   //schreibe ""
               lcd_putchar(239);           //"ö" auf display schreiben
               lcd_putsf("hen");           //... schreibe ""

                //----LCD Zeile 2-----

                lcd_gotoxy(0,1);              //gehe an Position xy
                
                itoa(uiIntervall,strTemp);   //Integer Wert in AScii Zeichen umwandeln 
                if (uiIntervall<10)            // Wenn wert für Minute kleiner 10(1-Stellig)...
                {
                  lcd_putsf("0");           //... schreibe eine Null davor
                }
                lcd_puts(strTemp);        //String Minute auf Display ausgeben
                break; 
                
       case 7: // Intervall für Themperaturmessung verringern
       
               //-----LCD Zeile 1-----               
       
               lcd_clear();
               
               lcd_putsf("Interv. verring");           //... schreibe ""

                //----LCD Zeile 2-----

                lcd_gotoxy(0,1);             //gehe an Position xy
                
                itoa(uiIntervall,strTemp);   //Integer Wert in AScii Zeichen umwandeln 
                if (uiIntervall<10)            // Wenn wert für Minute kleiner 10(1-Stellig)...
                {
                  lcd_putsf("0");           //... schreibe eine Null davor
                }
                lcd_puts(strTemp);        //String Minute auf Display ausgeben

                break; 
                
                
       case 8:  // Ringspeicher Start
       
                //-----LCD Zeile 1----- 
                
                if(bStartStop==0)
                {
                  lcd_clear();
                  lcd_putsf("Ringsp Start");     //schreibe ""
                  
                  //-----LCD Zeile 2-----
                  
                  lcd_gotoxy(0,1);              //gehe an Position xy
                  lcd_putsf("<Ringsp steht>");  //schreibe ""
                  break;
                }
                else
                { 
                  lcd_clear();
                  lcd_putsf("Ringsp Start");    //schreibe ""
                  
                  //-----LCD Zeile 2-----
                  
                  lcd_gotoxy(0,1);          //gehe an Position xy
                  
                  lcd_putsf("<Ringsp l");  //schreibe ""
                  lcd_putchar(225);  // "ä" auf Display ausgeben
                  lcd_putsf("uft>");        //schreibe ""
                } 
                
                break;
                
       case 9:   //Ringspeicher Stop
                lcd_clear();
                
                if(bStartStop==0)
                {
                  //-----LCD Zeile 1-----
                  
                  lcd_putsf("Ringsp Stop");         //schreibe ""

                  //-----LCD Zeile 2-----
                  
                  lcd_gotoxy(0,1);                 //gehe an Position xy
                  
                  lcd_putsf("<Ringsp steht>");     //schreibe ""
                  break;
                }
                else
                { 
                  //-----LCD Zeile 1-----
                  
                  lcd_putsf("Ringsp Stop");   //schreibe ""  

                  //-----LCD Zeile 2-----
                  
                  lcd_gotoxy(0,1);                 
                
                  lcd_putsf("<Ringsp l"); //schreibe ""
                  lcd_putchar(225);    //"ä" auf Display ausgeben
                  lcd_putsf("uft>");   //schreibe ""
                } 
                break;
                
        
       case 10: //Ringspeicher löschen
       
                //-----LCD Zeile 1-----
       
                lcd_clear();
                lcd_putsf("Ringsp l");         //schreibe ""
                lcd_putchar(239);              // "ö" auf Display ausgeben
                lcd_putsf("schen");            //schreibe ""
                break;
                
       case 11: //Thermostat unteren Grenzwert erhöhen
                
                if (iHystereseMin >= iHystereseMax)
                  { 
                    //-----LCD Zeile 1-----
                    lcd_clear();
                    lcd_putsf("HystereseMin >");  //schreibe ""
  
                    //-----LCD Zeile 2-----
                    
                    lcd_gotoxy(0,1);
                    lcd_putsf("HystereseMax");  //schreibe ""
                    delay_ms(1500);

                    //-----LCD Zeile 1-----
                    
                    lcd_clear();
                    lcd_putsf("Min wurde auf ");   //schreibe ""
                    
                    //-----LCD Zeile 1-----
                    
                    lcd_gotoxy(0,1);
                    lcd_putsf("Max - 2 gesetzt");  //schreibe ""
                    break;
                  }            
                  else
                  {
                //-----LCD Zeile 1-----
       
                lcd_clear();
          
                lcd_putsf("Hysterese Min ++");       //schreibe ""

                //-----LCD Zeile 2-----
              
                lcd_gotoxy(0,1); 
                itoa(iHystereseMin,strTemp);
                lcd_puts(strTemp);
                }
                    
                break;

       case 12: //Thermostat unteren Grenzwert verringern
                if (iHystereseMin >= iHystereseMax)
                {
                  //-----LCD Zeile 1-----
                  
                  lcd_clear();
                  lcd_putsf("HystereseMin >");     //schreibe ""
                  
                  //-----LCD Zeile 2-----
                  
                  lcd_gotoxy(0,1);
                  lcd_putsf("HystereseMax");       //schreibe ""
                  delay_ms(1500);
                  
                  //-----LCD Zeile 1-----
                  
                  lcd_clear();
                  lcd_putsf("Min wurde auf ");       //schreibe ""
                  
                  //-----LCD Zeile 2-----
                  
                  lcd_gotoxy(0,1);
                  lcd_putsf("Max - 2 gesetzt");     //schreibe ""
                  break;
                }             
                else
                {
                //-----LCD Zeile 1-----
       
                lcd_clear();
                lcd_putsf("Hysterese Min --");  //schreibe ""

                //-----LCD Zeile 2-----
              
                lcd_gotoxy(0,1); 
                itoa(iHystereseMin,strTemp);
                lcd_puts(strTemp); 
                
                }  
                break;
                
       case 13: //Thermostat oberen Grenzwert erhöhen
                if (iHystereseMax <= iHystereseMin)
                  {

                    lcd_clear();
                    
                    //-----LCD Zeile 1-----
                   
                    lcd_putsf("HystereseMax <"); //schreibe ""
                    
                    //-----LCD Zeile 2-----
                    
                    lcd_gotoxy(0,1);
                    lcd_putsf("HystereseMin");  //schreibe ""
                    
                    //-----LCD Zeile 1-----
                  
                  lcd_clear();
                  lcd_putsf("Max wurde auf ");  //schreibe ""
                  
                  //-----LCD Zeile 2-----
                  
                  lcd_gotoxy(0,1);
                  lcd_putsf("Min + 2 gesetzt");    //schreibe ""
                  break;
                    
                  }   
                  else
                  {
                //-----LCD Zeile 1-----
       
                lcd_clear();
                lcd_putsf("Hysterese Max ++");  //schreibe ""
                
                //-----LCD Zeile 2-----
              
                lcd_gotoxy(0,1); 
                itoa(iHystereseMax,strTemp);
                lcd_puts(strTemp);
                }
                              
                break;

      case 14: //Thermostat oberen Grenzwert verringern
                if (iHystereseMax <= iHystereseMin)
                {

                  lcd_clear();
                   
                  //-----LCD Zeile 1-----
                   
                  lcd_putsf("HystereseMax <"); //... schreibe ""
                    
                  //-----LCD Zeile 2-----
                    
                  lcd_gotoxy(0,1);
                  lcd_putsf("HystereseMin");    //... schreibe ""
                  
                  //-----LCD Zeile 1-----
                  
                  lcd_clear();
                  lcd_putsf("Max wurde auf ");   //... schreibe ""
                  
                  //-----LCD Zeile 2-----
                  
                  lcd_gotoxy(0,1);
                  lcd_putsf("Min + 2 gesetzt"); //... schreibe ""
                  break;
                }
                
                //-----LCD Zeile 1-----
                else
                {
                lcd_clear();
                //lcd_gotoxy(0,0);
                lcd_putsf("Hysterese Max --");    //... schreibe ""

                //-----LCD Zeile 2-----
              
                lcd_gotoxy(0,1); 
                itoa(iHystereseMax,strTemp);
                lcd_puts(strTemp); 
                }
                
                break;
       case 15:  if(bDS1621Contakt==0)
                 {
                   lcd_clear();
                   
                  //-----LCD Zeile 1-----
                   
                  lcd_putsf("konfig 1621 Outp");    //... schreibe ""
                    
                  //-----LCD Zeile 2-----
                    
                  lcd_gotoxy(0,1); 
                  lcd_putsf("<konfig = ");      //... schreibe ""            
                  itoa(bDS1621Contakt,strTemp);
                  lcd_puts(strTemp);
                  lcd_putsf(">");          //... schreibe ""
                  break;
                 }
                 else
                 {
                   lcd_clear();
                   
                  //-----LCD Zeile 1-----
                   
                  lcd_putsf("konfig 1621 Outp");     //... schreibe ""
                    
                  //-----LCD Zeile 2-----
                    
                  lcd_gotoxy(0,1);
                  lcd_putsf("  <konfig = ");        //... schreibe ""
                  itoa(bDS1621Contakt,strTemp);
                  lcd_puts(strTemp);
                  lcd_putsf(">");     //... schreibe ""             
                                   
                 }        
                break;
      default:   
                 
     }
   }
        
        
   else  //Automatikbetrieb
   {

     switch(uiAutoCounter)
     {
       case 0:  //-----LCD Zeile 1-----
       
                lcd_clear();
                lcd_putsf("AUTOMATIK");     //... schreibe ""
                delay_ms(1500);
                uiAutoCounter++;
                break;
   
       case 1:  //-----LCD Zeile 1-----
     
                lcd_clear();
                lcd_putsf("Zeit ");           //... schreibe "zeit"
                itoa(uiStunde,strTemp);   // Integer Wert in AScii Zeichen umwandeln 
                if (uiStunde<10)            // Wenn wert für Stunde kleiner 10(einstellig) ...
                {                            
                  lcd_putsf("0");           //... schreibe eine Null davor 
                }                          
                lcd_puts(strTemp);        //String Strunde auf Display ausgeben
                lcd_putsf(":");             //Doppelpunkt auf LCDausgeben
                itoa(uiMinute,strTemp);   //Integer Wert in AScii Zeichen umwandeln 
                if (uiMinute<10)            // Wenn wert für Minute kleiner 10(1-Stellig)...
                {
                  lcd_putsf("0");           //... schreibe eine Null davor
                }
                lcd_puts(strTemp);        //String Minute auf Display ausgeben
                lcd_putsf(":");             //Doppelpunkt auf LCDausgeben
                itoa(uiSekunde,strTemp); //Integer Wert in AScii Zeichen umwandeln 
                if (uiSekunde<10)           // Wenn wert für Sekunde  kleiner 10 (1-Stellig) ...
                {
                  lcd_putsf("0");           // schreibe eine Null davor
                }
                lcd_puts(strTemp);       //String Sekunde auf Display ausgeben  


                //------LCD Zeile 2-----
                     
                lcd_gotoxy(0,1); 
                lcd_putsf("Temp ");              //... schreibe ""
                itoa(iTemperature/10, strTemp); // Vorkommastellen
                lcd_puts(strTemp);        
                lcd_putchar('.');
                itoa(iTemperature%10, strTemp);         // Nachkommastellen
                lcd_puts(strTemp); 
                lcd_putchar(223);                              // °Zeichen
                lcd_putchar('C'); 
                
              } //switch ende
              
     delay_ms(200);                                 //ohne Delay flackert Display...  
    }  //else  ende 
  }
und eine Funktion für die Tastenabfrage