#include #define F_CPU 8000000 #include // Process() setzt PD3(ENABELPIN) auf 1 dann auf 0. Mit fallender Flanke werden die Zustände an PD7...PD4 verarbeitet. void Process(void) { PORTD = PORTD | (1<<3); //Setzt ENABELPIN _delay_us(1); PORTD = PORTD & ~(1<<3); //Löscht ENABELPIN _delay_us(4100); } // Überträgt 2 * 4-Bit Zeichen zum LCD-RAM (COMMAND) void Send_Command(uint8_t zeichen) { PORTD = PORTD & 0x0F; //Löscht PD7...PD4 //Speichert 4-Bit des Zeichens PORTD =PORTD | (zeichen & 0xF0); //Setzt PD7...PD4 ,je nach Zeichencode Process(); PORTD = PORTD & 0x0F; //Löscht PD7...PD4 PORTD = PORTD | (zeichen << 4); //Setzt die zweiten 4-Bit des Zeichens, an PD7...PD4 Process(); } // Überträgt 2 * 4-Bit Zeichen zum LCD-RAM (DATA) void Send_Data(uint8_t zeichen2) { PORTD = PORTD | (1<<2); //RS-Bit wird gesetzt Send_Command(zeichen2); PORTD = PORTD & ~(1<<2); //RS_Bit wird gelöscht } void LCD_Init(void) { _delay_ms(50); DDRD = 0xFC; // 1111 1100 Ausgang(PD7...PD4, E , RS) PORTD = 0x30; // 0011 0000 Process(); Process(); Process(); PORTD = 0x20; Process(); Send_Command(0x28); Send_Command(0x01); Send_Command(0x0C); } int main(void) { LCD_Init(); Send_Data('A'); //Zeichen 'A' auf Display ausgeben while(1) { } }