Pada jejak sebelumnya sudah dibuat penerapan keypad 4×4 yang tombolnya ditampilkan dalam LCD 16×2, LCD tersebut tampilannya sesuai dengan tombol keypad 4×4 yang ditekan. Misalkan jika menekan tombol 9 maka pada LCD akan tampil angka 9, jika menekan tombol A maka pada LCD akan tampil huruf A menggantikan angka 9, dan seterusnya.
Pada jejak kali ini dibuat keluaran tambahan berupa LED sebagai indikatornya, sinyal keluaran dari mikrokontroler dapat dioleh untuk menggerakan aktuator atau lampu yang memiliki daya yang besar, tetapi pada jejak ini hanya sebatas menyalakan LED saja sebagai penunjuk bahwa ada sinyal keluaran pada port mikrokontroler tersebut.
Berikut rRangkaian penerapan Keypad 4×4 untuk menyalakan 16 lampu atau indikator berpengendali mikrokontroler Atmega 16:
Pada rangkaian di atas ada sebuah keypad 4×4, LCD 16×2, 16 LED dan mikrokontroler Atmega16. Mengapa ada 16 LED ? Karena keypad 4×4 memiliki 16 tombol, jadi masing-masing tombol dapat digunakan untuk menyalakan masing-masing LED yang menyala bergantian sesuai dengan tombol yang ditekan.
List Program yang sesuai dengan tangkaian di atas seperti di bawah ini :
#include <mega16.h>
#include <delay.h>
#include <alcd.h> // Alphanumeric LCD Module functions
void main(void)
{
DDRA = 0XFF;
PORTA = 0X00;
DDRB = 0XFF;
PORTB = 0X00;
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”);PORTA=0b00000001; PORTB=0b00000000;delay_ms(300);}
if (PIND.5 == 0) {lcd_gotoxy(15,1);lcd_putsf(“8”);PORTA=0b00000010; PORTB=0b00000000;delay_ms(300);}
if (PIND.6 == 0) {lcd_gotoxy(15,1);lcd_putsf(“9”);PORTA=0b00000100; PORTB=0b00000000;delay_ms(300);}
if (PIND.7 == 0) {lcd_gotoxy(15,1);lcd_putsf(“/”);PORTA=0b00001000; PORTB=0b00000000;delay_ms(300);}
delay_ms(30);
PORTD = 0b11111101;
if (PIND.4 == 0) {lcd_gotoxy(15,1);lcd_putsf(“4”);PORTA=0b00010000; PORTB=0b00000000;delay_ms(300);}
if (PIND.5 == 0) {lcd_gotoxy(15,1);lcd_putsf(“5”);PORTA=0b00100000; PORTB=0b00000000;delay_ms(300);}
if (PIND.6 == 0) {lcd_gotoxy(15,1);lcd_putsf(“6”);PORTA=0b01000000; PORTB=0b00000000;delay_ms(300);}
if (PIND.7 == 0) {lcd_gotoxy(15,1);lcd_putsf(“X”);PORTA=0b10000000; PORTB=0b00000000;delay_ms(300);}
delay_ms(30);
PORTD = 0b11111011;
if (PIND.4 == 0) {lcd_gotoxy(15,1);lcd_putsf(“1”);PORTA=0b00000000; PORTB=0b00000001;delay_ms(300);}
if (PIND.5 == 0) {lcd_gotoxy(15,1);lcd_putsf(“2”);PORTA=0b00000000; PORTB=0b00000010;delay_ms(300);}
if (PIND.6 == 0) {lcd_gotoxy(15,1);lcd_putsf(“3”);PORTA=0b00000000; PORTB=0b00000100;delay_ms(300);}
if (PIND.7 == 0) {lcd_gotoxy(15,1);lcd_putsf(“-“);PORTA=0b00000000; PORTB=0b00001000;delay_ms(300);}
delay_ms(30);
PORTD = 0b11110111;
if (PIND.4 == 0) {lcd_gotoxy(15,1);lcd_putsf(” “);PORTA=0b00000000; PORTB=0b00010000;delay_ms(300);}
if (PIND.5 == 0) {lcd_gotoxy(15,1);lcd_putsf(“0”);PORTA=0b00000000; PORTB=0b00100000;delay_ms(300);}
if (PIND.6 == 0) {lcd_gotoxy(15,1);lcd_putsf(“=”);PORTA=0b00000000; PORTB=0b01000000;delay_ms(300);}
if (PIND.7 == 0) {lcd_gotoxy(15,1);lcd_putsf(“+”);PORTA=0b00000000; PORTB=0b10000000;delay_ms(300);}
delay_ms(30);
}
}
Untuk lebih jelasnya dapat dilihat dalam video di bawah ini.