ok danke, es geht jetzt.

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(2000); //Gibt einem die moeglichckeit zu lesen was auf dem LCD steht
    
    lcd_clear();
    lcd_home();
    lcd_string("Taste druecken");


    temp = PIND & ((1<<PD3) | (1<<PD2) | (1<<PD1) | (1<<PD0)) ; // Status der Tasten einlesen

    while(1)
    {
        if((PIND & ((1<<PD3) | (1<<PD2) | (1<<PD1) | (1<<PD0))) != temp) // Hat sich was geändert?
        {
            temp = PIND & ((1<<PD3) | (1<<PD2) | (1<<PD1) | (1<<PD0)); // Ja, deshalb neuen Status merken ...
            lcd_clear(); // ... und ausgeben
            lcd_home();
            switch(~temp & 0x0f) // Achtung! temp wird mit ~ invertiert!
            {
                case (1<<PD0): lcd_string("Das ist Taste 0"); break;
                case (1<<PD1): lcd_string("Das ist Taste 1"); break;
                case (1<<PD2): lcd_string("Das ist Taste 2"); break;
                case (1<<PD3): lcd_string("Das ist Taste 3"); break;
                default:lcd_string("Taste druecken");
            }
        }
    }
    return(0);
}
Nun möchte ich aus einem Taster einen Schalter Programmiren, ich habe keine Ahnung, wie ich das anstelle.
Ja meine Taster schalten nach GND, ich benutze das STK500.