#include // Declare your global variables here //PROTOTYPEN FÜR LCD FUNKTIONEN #pragma used+ //Unterdrückt Meldung das die Funktion deklariert, aber nicht verwendet wird //Prototypen aller Funktionen für das LCD-Display void asc_out (unsigned char); //Datenausgabe void com_out (unsigned char); //Kommandos void lcd_init (void); //Displayinitialisierung void lcd_curs (unsigned char); //Cursor setzen void lcd_byte (unsigned int); //Zahlenausgabe void lcd_string (unsigned char *ptr); //Textausgabe void lcd_clr (void); //Display löschen void Init (void); unsigned char read_adc(unsigned char); //Funktion für den ADC #pragma used- #define ADC_VREF_TYPE 0x20 // Read the 8 most significant bits // of the AD conversion result //*********************************************************************************** //*********************************************************************************** //**********************************HAUPTPROGRAMM************************************ //*********************************************************************************** //*********************************************************************************** void main(void) { Init(); lcd_init (); lcd_clr(); lcd_byte(1234); lcd_string("Hallo Welt"); lcd_curs(0x20); lcd_byte(5678); lcd_curs(0x40); lcd_byte(9012); lcd_curs(0x60); lcd_byte(3456); asc_out('t'); while (1) { // Place your code here }; } //*********************************************************************************** //*********************************************************************************** //********************************FUNKTIONSDEKLARATIONEN***************************** //*********************************************************************************** //*********************************************************************************** //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 } } //*******************Iniutialisierung aller TIMER Interrupts und I/O Ports**** void Init (void) { // Declare your local variables here //INPUT OUTPUT PORT DEKLARATION // Input/Output Ports initialization // Port A initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0x00; DDRA=0x00; // Port B initialization // Func7=In Func6=In Func5=In Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=T State6=T State5=T State4=0 State3=0 State2=0 State1=0 State0=0 PORTB=0x00; DDRB=0x1F; // Port C initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTC=0x00; DDRC=0xFF; // Port D initialization // Func7=Out Func6=Out Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=0 State6=0 State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0xC0; // ADC Initialisierung // ADC Frequenz: 125,000 kHz // ADC Spannungs Reference: AREF pin // ADC High Speed Mode: Aus // ADC Auto Trigger Source: Keine // Nur die 8 // Only the 8 most significant bits of // the AD conversion result are used ADMUX=ADC_VREF_TYPE; ADCSRA=0x86; SFIOR&=0xEF; } //****************ADC Funktion********************** unsigned char read_adc(unsigned char adc_input) { ADMUX=adc_input|ADC_VREF_TYPE; // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCH; }