Keypad merupakan salah satu masukan dari sistem pengendali, masukan bentuk keypad memberikan kode biner pada pengendali yang bisa dioleh menjadi bentuk keluaran display atau gerakan aktuator.
Pada jejak kali ini menggunakan keypad 4×4 dengan pengendali mikrokontroler Atmega16 untuk menghasilkan keluaran yang sesauai dengan karakter pada keypad dalam hal ini, yaitu karakter 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, *, dan # atau karakter 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /, X , -, , =, dan +.
Bentuk fiik keypad 4×4 seperti gambar di bawah ini.
Skema keypad 4×4 seperti gambar di bawah ini.
Pada skema keypad 4×4 di atas bisa kita buat bilangan biner yang digunakan sebagai kode untuk masukan pada mikrokontroler sesuai urutan R1R2R3R4C1C2C3C4 sebagai berikut:
1 : 10001000
2 : 10000100
3 : 10000010
A : 10000001
4 : 01001000
5 : 01000100
6 : 01000010
B : 01000001
7 : 00101000
8 : 00100100
9 : 00100010
C : 00100001
* : 00011000
0 : 00010100
# : 00010010
D : 00010001
Kode masukan biner di atas menjadi kode untuk membedakan perintah pada program mikrokontroler.
Rangkaian lengkap yang dibuat berbasis mikrokontroler Atmega16 seperti pada gambar di bawah ini,

Rangkaian di atas menggunakan LCD 2×16 sebagai keluarannya yang dapat menampilkan karakter yang sesuai dengan karakter yang ditekan pada keypad 4×4. Masukan Keypad terhubung ke pin PD.0 s.d. PD.3, sedangkan untuk keluran keypad terhubung ke pin PD.4 s.d. PD.7.
List Program menggunakan keypad 4×4 pada Mikrokontroler Atmega 16:
#include <mega16.h>
#include <delay.h>
#include <alcd.h> // Alphanumeric LCD Module functions
void main(void)
{
DDRC = 0XFF;
PORTC = 0X00;
DDRD = 0x0F;//PD0-3 sebagai output, PD4-7 sebagai input
lcd_init(16); // Characters/line: 16
while(1) //program utama
{
PORTD = 0b11111110;
if (PIND.4 == 0) {lcd_gotoxy(15,1);lcd_putsf(“7”);delay_ms(300);}
if (PIND.5 == 0) {lcd_gotoxy(15,1);lcd_putsf(“8”);delay_ms(300);}
if (PIND.6 == 0) {lcd_gotoxy(15,1);lcd_putsf(“9”);delay_ms(300);}
if (PIND.7 == 0) {lcd_gotoxy(15,1);lcd_putsf(“/”);delay_ms(300);}
delay_ms(30);
PORTD = 0b11111101;
if (PIND.4 == 0) {lcd_gotoxy(15,1);lcd_putsf(“4”);delay_ms(300);}
if (PIND.5 == 0) {lcd_gotoxy(15,1);lcd_putsf(“5”);delay_ms(300);}
if (PIND.6 == 0) {lcd_gotoxy(15,1);lcd_putsf(“6”);delay_ms(300);}
if (PIND.7 == 0) {lcd_gotoxy(15,1);lcd_putsf(“X”);delay_ms(300);}
delay_ms(30);
PORTD = 0b11111011;
if (PIND.4 == 0) {lcd_gotoxy(15,1);lcd_putsf(“1”);delay_ms(300);}
if (PIND.5 == 0) {lcd_gotoxy(15,1);lcd_putsf(“2”);delay_ms(300);}
if (PIND.6 == 0) {lcd_gotoxy(15,1);lcd_putsf(“3”);delay_ms(300);}
if (PIND.7 == 0) {lcd_gotoxy(15,1);lcd_putsf(“-“);delay_ms(300);}
delay_ms(30);
PORTD = 0b11110111;
if (PIND.4 == 0) {lcd_gotoxy(15,1);lcd_putsf(” “);delay_ms(300);}
if (PIND.5 == 0) {lcd_gotoxy(15,1);lcd_putsf(“0”);delay_ms(300);}
if (PIND.6 == 0) {lcd_gotoxy(15,1);lcd_putsf(“=”);delay_ms(300);}
if (PIND.7 == 0) {lcd_gotoxy(15,1);lcd_putsf(“+”);delay_ms(300);}
delay_ms(30);
}
}
Untuk lebih jelasnya dapat dilihat dalam video simulasi di bawah ini.