//FUNKTIONSDEKLARATIONEN FÜR LCD-ANZEIGE void com_out (unsigned char comdaten) { unsigned int i; PORTD.6=0; //Kommandoübergabe RS PORTD.7=1; //Bei fallender Flanke werden Daten am PortC ausgegeben PORTC=comdaten; //Übergabe der Daten an PORTC for (i=0;i<=5;i++); //Entprellen PORTD.7=0; //bei fallender Flanke wird Kommando ausgeführt for (i=0;i<=500;i++); //Entprellen } void asc_out (unsigned char daten) { unsigned int i; PORTD.6=1; //Datenübergabe eingestellt PORTD.7=1; //Bei fallender Flanke werden Daten am PortC ausgegeben PORTC=daten; //Übergabe der Daten an PORTC for (i=0;i<=50;i++); //Entprellen PORTD.7=0; //bei fallender Flanke wird Ausgabe auf Display durchgeführt for (i=0;i<=5000;i++); //Entprellen } void lcd_init (void) { com_out(0x34); //Function-Set 8-Bit / extended Function Register=1 com_out(0x09); //4 Zeilen com_out(0x30); //Function-Set 8-Bit / extended Function Register=0 com_out(0x0E); //Display On, Cursor On, Cursor blinken aus com_out(0x01); //Display löschen, Cursor 1. Zeile 1. Stelle com_out(0x06); //Cursor Auto Increment } //***********************Display löschen Funktion*************************************** void lcd_clr (void) { com_out (0x01); //Display löschen } //************************Cursor setzen************************************************+ void lcd_curs (unsigned char pos) { if(pos<=0x27) com_out(0x80+pos); //Ausgabe in 1.Zeile if(pos>=0x28 && pos<=0x4F) com_out(0xA8+pos-0x28); //Ausgabe in 2.Zeile if(pos>0x50 && pos<=0x77) com_out(0xD0+pos-0x50); //Ausgabe in 3.Zeile if(pos>=0x78 && pos<=0x9F) com_out(0xF8+pos-0x78); //Ausgabe in 4.Zeile } //*************************Funktion zur Zahlenausgabe******************************* void lcd_byte (unsigned int wert) { asc_out(wert/1000+0x30); //Tausender Ausgabe asc_out(wert/100%10+0x30); //Hunderter Ausgabe asc_out(wert%100/10+0x30); //Zehner Ausgabe asc_out(wert%10+0x30); //Einer Ausgabe } //***************************Textausgabe Funktion************************************ void lcd_string (unsigned char *ptr) { while(*ptr != '\0') //Schleife wird ausgeführt, so lange Endekennung nicht erreicht { asc_out(*ptr); //Ausgabe des Wertes des Zeigers ptr++; //erhöhen des Zeigers --> zeigt auf höhere Adresse } }