Anda di halaman 1dari 17

LCD DAN KEYPAD

13APR
>>>KEYPAD<<< Pada dasarnya keypad yang ada dipasaran baik yang berukuran keypad 33, 34 atau 44, 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 44.

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 44 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 44 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

Langkah pertama (Scanning kolom 1 PB0) 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 216<<< 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 216 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. 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 216. contoh: lcd_gotoxy(10,1) maka akan meletakkan kursor di kolom 10 dan baris 1

lcd_putsf(char flash *str) 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>

// Alphanumeric LCD Module functions #asm .equ __lcd_port=015 ;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() }; }

KeypadKeypad adalah rangkaian tombol yang berfungsi untuk memberi sinyal pada suatu rangkaiandengan menghubungkan jalur-jalur tertentu. Keypad terdiri dari beberapa macam berdasarkan jumlah tombol dan fungsinya. Pada sistem pengontrolan ini, digunakan keypad matriks 4 x 4 (16saklar).Gambar 2.10. Skematik Keypad 4 x 4Keypad Matriks : Konsep Dasar Pada tutorial ini akan saya paparkan konsep dasar mengakses dan menggunakan Keypad Matriks4x4 sebagai media inputan tetapi sebelumnya, anda sebaiknya membaca terlebih dahulu tutorialhardware mengenai Keypad Matriks agar mudah dipahami programnya karena memprogrammikrokontroler berdasarkan dengan hardwarenya.Program berikut menggunakan mikrokontroler ATmega8535 dengan bahasa pemrogramanCodeVisionAVR (baca Memulai CoViAVR) akan tetapi jika telah memahami konsepnya, mikroapapun dengan bahasa pemrograman yang lain pun tidak akan mengalami kesulitan.Keypad Matriks dan konfigurasi keypad sebagai berikut :* Kolom 1 pada PORTA.0* Kolom 2 pada PORTA.1

Kurniadi.R083310040 * Kolom 3 pada PORTA.2* Kolom 4 pada PORTA.3* Baris 1 pada PORTA.4* Baris 2 pada PORTA.5* Baris 3 pada PORTA.6* Baris 4 pada PORTA.7Prinsip dasar pada program :* Jika tombol 2 di tekan (S2) maka Kolom 2 Baris 1 terhubung atau PORTA.1 terhubungdengan PORTA.4, Jika tombol B di tekan (SB) maka Kolom 4 Baris 2 terhubung atau PORTA.3terhubung dengan PORTA.5, dst.* Pin-pin KOLOM pada port tersebut dijadikan output dan pin-pin BARIS pada port tersebutdijadikan input, bisa juga sebaliknya terserah anda sebagai programmer, yang jelas salah satuoutput dan yang lain input.* Setiap saklar atau penekanan tombol, harus didefinisikan nilai dari tombol tersebut baik berupa nilai Desimal, Heksadesimal, maupun karakter ASCII.* Saat saklar (tombol keypad) ditekan dan BARIS dengan KOLOM terhubung maka terserahanda mendetaksi perubahan logika yang terjadi pada pin-pin INPUT. Apakah dari LOW keHIGH (0 - 1) atau HIGH ke LOW (1 - 0). PadaPada Coding program untuk Keypad Matriks yang saya buat menggunakan nilai ASCII dan saattombol ditekan mendeteksi perubahan logika dari HIGH ke LOW (1 - 0) atau rendah aktif.Alasan :* Nilai ASCII adalah nilai karakter seperti '1', '2', 'A', 'D', dst, yang pada listing program akanmudah dilihat nilainya dan mudah pahami, berbeda dengan desimal maupun heksadesimal. '1' =0x31 (heksa), '1' = 49 (desimal), 'A' = 0x41 (heksa), 'A' = 65 (desimal), dst. Kurniadi.R083310040 * Pada penekanan tombol, mengapa mendeteksi HIGH ke LOW daripada LOW ke HIGH ?karena untuk mikrokotroler maupun rangkaian digital secara umum "menurunkan" tegangan berapapun ke 0 volt lebih mudah dan pasti dibandingkan "menaikkan" tegangan dari 0 volt kenilai tertentu.Efek Bounching (Pantulan)Listing pada gambar belum termasuk menangani tentang bounching dan lainlain. Bounching pada keypad yaitu efek perubahan sinyal berkali-kali (pantulan) saat penekanan keypad yangmenyebabkan keypad seolah-olah tombol keypad ditekan berkali-kali.Ada berbagai macam cara untuk mencegah menghilangkan efek bouncing ini baik dari segihardware dan software.* Jika hardware maka dengan menambahkan filter frekuensi tinggi atau dengan IC555 untuk menambah lebar pulsa.* Jika Software dengan menambah delay atau tundaan saat tombol ditekan atau denganmendeteksi karakter tombol apakah sama dengan sebelumnya

