Konfigurasi hardware:
1.
keypad 4x3
2. atmega32
3.
LCD 16*2berikut rangkaiannya (proteus)

Untuk programnya digunakan bahasa pemrograman CVAVR, source codenya dapat di download
disini
Penjelasan:
Pada dasarnya membaca input dari keypad adalah dengan melakukan proses "scan" pada setiap kolom. Maksud proses "scan" disini adalah memberikan logika 1 pada semua pin dan hanya pada kolom A saja yang diberikan logika 0

dengan keadaan seperti diatas maka akan dapat diketahui apakah tombol a1, a2, a3 atau a4 yang ditekan. potongan programnya adalah sebagai berikut:
DDRD = 0b00000111;
PORTD = 0b11111110;
delay_us(1);
if (PIND==0b11110110) { lcd_gotoxy (0,0); lcd_putsf ("1"); delay_ms(100);
lcd_gotoxy (0,0);
lcd_putsf(" ");
}
else if (PIND==0b11101110)
{
lcd_gotoxy (0,0); lcd_putsf ("4");
delay_ms(100);
lcd_gotoxy (0,0);
lcd_putsf(" "); }
else if (PIND==0b11011110){ lcd_gotoxy (0,0);
lcd_putsf ("7"); delay_ms(100); lcd_gotoxy (0,0); lcd_putsf(" "); } else if (PIND==0b10111110){
lcd_gotoxy (0,0); lcd_putsf ("*"); delay_ms(100);
lcd_gotoxy (0,0); lcd_putsf(" "); };
kemudian untuk proses scan yang kedua sama seperti proses scan yang pertama hanya saja dilakukan pada kolom B
dengan kondisi seperti diatas maka dapat diketahui apakah tombol b1, b2, b3 atau b4 yang sedang ditekan. Berikut merupakan potongan programnya:
DDRD = 0b00000111;
PORTD = 0b11111101;
delay_us(1);
if (PIND==0b11110101) {
lcd_gotoxy (0,0);
lcd_putsf ("2");
delay_ms(100);
lcd_gotoxy (0,0);
lcd_putsf(" ");
}
else if (PIND==0b11101101){
lcd_gotoxy (0,0);
lcd_putsf ("5");
delay_ms(100);
lcd_gotoxy (0,0);
lcd_putsf(" ");
}
else if (PIND==0b11011101){
lcd_gotoxy (0,0);
lcd_putsf ("8");
delay_ms(100);
lcd_gotoxy (0,0);
lcd_putsf(" ");
}
else if (PIND==0b10111101){
lcd_gotoxy (0,0);
lcd_putsf ("0");
delay_ms(100);
lcd_gotoxy (0,0);
lcd_putsf(" ");
};
kemudian untuk proses scan yang ketiga sama seperti proses scan yang pertama hanya saja dilakukan pada kolom C

dengan kondisi seperti diatas maka dapat diketahui apakah tombol c1, c2, c3 atau c4 yang ditekan. berikut merupakan potongan programnya:
DDRD = 0b00000111; PORTD = 0b11111011; delay_us(1); if (PIND==0b11110011) { lcd_gotoxy (0,0); lcd_putsf ("3"); delay_ms(100); lcd_gotoxy (0,0); lcd_putsf(" "); } else if (PIND==0b11101011){ lcd_gotoxy (0,0); lcd_putsf ("6"); delay_ms(100); lcd_gotoxy (0,0); lcd_putsf(" "); } else if (PIND==0b11011011){ lcd_gotoxy (0,0); lcd_putsf ("9"); delay_ms(100); lcd_gotoxy (0,0); lcd_putsf(" "); } else if (PIND==0b10111011){ lcd_gotoxy (0,0); lcd_putsf ("#"); delay_ms(100); lcd_gotoxy (0,0); lcd_putsf(" "); }; ketiga proses scan tersebut harus dilakukan secara cepat dengan proses looping, semakin cepat proses loopingnya maka semakin cepat pula respon dari keypad.
download:
simulator (proteus) klik
disiniprogram(CVAVR) klik
disiniwasalam