Hallo

Die Taster können auch gegen GND schalten:

Code:
//
//    ATMega644
//    lcd-routines.c, lcd-routines.h
//
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <stdlib.h>
#include "lcd-routines.h"

uint8_t temp;

int main(void)
{
	DDRD = 0x00; // Pins sind Eingang
	PORTD = 0x0f; // mit aktiviertem PullUp, Taster schalten nach GND

	// Initialisierung des LCD
	// Nach der Initialisierung müssen auf dem LCD vorhandene schwarze Balken
	// verschwunden sein
	lcd_init();

	lcd_string("LCD Start !!!");
	_delay_ms(100); //Gibt einem die moeglichckeit zu lesen was auf dem LCD steht

	temp = PIND & 0b00001111; // Status der Tasten einlesen

	while(1)
	{
		if((PIND & 0b00001111) != temp) // Hat sich was geändert?
		{
		   temp = PIND & 0b00001111; // Ja, deshalb neuen Status merken ...
			lcd_clear(); // ... und ausgeben
		   switch(temp)
		   {
				case 0b1110: lcd_string("Das ist Taste 0"); break;
				case 0b1101: lcd_string("Das ist Taste 1"); break;
				case 0b1011: lcd_string("Das ist Taste 2"); break;
				case 0b0111: lcd_string("Das ist Taste 3"); break;
				default:	lcd_string("Taste druecken");
			}
		}
	}
	return(0);
}
(ungetestet)

Gruß

mic