Mengenal dot matrix 7x5 Dot matrix adalah titik titik yang membentuk sebuah matrix dimana titik titik tersebut adalah led, Jadi untuk membentuk sebuah dot matrix 7x5 dibutuhkan 35 buah led. Inilah bentuk fisik dari dot matrix disebut sebelumnya.

Dot matrix biasanya digunakan untu membuat running teks atau untuk membuat counter atau pencacah pada bangjo atau traffic light. Biasanya dot matrix yang digunakan untuk membuat alat2 tersebut digunakan lebih dari satu dot matrix. berikut merupakan scematic dari susunan led-nya

Untuk menyalakan dot matrix ini dengan cara menyalakan satu per satu pada setiap kolomnya atau lebih keren disebut dengan metode scanning. Supaya karakter yang ditampilkan pada dot matrix dapat terlihat utuh maka proses scanning ini harus berlangsung dengan sangat cepat.

Aplikasi

Dalam aplikasi ini hanya menggunakan satu buah dot matrix saja (maklum baru belajar). Rangkaiannya seperti dibawah ini.

Kemudian program buat ATMega8 sebagai ini dibawah berikut.

$regfile = "m8def.dat" $crystal = 8000000

Config Portc = Output Config Portd = Output

dress Alias Portc Data_ Alias Portd

Dim Lima As Byte Dim Tujuh As Byte Dim N_lima As Byte Dim N_tujuh As Byte Dim A As Byte Dim B As Byte Dim C As Byte Dim D As Byte Dim E As Byte Dim F As Byte

Dim G As Byte Dim Digit As Byte

N_lima = 0 N_tujuh = 0

Do

C = 33 For E = 0 To 33

For B = 0 To 4

For A = 0 To 4

Lima = Lookup(a , Alamat) Adress = Lima

D=A+C Tujuh = Lookup(d , Wahyu) Data_ = Tujuh Waitms 1

Next

Waitms 1

Next Decr C

Next

Loop

Alamat: Data &B111101 Data &B111011 Data &B110111 Data &B101111 Data &B011111

Wahyu: 'u Data &B00000000 Data &B00000000

Data &B00000000 Data &B00000000 Data &B01111110 Data &B00000001 Data &B00000001 Data &B00000001 Data &B01111110 Data &B00000000 'y Data &B01110000 Data &B00001000 Data &B00001111 Data &B00001000 Data &B01110000 Data &B00000000 'h Data &B01111111 Data &B00001000 Data &B00001000 Data &B00001000 Data &B01111111 Data &B00000000 'a Data &B00111111 Data &B01001000 Data &B01001000

Data &B01001000 Data &B00111111 Data &B00000000 'w Data &B01111110 Data &B00000001 Data &B01111111 Data &B00000001 Data &B01111110 Data &B00000000 Data &B00000000 Data &B00000000 Data &B00000000

Program tersebut akan membuat dot matrix menampilkan "nama saya" sekali kali nebeng, secara geser ke kiri. Dalam program tersebut proses scanning terjadi pada potongan program

For A = 0 To 4

Lima = Lookup(a , Alamat) Adress = Lima

D=A+C Tujuh = Lookup(d , Wahyu) Data_ = Tujuh Waitms 1

Next

Pada potogan program tersebut terdapat rumus D = A + C, rumus ini digunakan untuk menggeser karakter yang ditampilkan oleh dot matrix sebanyak satu kali kearah kiri. pada potongan program tersebut proses scanning hanya untuk 5 kolom saja, jika proses ini hanya diulangi sekali saja maka karakter yang ditampilkan tidak akan terlihat karena terlalu cepat, oleh karena itu proses ini juga diulang ulang sebanyak 5 kali supaya tampilan dapat dilihat dengan jelas, sehingga program menjadi

For B = 0 To 4

For A = 0 To 4

Lima = Lookup(a , Alamat) Adress = Lima

D=A+C Tujuh = Lookup(d , Wahyu) Data_ = Tujuh Waitms 1

Next Waitms 1

Next

kemudian ditambah lagi dengan satu looping for....next yang digunakan untuk menggeser karakter yaitu.

C = 33 For E = 0 To 33 . . . . . Decr C Next

nilai awal variabel c digunakan untuk menentukan jumlah perulangannya. trust me it work ,semoga bermanfaat.

Anda mungkin juga menyukai