Pada dasarnya keypad yang ada dipasaran baik yang berukuran keypad 3×3, 3×4 atau 4×4, hanya tersusun dari beberapa push button yang dikonfigurasikan antara kolom dengan baris. Sehingga sering disebut juga keypad matriks nxm (n=kolom m=baris). Kolom dan baris ini nantinya yang digunakan untuk pendeteksian penekanan tombol. Berikut adalah konfigurasi dasar untuk keypad 4×4.
B1, B2, B3 dan B4 merupakan baris ke 1 sampai baris ke 4, sedangkan C1, C2, C3 dan C4 merupakan kolom ke 1 sampai kolom ke 4 keypad. Terlihat jelas betapa sederhananya rangkaian dasar keypad untuk ukuran keypad 4×4 yang terdiri dari 16 buah push button yang dikonfigurasikan seperti matriks. Saya sendiri membuat keypad menggunakan rangkaian diatas, dikarenakan mahalnya harga keypad. Dipasaran saja keypad 4×4 bisa seharga Rp. 50.000, sedangkan untuk membuatnya tidak sampai Rp. 10.000.
Baiklah kembali lagi kemateri keypad. Sekarang saya punya pertanyaan? Kenapa kita tidak menggunakan push button saja yang disusun seperti biasa, kenapa harus menggunakan keypad matrik. Jawabannya mudah saja, kalo menggunakan susunan seperti biasa maka akan menghabiskan 16 pin mikrokontroler untuk 16 buah tombol. Sedangkan jika dikonfigurasikan seperti diatas hanya menghabiskan 8 pin saja. Jadi lebih ringkas dan irit dalam penggunaan pin mikrokontroler.
Sekarang cara untuk mengakses keypad, tapi terlebih dahulu perhatikan gambar berikut.
Sebelumnya kita harus menentukan terlebih dahulu mana yang akan dijadikan input atau output mikrokontroler. Sebagian banyak orang membuat kolom keypad sebagai output mikrokontroler sedangkan baris keypad sebagai input mikrokontroler. Sebenarnya bisa saja kita balik penggunaannya, tetapi agar standar kita ikut saja yang sudah banyak digunakan orang. Cara kerja keypad adalah scanning yaitu mendeteksi terus menerus apakah ada penekanan tombol. Berikut adalah algoritma cara mengakses keypad:
Tentukan terlebih dahulu kolom sebagai output dari mikrokontroler sedangkan baris sebagai input kemikrokontroler. Mengacu pada gambar diatas
keluarkan output ke kolom 1(PB0)
kemudian deteksi penekanan baris1 (PB4)
kemudian deteksi penekanan baris2 (PB5)
kemudian deteksi penekanan baris3 (PB6)
kemudian deteksi penekanan baris4 (PB7)
Langkah kedua (Scanning kolom 2 PB1)
keluarkan output ke kolom 2 (PB1)
kemudian deteksi penekanan baris1 (PB4)
kemudian deteksi penekanan baris2 (PB5)
kemudian deteksi penekanan baris3 (PB6)
kemudian deteksi penekanan baris4 (PB7)
Langkah ketiga (Scanning kolom 3 PB2)
keluarkan output ke kolom 3 (PB2)
kemudian deteksi penekanan baris1 (PB4)
kemudian deteksi penekanan baris2 (PB5)
kemudian deteksi penekanan baris3 (PB6)
kemudian deteksi penekanan baris4 (PB7)
Langkah kempat (Scanning kolom 4 PB3)
keluarkan output ke kolom 4 (PB3)
kemudian deteksi penekanan baris1 (PB4)
kemudian deteksi penekanan baris2 (PB5)
kemudian deteksi penekanan baris3 (PB6)
kemudian deteksi penekanan baris4 (PB7)
Untuk realisasi programnya dapat dilihat pada listing program di akhir postingan ini.
>>>LCD 2×16<<<
Disini saya tidak akan menjelaskan tentang hardware dari LCD, tetapi akan fokus kepada instruksi-intruksi yang akan digunakan dalam mengakses LCD. Jika teman-teman ingin paham lebih dalam lagi mengenai hardware dan pengalamatan memory LCD, teman-teman dapat mendownload datasheet LCD 2×16 disini. Dibawah ini ada beberapa instruksi yang digunakan untuk mengakses LCD pada compiler CodeVision AVR:
lcd_clear()
digunakan untuk menghapus LCD dan meletakkan kembali kursor ke kolom 0 baris 0.
digunakan untuk menghapus LCD dan meletakkan kembali kursor ke kolom 0 baris 0.
lcd_gotoxy(unsigned char x,unsigner char y)
Untuk meletakkan kursor ke kolom x baris y. Kolom dan baris pada LCD dimulai dari 0, sehingga kolom antara 0-15 dan baris 0-1 untuk LCD 2×16.
contoh:
lcd_gotoxy(10,1) maka akan meletakkan kursor di kolom 10 dan baris 1
Untuk meletakkan kursor ke kolom x baris y. Kolom dan baris pada LCD dimulai dari 0, sehingga kolom antara 0-15 dan baris 0-1 untuk LCD 2×16.
contoh:
lcd_gotoxy(10,1) maka akan meletakkan kursor di kolom 10 dan baris 1
menampilkan karakter karakter yang ada dimemori flash pada alamat yang ditunjuk oleh pointer str ke LCD dengan posisi kursor saat ini.
contoh:
lcd_putsf(“Electro_cOntrOl”) maka akan menampilkan tulisan Electro-cOntrOl
lcd_puts(char *str)
menampilkan karakter yang ada si memori RAM pada alamat yang ditunjuk oleh pointer str ke LCD dengan posisi kursor saat ini.
lcd_putchar(char c)
digunakan untuk menampilkan karakter sesuai isi variabel c ke LCD dengan posisi kursor saat ini.
Untuk lebih jelasnya dapat teman-teman lihat pada listing program. Berikut adalah schematic keypad dan LCD yang dihubungkan ke mikrokontroler.
#include <mega8535.h>
#include <stdlib.h>
#include <delay.h>
#include <lcd.h>
#include <stdlib.h>
#include <delay.h>
#include <lcd.h>
#asm
.equ __lcd_port=0×15 ;PORTC
#endasm
void tekan_keypad_tampil_lcd() //penekanan keypad kemudian ditampilkan di LCD
{
PORTB = 0b11111110;
delay_ms(30);
if (PINB.4 == 0) {lcd_putsf(“1″); delay_ms(300);}
if (PINB.5 == 0) {lcd_putsf(“4″); delay_ms(300);}
if (PINB.6 == 0) {lcd_putsf(“7″); delay_ms(300);}
if (PINB.7 == 0) {lcd_putsf(“F”); delay_ms(300);}
PORTB = 0b11111101;
delay_ms(30);
if (PINB.4 == 0) {lcd_putsf(“2″); delay_ms(300);}
if (PINB.5 == 0) {lcd_putsf(“5″); delay_ms(300);}
if (PINB.6 == 0) {lcd_putsf(“8″); delay_ms(300);}
if (PINB.7 == 0) {lcd_putsf(“0″); delay_ms(300);}
PORTB = 0b11111011;
delay_ms(30);
if (PINB.4 == 0) {lcd_putsf(“3″); delay_ms(300);}
if (PINB.5 == 0) {lcd_putsf(“6″); delay_ms(300);}
if (PINB.6 == 0) {lcd_putsf(“9″); delay_ms(300);}
if (PINB.7 == 0) {lcd_putsf(“E”); delay_ms(300);}
PORTB = 0b11110111;
delay_ms(30);
if (PINB.4 == 0) {lcd_putsf(“A”); delay_ms(300);}
if (PINB.5 == 0) {lcd_putsf(“B”); delay_ms(300);}
if (PINB.6 == 0) {lcd_putsf(“C”); delay_ms(300);}
if (PINB.7 == 0) {lcd_putsf(“D”); delay_ms(300);}
}
void tampil_string()
{
lcd_gotoxy(0,0); //menempatkan kursor lcd pada baris 0 kolom 0
lcd_putsf(“tampilan lcd2x16″); //menampilkan tulisan tampilan lcd2x16
lcd_gotoxy(0,1); //menempatkan kursor lcd pada baris 1 kolom 0
lcd_putsf(“Elektro-cOntrOl”); //menampilkan tulisan ElektrO-cOntrOl
}
void tampil_variabel()
{
//sebuah variabel yg akan ditampilkan kedalam LCD harus diubah dahulu kedalam tipe data array
//jika variabel bertipe data float maka diubah kedalan array dengan instruksi ftoa
//jika variabel bertipe data int maka diubah kedalan array dengan instruksi itoa
char temp[6];
int a=500;
float b=123.45;
itoa(a,temp);
lcd_gotoxy(0,0);
lcd_puts(temp);
ftoa(b,2,temp); //angka 2, banyaknya digit dibelakang koma yg ditampilkan
lcd_gotoxy(0,1);
lcd_puts(temp);
}
void main(void)
{
PORTB = 0xff;
DDRB = 0x0f;//PA0-3 sebagai output, PA4-7 sebagai input
while(1) //program utama
{
//tinggal dilakukan pemanggilan fungsi saja, contoh:
tampil_string(); //pemanggilan fungsi tampil_string()
};
}
mas tanya:
BalasHapusseandainya pengen menampilkan angka lebih dari 6 digit pada LCD bagaimana caranya???berdasarakan input,,misal pada penjumlahan atau pengurangan..
terima kasih
kk mohon bantuan,
BalasHapuslisting program set jam lewat keypad, menggunkan ic ds1307 untuk jam nya (bahasa c)
trims (yudi_themaster@yahoo.com)
thanks mas
BalasHapus