Kamis, 09 Desember 2010

Aplikasi keypad pada ATMEGA16 dengan CVAVR

Konfigurasi hardware:
1. keypad 4x3
2. atmega32
3. LCD 16*2

berikut 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 disini
program(CVAVR) klik disini

wasalam

3 komentar: