Anda di halaman 1dari 4

Fungsi Akses Keypad untuk Microcontroller AVR dengan bahasa C (CodeVisionAVR)

(oleh Iwan Setiawan) setiaone.iwan@gmail.com http://iwan.blog.undip.ac.id Salah satu jenis perangkat antar muka yang umum dijumpai pada sistem embedded (atau sistem microcontroller) adalah Keypad matrik ! atau "! . #alaupun penggunaannya sangat intensi$e% tetapi kenyataannya sangat jarang perangkat lunak pengembang yang menyediakan &ungsi standar untuk pengaksesan keypad tersebut (sejauh pengetahuan penulis). #alaupun nampaknya sepele% tetapi &ungsi pengaksesan keypad ini justru menjadi &aktor kunci kenyamanan pengguna sistem embedded yang kita rancang. 'alam tulisan singkat ini% penulis ingin berbagi pengalaman dan pengetahuan pada anda para programmer microcontroller% mahasiswa atau embedded system de$eloper dengan menyajikan " (tiga) buah &ungsi pengaksesan keypad matrik yang menurut penulis sangat (clean)% terstruktur dan menghasilkan kode mesin yang minimal. *ungsi pengaksesan keypad ini% bukanlah murni hasil coding dari penulis tetapi hasil dari modi&ikasi &ungsi pengaksesan keypad yang penulis peroleh dari sumber internet luar negeri berdasarkan hasil (perburuan) yang cukup melelahkan (sayang penulis lupa alamat url+nya% karena perburuan dilakukan sekitar tahun ,--.+an). *ungsi pengaksesan keypad disusun oleh penulis dengan bahasa / (compiler: /ode0ision102) untuk microcontroller 102. 3ika anda menggunakan microcontroller% compiler dan jenis keypad yang berbeda dengan yang penulis gunakan% maka &ungsinya tinggal anda modi&ikasi sedikit. Interkoneksi keypad dan microcontroller juga dapat disesuaikan secara mudah. 4ayout% interkoneksi serta kode &ungsi dapat anda lihat di halaman berikutnya.

Semoga bermanfaat

*ungsi 1kses Keypad untuk 5icrocontroller 102 dengan bahasa / (/ode0ision102)

Iwan setiawan% http://iwan.blog.undip.ac.id

Gambar /ontoh layout Keypad ! dan Interkoneksi pada 5icrocontroller Kode: deklarasi dan ungsi pengaksesan keypad //simpan kode 1S/II tombol keypad pd memori &lash
const char K6781946: ;: ; < ==>?>%> >%>@>%>A>B%=>,>%>C>%>D>%>->B%=>">%>.>%>E>%>F>B%=>1>%>9>%>/>%>'>BBG /Akoneksikan keypad pada salah satu port% misal disini keypad dikoneksikan dg port 1 jika dikoneksikan dg port lain% sesuaikan K67H'I2% K67HII dan K67HJK8 Lnya% untuk bouncing anda nanti dapat sesuikan dg karakteristik keypad andaA/ Fde&ine K67H'I2 ''21 Fde&ine K67HII MII1 Fde&ine K67HJK8 MJ281 Fde&ine 9JKI/IIN ?// deklarasi+deklarasi &ungsi yang terkait dengan pengaksesan keypad !oid initkeypad()G char kbhit()G char getkeypad()G //'e&inisi &ungsi /A++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ $oid initkeypad()G &ungsi inisialisasi keypad (harus dipanggil sebelum &ungsi keypad yang lain +cukup ?!) MJ28 -+" output MII +@ input dengan resistor pull up enabled ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++A/ $oid initkeypad() = K67H'I2<-!-*G //nible bawah output% nible atas input dg. Mull up enable

*ungsi 1kses Keypad untuk 5icrocontroller 102 dengan bahasa / (/ode0ision102)

Iwan setiawan% http://iwan.blog.undip.ac.id


K67HJK8<-!*-G B /A++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ char kbhit()G &ungsi deteksi penekanan keypad: jika salah satu tombol ditekan maka &ungsi ini akan mengembalikan kode 1S/II tombol tersebut (lihat K6781946)% jika tidak ditekan maka &ungsi akan mengembalikan karakter Iull (-) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++A/ char kbhit() = unsigned char row% col% rowH$al% outputG unsigned char delaytimeG output<-G &or(col<-GcolO GcolPP) = K67HJK8<Q(?OOcol)G //pull down satu kolom &or(delaytime<-!?-G delaytime R -G delaytime++) G //tunggu bentar aja rowH$al<Q((K67HIIS-b????----)RR )G ///baca Mort + @ +Rgeser ke 4S9 +R balik logika &or(row<-GrowO GrowPP) = i&(rowH$al S (?OOrow)) = output<K6781946:row;:col;G return outputG B B B return outputG B /A++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ char getkeypad ()G &ungsi menunggu penekanan tombol keypad: jika salah satu tombol ditekan maka &ungsi ini akan mengembalikan kode 1S/II tombol tersebut (lihat &ungsi kbhit()) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++A/ char getkeypad() = unsigned char debcountG // debounce counter static unsigned char neykey<-G static unsigned char oldkey<do= newkey < kbhit()G // dapatkan karakter tombol keypad saat ini Bwhile(newkey << oldkey)G //jika masih sama dengan sebelumnya looping terus &or(debcount<-G debcount O 9JKI/IING debcountPP) = newkey < kbhit()G

"

*ungsi 1kses Keypad untuk 5icrocontroller 102 dengan bahasa / (/ode0ision102)

Iwan setiawan% http://iwan.blog.undip.ac.id


i&(newkey << - TT newkey U< oldkey) = debcount<-G // clear+kan debounce counter B oldkey < newkeyG // simpan untuk scanning selanjutnya B return(newkey)G B

"umber bacaan Internet url luar negeri: http://www.penulis.lupa.alamatnya.com