#include #include //Delay funktion #define F_CPU 4000000 /* Clock in HZ */ #include #define DATEN 1 #define BEFEHL 0 /**************************************************************** Enable Routine - Enable Pin Toggeln ****************************************************************/ void toggle_e(void) { PORTB |= (1<<6); // Enable auf "1" _delay_us(5); PORTB &= ~((1 << 6)); //Enable auf 0 _delay_us(100); } /**************************************************************** Funktion übergibt Daten ans Display ****************************************************************/ void lcd_write(unsigned char data_type, unsigned char data_byte) { int byte = data_byte, data_bits; data_bits = 0x00; // RW (Bit 5) == "0" (RW -> 1==Read mode, 0==Write mode) if(data_type == DATEN) data_bits |= 0x10; // == RS auf 1 setzen (RS -> 0==BEFEHL, 1==DATEN) else data_bits|=0x0; // == RS auf 0 setzen (RS -> 0==BEFEHL, 1==DATEN) //senden des higher NIbbles PORTB = (data_bits|((byte>>4)&0x0F)); toggle_e(); //Enable toggeln (datenübernahme) //senden des lower nibbles PORTB = (data_bits|(byte&0x0F)); toggle_e(); //Enable toggeln (datenübernahme) } /**************************************************************** Funktion übergibt zeichenweise die Daten an die Übertragungsfunktion ****************************************************************/ void uebertragen(char z1[20], char z2[20], char z3[20], char z4[20]) { int i; for(i=0;i<=19;i++) { lcd_write(DATEN,z1[i]); //übergabe eines Zeichens _delay_us(50);//wartet ca. 50 us } for(i=0;i<=19;i++) { lcd_write(DATEN,z3[i]); //übergabe eines Zeichens _delay_us(50); } for(i=0;i<=19;i++) { lcd_write(DATEN,z2[i]); //übergabe eines Zeichens _delay_us(50); } for(i=0;i<=19;i++) { lcd_write(DATEN,z4[i]); //übergabe eines Zeichens _delay_us(50); } } /**************************************************************** Initialisierung des LCD´s ****************************************************************/ void init(void) { PORTB &= ~((1< return home _delay_ms(5); lcd_write(BEFEHL,0x0F);//0x0F --> Display on _delay_ms(5); } /**************************************************************** Hauptprogramm ****************************************************************/ int main(void) { char init_1[20] = {"._.!LCD-VERSUCH!_._."}; char init_2[20] = {"11111111111111111111"}; char init_3[20] = {"22222222222222222222"}; char init_4[20] = {"33333333333333333333"}; //Festlegen der Datenrichtung /* PIN0 = Daten 1 PIN4 = RS (1 = Daten / 0 = Befehl) PIN1 = Daten 2 PIN5 = R/W (1 = Read / 0 = Write) PIN2 = Daten 3 PIN6 = E PIN3 = Daten 4 PIN7 = unbenötigt */ DDRB |= (1<