#include // fuer Atmel AT89C5131 #include #include unsigned char AnalogWert; // AnalogWert als 8-Bit-Variable xdata unsigned char buf[17]; //Buffer für die LCD Anzeige float UIn0Wert; // für Skalierung des AnalogWerts auf 0-20v unsigned short a=0, m; // Merker Auswahl und Analogwert unsigned int u=10000,x,y,z; // Zeitverzögerung const float LSB=0.0784313; // 20v:255 schritte Auswahl() //Auswahl zwischen manueller Eingabe und 3 gespeicherten Werten { if(P3_2 == 0) { a=1; //Auswahlmerker printlcd(" ",1); printlcd(" ",2); return(a); } if(P3_4 == 0) { a=2; printlcd(" ",1); printlcd(" ",2); return(a); } } manuelle_eingabe() // Hier soll man den Ausgangswert zwischen 0-20V selbst einstellen können { while(a=1) // Sobald Merker a=1 { if(P3_2 == 0) // Wert erhöhen { m=m+1; for (x=u; x!=0; x--) // Zeitschleife damit die Einstellung genau möglich ist AnalogWert= m; aout(AnalogWert); UIn0Wert= AnalogWert * LSB; sprintf(buf, "Wert= %1.0f Volt ", UIn0Wert); printlcd(buf, 1); printlcd(" ",2); } if(P3_3 == 0) //Wert senken { m=m-1; for (x=u; x!=0; x--) // Zeitschleife AnalogWert= m; aout(AnalogWert); UIn0Wert= AnalogWert * LSB; sprintf(buf, "Wert= %1.0f Volt ", UIn0Wert); printlcd(buf, 1); printlcd(" ",2); } if(P3_5 == 0) { a=0; m=0; return(a); } } } werte() //Bei diesem Menü soll man durch die Tastenwahl einfach 3 Werte direkt ausgeben können { while(a=2) { // printlcd(" 10v 15v 20v ",1); // printlcd(" P32 P33 P34 ",2); if(P3_2 == 0) { m = 10; AnalogWert = m; aout(AnalogWert); UIn0Wert = AnalogWert * LSB; sprintf(buf, "Wert= %1.0f Volt ", UIn0Wert); printlcd(buf, 1); printlcd(" ",2); } if(P3_3 == 0) { m = 15; AnalogWert= m; aout(AnalogWert); UIn0Wert= AnalogWert * LSB; sprintf(buf, "Wert= %1.0f Volt ", UIn0Wert); printlcd(buf, 1); printlcd(" ",2); } if(P3_4 == 0) { m = 20; AnalogWert= m; aout(AnalogWert); UIn0Wert= AnalogWert * LSB; sprintf(buf, "Wert= %1.0f Volt ", UIn0Wert); printlcd(buf, 1); printlcd(" ",2); } if(P3_5 == 0) { a=0; m=0; return(a); } } } // Hauptprogramm void main (void) { while (1) { initlcd(); //Initialisierung LCD-Display testlcd(); // Anzeige testen und löschen printlcd("manuel gesp.Wert",1); //Auswahltext printlcd(" P3_2 P3_4 ",2); { int auswahl = Auswahl(); switch (auswahl) { case 1: manuelle_eingabe(); return; case 2: werte(); return; } } return; } }