PENULISAN KARAKTER DENGAN MENGGUNAKAN TEKNIK PENULISAN PADA KEYPAD HANDPHONE OLEH MODUL DST-51, KEYPAD 4X3 DAN M1632 LCD Keypad 4x3 adalah merupakan keypad dengan konfigurasi 4 baris dan 3 kolom dan terdiri dari 12 tombol. Penggunaan 12 tombol pada proses input data numeric tentunya dapat dilakukan dengan mudah, namun pada proses input data alphabet dan karakter-karakter tanda bacanya, maka diperlukan sebuah teknik yang biasa digunakan pada keypad handphone. Pada teknik ini, setiap tombol tidak hanya mewakili satu alphabet atau tanda baca saja, melainkan untuk beberapa alphabet atau tanda baca sekaligus. Untuk membedakan alphabet atau tanda baca yang diinginkan dilakukan dengan mendeteksi jumlah penekanan tombol dalam satu waktu tertentu. A
Penekanan 1
B
Penekanan 2
C
Penekanan 3
2
Penekanan 4
2
Gambar 1 Contoh penekanan tombol 2
Tombol-tombol numeric juga dapat dilakukan dengan menekan dan menahan tombol tersebut agak lama sehingga untuk memberikan angka 2 tidak harus dilakukan dengan menekan tombol 2 sebanyak 4 kali. Untuk penerapan teknik tersebut dalam Modul DST-51 dilakukan dengan proses yang tampak pada diagram alir di gambar 2. Diagram alir ini menggambarkan proses yang terjadi pada subroutine program listing 2, program ambil_keypad. Dalam proses ini terdapat timer yang bekerja untuk mendeteksi time out selama tombol ditekan dan time out selama tombol dilepas. Timer mulai menghitung pada saat terjadi penekanan tombol dan berhenti saat program keluar dari subroutine. Time out pada bagian pertama (time out karena tombol tidak ditekan) mengakibatkan program keluar dari subroutine ini dengan variable nilai berisi data hasil konversi table sesuai jumlah penekanan tombol. Sedangkan pada time out bagian kedua (time out karena tombol ditekan terus) mengakibatkan program akan keluar dari subroutine dengan variable nilai berisi data numeric yang terletak pada bagian akhir data pada setiap tombol (lihat table 1). Pada teknik penulisan keypad handphone, setelah terjadi penekanan tombol dan karakter tampil pada LCD maka karakter berikutnya hanya dapat diinputkan dengan penekanan tombol sesudah waktu tertentu yaitu saat cursor mulai blinking, kecuali tombol tersebut berbeda dengan tombol sebelumnya. Apabila tombol tersebut berbeda penekanan tersebut tidak perlu menunggu waktu tertentu. Contoh, pada saat penulisan kata ‘AAA’, tombol 2 ditekan untuk pertama kali dan layar LCD akan menampilkan karakter “A”, karakter “A” yang kedua hanya dapat dituliskan setelah waktu tertentu DELTA ELECTRONIC www.delta-electronic.com
yaitu saat cursor di LCD mulai blinking. Namun pada penulisan kata ‘ADA’ di mana huruf pertama, kedua dan ketiga dituliskan dengan tombol yang berlainan, maka proses penekanan tidak perlu menunggu waktu tertentu. Untuk itu pada sistem ini, program dapat memeriksa perbedaan antara penekanan tombol saat ini dengan sebelumnya dengan membandingkan nilai dari input keypad dan nilai pada variable keypad buffer. Apabila kedua nilai tersebut tidak sama, maka program akan langsung keluar dari subroutine dengan variable nilai berisi data keypad yang lama, namun bila kedua nilai tersebut sama, maka program kembali melakukan konversi table dengan mengambil data kedua dari tombol yang ditekan. Total Tekan = 0 Reset Timer Keypad Timer 0 16 bit counter
Keypad ditekan?
Time Out?
Ya Total Tekan = 0?
KeypadBuffer = Keypad?
Ya Keypad Buffer <= Keypad Ya Konversi Tabel Keypad
Total Tekan = 0
Akhir Data tombol? Ya Total Tekan + 1 Tampilkan buffer ke LCD Delay Bouncing Reset Timer Keypad Start Timer Keypad Nilai<=Hasil Konversi Tabel
Keypad dilepas?
Tidak
Time Out?
Ya Ambil data terakhir tombol Nilai = Hasil Konversi Tabel
Stop Timer Keluar dari subroutine
Gambar 2
DELTA ELECTRONIC www.delta-electronic.com
Diagram Alir Subroutine Ambil Keypad
Penekanan tombol yang sama yang dilakukan berulang-ulang hingga data terakhir dari tombol (00h) akan mengakibatkan karakter kembali ke bentuk pertama, yaitu misalkan “A” untuk tombol 2. Hal ini dilakukan dengan mereset nilai variable Total Tekan.
Reset LCD CharCounter=0 Ya Akses Keypad
Tampilkan di LCD
Char Counter = Char Counter + 1
Char Counter = 16?
Char Counter = 32?
Ya LCD Pindah baris 2
Gambar 2 Diagram Alir Program Utama
Gambar 2 menunjukkan diagram alir dari program utama yaitu program yang menggunakan subroutine ambil_keypad. LCD M1632 adalah LCD dengan susunan 16 karakter dan 2 baris oleh karena itu program harus memindah tampilan LCD ke baris 2 saat karakter ke 16 ditampilkan dan LCD akan pindah layar saat karakter ke 32. Untuk mengetahui jumlah karakter yang ditampilkan dilakukan dengan menggunakan variable character counter yang selalu bertambah setiap kali adanya penampilan karakter pada LCD.
DELTA ELECTRONIC www.delta-electronic.com
Tabel 1. Tabel Kode Tombol dg alamat awal table di 2200h Alamat Tombol
Tekan 1x Tekan 2x Tekan 3x Tekan 4x Tekan 5x Tekan 6x Tekan 7x Tekan 8x Tekan 9x Tekan 10x
2200h
0
Spasi
0
00h
220Ah
1
Titik
Koma
?
!
-
2214h
2
A
B
C
2
00h
221Eh
3
D
E
F
3
00h
2228h
4
G
H
I
4
00h
2232h
5
J
K
L
5
00h
223Ch
6
M
N
O
6
00h
2246h
7
P
Q
R
S
7
2250h
8
T
U
V
8
00h
225Ah
9
W
X
Y
Z
9
226Eh
#
#
00h
2278h
*
*
00h
DELTA ELECTRONIC www.delta-electronic.com
&
00h 00h
1
00h
Tabel 1 menunjukkan table data yang berisi kode-kode untuk setiap tombol keypad dengan konfigurasi tertentu. Kode 00h adalah merupakan tanda akhir dari datadata setiap tombol. Pada table di atas setiap data-data setiap tombol disimpan di lokasi memori dengan jarak 10 byte (0Ah). Dengan jarak sebesar 10 byte lokasi memori untuk tiap data-data tombol, maka tampak beberapa lokasi kosong yang tampak di table 1 sebagai kotak-kotak ber arsir. Lokasi-lokasi tersebut dapat digunakan untuk menambah kode-kode lain pada setiap tombol, contohnya kode “{“ ingin ditambahkan di tombol 2 urutan keempat, maka data konfigurasi di baris Alamat 2214h harus diganti menjadi ‘A B C { 2 00h’. Listing 1 KonversiTabel: Movc A,@A+DPTR Mov B,#10 Mul AB Push DPH Push DPL Mov DPTR,#TabelKodeTombol Mov B,TotalTekan Add A,B Movc A,@A+DPTR Pop DPL Pop DPH Ret
Listing 1 adalah subroutine proses konversi dari data yang diperoleh dari keypad ke kode dari tombol. Karena setiap tombol dipisahkan dengan lokasi sebesar 10 byte, maka data dari keypad tersebut dikali dengan 10. Sedangkan untuk mengambil data sesuai dengan jumlah penekanan, maka selanjutnya data yang telah dikali 10 tadi dijumlahkan dengan variable total tekan yang berisi jumlah penekanan yang telah terjadi. Listing 2 Subroutine Ambil_Keypad DSEG TimeOutKeypad: Ds TotalTekan: Ds Nilai: Ds 1 KeypadBuffer: Ds CSEG Keypad EQU 90H
1 1
Org $ Ambil_Keypad: Mov Keypad,#0FFH Acall RSTTimeKeypad Mov A,TMOD Anl A,#0F0H Orl A,#01H Mov TMOD,A Clr TR0 ResetTotalTekan: Mov TotalTekan,#0
DELTA ELECTRONIC www.delta-electronic.com
;Jumlah penekanan keypad
1
; ;Reset Timer Keypad ;Timer 0 mode 16 bit counter ; ; ;
;Total penekanan = 0
Tunggu_Ditekan: Mov A,Keypad ; Cjne A,#0FFH,KeypadDitekan Jnb TF0,Tunggu_Ditekan Clr TF0 Inc TimeOutKeypad Mov R7,TimeOutKeypad Cjne R7,#010,Tunggu_Ditekan Clr TR0 Ret KeypadDitekan: Jb P,Tunggu_Ditekan Mov Cjne Ajmp TidakSkip: Mov Clr Subb Jnz Mov skip: Mov Acall Jz Inc Mov Lcall Mov Lcall Mov Lcall Mov Lcall Lcall
R7,TotalTekan R7,#0,TidakSkip Skip
;
;Periksa apakah baris dan kolom ;telah terhubung ;
B,KeypadBuffer C A,B GantiTombol A,Keypad Keypadbuffer,Keypad KonversiTabel ResetTotalTekan TotalTekan Nilai,A Kirim_Karakter A,#04H Kirim_Perintah A,#' ' Kirim_Karakter A,#06H Kirim_Perintah DelayBouncing3
;Akhir data tombol?
Acall RSTTimeKeypad TungguLepas: Mov A,Keypad Setb TR0 Cjne A,#0FFH,PeriksaTimer Setb TR0 Ajmp Tunggu_Ditekan PeriksaTimer: Jnb TF0,TungguLepas Clr TF0 Inc TimeOutKeypad Mov R7,TimeOutKeypad Cjne R7,#010,TungguLepas Mov DPTR,#TabelKeypad CariAkhirDataTombol: Mov A,Keypad DELTA ELECTRONIC www.delta-electronic.com
;Cari akhir data tombol
Acall Inc Jnz Dec Dec Mov Acall Mov Lcall Mov Lcall Mov Lcall Mov Lcall BelumLepas: Mov Cjne
KonversiTabel TotalTekan ; CariAkhirDataTombol TotalTekan ; TotalTekan ; A,KeypadBuffer KonversiTabel Nilai,A Kirim_Karakter A,#04H Kirim_Perintah A,#' ' Kirim_Karakter A,#06H Kirim_Perintah
;
;Ambil data terakhir tombol ; ;Simpan di Nilai
A,Keypad A,#0FFH,BelumLepas
GantiTombol: Clr TR0 Ret
;Stop Timer
KonversiTabel: Movc A,@A+DPTR Mov B,#10 Mul AB Push DPH Push DPL Mov DPTR,#TabelKodeTombol Mov B,TotalTekan Add A,B Movc A,@A+DPTR Pop DPL Pop DPH Ret Reset: Mov Ajmp
;
TotalTekan,#00 Tunggu_Ditekan
DelayBouncing3: Push B Mov B,#01 Loop2DelayBounce: Acall DelayBouncing2 Djnz B,Loop2DelayBounce Pop B Ret DelayBouncing2: Push B Mov B,#0FFH Loop1Delaybounce: Acall DelayBouncing1 Djnz B,Loop1Delaybounce Pop B DELTA ELECTRONIC www.delta-electronic.com
Ret DelayBouncing1: Push B Mov B,#0FFH Djnz B,$ Pop B Ret RSTTimeKeypad: Mov TH0,#00H Mov TL0,#00H Mov TimeOutKeypad,#00 Ret Listing 3 Program Utama $MOD51 ;********* ; PROGRAM PENULISAN KARAKTER DENGAN MENGGUNAKAN TEKNIK PENULISAN PADA KEYPAD ; HANDPHONE OLEH MODUL DST-51, KEYPAD 4X3 & M1632 LCD DSEG CharCounter:
Ds
1
Org 50H CSEG Delay_500mS EQU 0099H ;Menunda waktu selama 500 mS (timer 0 digunakan)
KirimPesan_LCD EQU 160DH ;Mengirim data di alamat yang ditunjuk oleh DPTR ke LCD hingga data 0F ;- DPTR diisi dengan alamat awal data yang dikirim ;- Akhir data adalah 0FH Init_LCD ;Inisialisasi LCD
EQU
1619H
Kirim_Perintah EQU 1658H ;Mengirim data ke register perintah LCD ;- Data diisi di akumulator Kirim_Karakter EQU 1677H ;Mengirim data ke register data LCD ;- Data diisi di akumulator Baris2 EQU ;Memindah posisi cursor ke baris 2 ROM
EQU Org Ajmp Org
ROM Start ROM+3H
DELTA ELECTRONIC www.delta-electronic.com
1681H
2000H ;Reset Vector ; ;External Interrupt 0 Vector
Reti Org Reti Org Reti Org Reti Org Reti
; ROM+0BH
;Timer 0 Interrupt Vector ;
ROM+13H
;External Interrupt 1 Vector ;
ROM+1BH
;Timer 1 Interrupt Vector ;
ROM+23H
;Serial Interrupt Vector ;
Start: Lcall Init_LCD Mov CharCounter,#00
;Inisial LCD ;
Mov DPTR,#TabelKeypad Lcall Ambil_keypad Mov A,Nilai
Loop:
Lcall Inc Mov Cjne Lcall Ajmp
Kirim_Karakter CharCounter R7,CharCounter R7,#16,Cek32 Baris2 Loop
;Akses Keypad ; ;Hasil dari penekanan keypad ;tersimpan di variabel nilai ;Kirim hasil ke LCD ;Char Counter + 1 ; ;Char Counter = 16, pindah ;ke baris 2 LCD ;
Cjne Ajmp
R7,#32,Loop Start
;Char Counter = 32, kembali ;ke baris 1
Cek32:
$include (keypad2.asm) TabelKodeTombol: DB ' 0',0 Org TabelKodeTombol+10 DB '.,?!-&1',0 Org TabelKodeTombol+20 DB 'ABC2',0 Org TabelKodeTombol+30 DB 'DEF3',0 Org TabelKodeTombol+40 DB 'GHI4',0 Org TabelKodeTombol+50 DB 'JKL5',0 Org TabelKodeTombol+60 DB 'MNO6',0 Org TabelKodeTombol+70 DB 'PQRS7',0 Org TabelKodeTombol+80 DB 'TUV8',0 Org TabelKodeTombol+90 DB 'WXYZ9',0 Org TabelKodeTombol+110 DB '#',0 Org TabelKodeTombol+120 DB '*',0 CSEG Org ROM+0F00H DELTA ELECTRONIC www.delta-electronic.com
Kpd1 EQU Kpd2 EQU Kpd3 EQU Kpd4 EQU Kpd5 EQU Kpd6 EQU Kpd7 EQU Kpd8 EQU Kpd9 EQU Kpdstar Kpd0 EQU Kpdpgr
0B7H 0D7H 0E7H 0BBH 0DBH 0EBH 0BDH 0DDH 0EDH EQU 0DEH EQU
0BEH 0EEH
TabelKeypad: Org TabelKeypad+Kpd1 DB 1 Org TabelKeypad+Kpd4 DB 4 Org TabelKeypad+Kpd7 DB 7 Org TabelKeypad+Kpdstar DB 0BH Org TabelKeypad+Kpd2 DB 2 Org TabelKeypad+Kpd5 DB 5 Org TabelKeypad+Kpd8 DB 8 Org TabelKeypad+Kpd0 DB 0 Org DB Org DB Org DB Org DB
TabelKeypad+Kpd3 3 TabelKeypad+Kpd6 6 TabelKeypad+Kpd9 9 TabelKeypad+Kpdpgr 0CH
END
DELTA ELECTRONIC www.delta-electronic.com
DELTA ELECTRONIC www.delta-electronic.com