Das scheint mir nicht richtig:
DDRA = 0b00000000; //Port A Pin 1,2,3 als Ausgang , Pin4-8 als Eingang
PINA = 0x00; //Port A auf low setzen
du setzt das komplette port auf Input und beim setzen solltest du "PORTA" sagen (PIN ist immer input)
Beim Lesen und Auswerten von Pina darfst du nur die input-Bits abfragen.
Wenn der Kommentar-Text deine Absicht darstellt, empfehle ich dir:
Code:
void kp_init (void)         // Initialisierung des Keypads 
   { 
    DDRA = 0b00001111;    //Port A Pin 1,2,3 als Ausgang , Pin4-8 als Eingang 
   PORTA = 0x00;              //Port A auf low setzen 
   } 
    
char kp_taste (void)         //Routine zur Abfrage der Tasten 
{ 
char bTmp;
   do {
       bTmp = PINA >> 4;    // Tasten code in das untere Nibble
       switch (bTmp)
       {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
        case 6:
        case 7:
        case 8:
        case 9:
               return(bTmp | 0x30);  // 0x0n --->  0x3n --> ascii: 'n'
               break;
        case 10:           return '0'; break;
        case 11:           return 'z'; break;
        case 12:          return 'e'; break;
        case 13:           return 'a'; break;
        case 14:           return 'b'; break;
        case 15:           return 'c'; break;
       default: break;
   }  while (1);
   return'X';    // das ist nur, falls der Compiler meutert.
}
kp- taste läuft ewig, bis irgendein "case" return durchführt.
von 1-0 reicht eine einfache Umsetzung auf ascii