- Mengapa kita membutuhkan Keypad 4x4:
- Cara kerja Papan Tombol Matriks 4x4:
- Material yang dibutuhkan:
- Diagram Sirkuit:
- Penjelasan Pemrograman:
Keypads adalah perangkat input yang banyak digunakan yang digunakan dalam berbagai proyek elektronik dan tertanam. Mereka digunakan untuk mengambil input dalam bentuk angka dan huruf, dan memasukkannya ke dalam sistem untuk diproses lebih lanjut. Dalam tutorial ini kita akan menghubungkan keypad matriks 4x4 dengan PIC16F877A.
Sebelum masuk ke logika detail dan mempelajari cara menggunakan keypad, kita perlu mengetahui beberapa hal.
Mengapa kita membutuhkan Keypad 4x4:
Biasanya kami menggunakan pin I / O tunggal dari unit mikrokontroler untuk membaca sinyal digital, seperti input sakelar. Dalam beberapa aplikasi di mana 9, 12, 16 kunci diperlukan untuk keperluan input, jika kita menambahkan setiap kunci di port mikrokontroler, kita akan menggunakan 16 port I / O. 16 port I / O ini tidak hanya untuk membaca sinyal I / O, tetapi juga dapat digunakan sebagai koneksi periferal, seperti dukungan ADC, koneksi I2C, SPI juga didukung oleh pin I / O tersebut. Karena pin-pin itu terhubung dengan sakelar / kunci, kami tidak dapat menggunakannya tetapi hanya sebagai port I / O. Ini sama sekali tidak masuk akal. Lantas, bagaimana cara mengurangi jumlah pin? Jawabannya adalah, menggunakan keypad hex atau keypad matriks; kami dapat mengurangi jumlah pin, yang mengasosiasikan kunci matriks 4x4. Ini akan menggunakan 8 pin dari mana 4 terhubung dalam baris dan 4 terhubung dalam kolom, oleh karena itu menghemat 8 pin mikrokontroler.
Cara kerja Papan Tombol Matriks 4x4:
Pada gambar atas modul keypad matriks ditampilkan di sebelah kiri. Di sebelah kanan, koneksi internal ditampilkan serta koneksi port. Jika kita lihat portnya ada 8 pin, 4 pertama dari kiri ke kanan adalah X1, X2, X3, dan X4 adalah baris, dan 4 terakhir dari kiri ke kanan adalah Y1, Y2, Y3, Y4 adalah empat kolom. Jika kita membuat 4 baris atau sisi X sebagai keluaran dan membuatnya berlogika rendah atau 0, dan menjadikan 4 kolom sebagai masukan dan membaca kunci kita akan membaca saklar tekan ketika koresponden Y mendapat 0.
Hal yang sama akan terjadi pada matriks nxn dimana n adalah angka. Itu bisa 3x3, 6x6 dll.
Sekarang anggap saja 1 yang ditekan. Kemudian angka 1 terletak pada baris X1 dan kolom Y1. Jika X1 adalah 0, maka Y1 akan menjadi 0. Dengan cara yang sama kita dapat merasakan setiap kunci di baris X1, dengan merasakan kolom Y1, Y2, Y3 dan Y4. Hal ini terjadi untuk setiap sakelar dan kami akan membaca posisi sakelar dalam matriks.
Setiap lingkaran hijau adalah sakelar dan keduanya terhubung bersama dengan cara yang sama.
Dalam tutorial ini kita akan menghubungkan papan kunci dengan spesifikasi berikut-
- Kami akan menggunakan pull up internal
- Kami akan menambahkan opsi de-bounce kunci
Tapi ketika switch tidak ditekan kita perlu membuat Y1, Y2, Y3 dan Y4 sebagai tinggi atau 1. Jika kita tidak bisa mendeteksi perubahan logika saat saklar ditekan. Tetapi kami tidak dapat membuatnya dengan kode atau program karena pin tersebut digunakan sebagai input, bukan output. Jadi, kita akan menggunakan register operasi internal di mikrokontroler dan mengoperasikan pin tersebut sebagai mode yang mengaktifkan pull up lemah. Dengan menggunakan ini, akan ada mode aktifkan logika tinggi ketika dalam keadaan default.
Juga, ketika kita menekan tombol ada lonjakan atau kebisingan yang dihasilkan dengan kontak sakelar, dan karena beberapa tombol tekan terjadi yang tidak diharapkan. Jadi, pertama kita akan mendeteksi sakelar tekan, tunggu beberapa milidetik, periksa lagi apakah sakelar masih ditekan atau tidak dan jika sakelar masih ditekan kami akan menerima sakelar tekan akhirnya jika tidak tidak. Ini disebut sebagai de-bouncing dari sakelar.
Kami akan menerapkan ini semua dalam kode kami, dan membuat koneksi di papan tempat memotong roti.
Juga periksa cara menghubungkan keypad 4x4 dengan Mikrokontroler lain:
- Antarmuka Keypad dengan Arduino Uno
- Antarmuka Keypad Matriks 4x4 dengan Mikrokontroler 8051
- Antarmuka Keypad 4x4 dengan Mikrokontroler ATmega32
- Kunci Kode Digital Raspberry Pi di Breadboard
Material yang dibutuhkan:
- Papan tempat memotong roti
- Pic-kit 3 dan lingkungan pengembangan di PC Anda, yaitu MPLABX
- Kabel dan konektor
- Karakter LCD 16x2
- Kristal 20Mhz
- 2 pcs tutup cakram keramik 33pF.
- Resistor 4.7k
- 10k preset (resistor variabel)
- Papan tombol Matriks 4x4
- Adaptor 5 V.
Diagram Sirkuit:
Kami akan menghubungkan kristal dan resistor di pin terkait. Juga, kami akan menghubungkan LCD dalam mode 4 bit di PORTD. Kami menghubungkan keypad hex atau keypad matriks di port RB4.
Jika Anda baru mengenal PIC, mulailah dengan Memulai dengan Mikrokontroler PIC: Pengantar PIC dan MPLABX
Penjelasan Pemrograman:
Kode lengkap untuk menghubungkan Keypad Matrix dengan Mikrokontroler PIC diberikan di bagian akhir. Kode itu mudah dan cukup jelas. Perpustakaan keypad hanyalah hal yang harus dipahami dalam kode. Di sini kami telah menggunakan keypad.h dan lcd.h Library untuk antarmuka keypad dan LCD 16x2. Jadi mari kita lihat apa yang terjadi di dalamnya.
Di dalam keypad.h kita akan melihat bahwa kita telah menggunakan header xc.h yang merupakan library register default, frekuensi kristal didefinisikan untuk penggunaan penggunaan delay yang digunakan dalam file kepad.c. Kami mendefinisikan port keypad pada register PORTRB dan mendefinisikan pin individu sebagai baris (X) dan kolom (Y).
Kami juga menggunakan dua fungsi, satu untuk inisialisasi keypad yang akan mengarahkan port sebagai output dan input, dan pemindaian tekan sakelar yang akan mengembalikan status tekan sakelar saat dipanggil.
#include
Pada keypad.c kita akan melihat bahwa fungsi di bawah ini akan mengembalikan penekanan tombol ketika fungsi pemindai keypad tidak mengembalikan 'n'.
char switch_press_scan (void) // Dapatkan kunci dari pengguna { char key = 'n'; // Asumsikan tidak ada tombol yang ditekan saat (key == 'n') // Tunggu sampai tombol ditekan key = keypad_scanner (); // Pindai tombol lagi dan lagi return key; // ketika tombol ditekan maka kembalikan nilainya }
Di bawah ini adalah fungsi membaca keypad. Pada setiap langkah kita akan membuat baris X1, X2, X3, dan X4 sebagai 0 dan membaca status Y1, Y2, Y3 dan Y4. Penundaan digunakan untuk efek debounce, saat sakelar masih ditekan kami akan mengembalikan nilai yang terkait dengannya. Jika tidak ada sakelar yang ditekan, kami akan mengembalikan 'n'.
char keypad_scanner (kosong) { X_1 = 0; X_2 = 1; X_3 = 1; X_4 = 1; jika (Y_1 == 0) {__delay_ms (100); sementara (Y_1 == 0); mengembalikan '1'; } jika (Y_2 == 0) {__delay_ms (100); sementara (Y_2 == 0); mengembalikan '2'; } jika (Y_3 == 0) {__delay_ms (100); sementara (Y_3 == 0); mengembalikan '3'; } jika (Y_4 == 0) {__delay_ms (100); sementara (Y_4 == 0); mengembalikan 'A'; } X_1 = 1; X_2 = 0; X_3 = 1; X_4 = 1; jika (Y_1 == 0) {__delay_ms (100); sementara (Y_1 == 0); mengembalikan '4'; } jika (Y_2 == 0) {__delay_ms (100); sementara (Y_2 == 0); mengembalikan '5'; } jika (Y_3 == 0) {__delay_ms (100); sementara (Y_3 == 0); mengembalikan '6'; } jika (Y_4 == 0) {__delay_ms (100); sementara (Y_4 == 0); mengembalikan 'B'; } X_1 = 1; X_2 = 1; X_3 = 0; X_4 = 1; jika (Y_1 == 0) {__delay_ms (100); sementara (Y_1 == 0); mengembalikan '7'; } jika (Y_2 == 0) {__delay_ms (100); sementara (Y_2 == 0); mengembalikan '8'; } jika (Y_3 == 0) {__delay_ms (100); sementara (Y_3 == 0); mengembalikan '9'; } jika (Y_4 == 0) {__delay_ms (100); sementara (Y_4 == 0); mengembalikan 'C'; } X_1 = 1; X_2 = 1; X_3 = 1; X_4 = 0; jika (Y_1 == 0) {__delay_ms (100); sementara (Y_1 == 0); kembali '*'; } jika (Y_2 == 0) {__delay_ms (100); sementara (Y_2 == 0); mengembalikan '0'; } jika (Y_3 == 0) {__delay_ms (100); sementara (Y_3 == 0); mengembalikan '#'; } jika (Y_4 == 0) {__delay_ms (100); sementara (Y_4 == 0); mengembalikan 'D'; } mengembalikan 'n'; }
Kami juga akan mengatur tarikan lemah pada empat bit terakhir, dan juga mengatur arah port sebagai 4 input terakhir dan 4 pertama sebagai output. The OPTION_REG & = 0x7F; digunakan untuk mengatur mode pull up lemah pada pin terakhir.
batal InitKeypad (batal) { Keypad_PORT = 0x00; // Setel nilai pin port Keypad nol Keypad_PORT_Direction = 0xF0; // 4 pin terakhir masukan, 4 pin pertama keluaran OPTION_REG & = 0x7F; }
Dalam program PIC utama (diberikan di bawah) pertama-tama kita mengatur bit konfigurasi dan menyertakan beberapa pustaka yang diperlukan. Kemudian pada fungsi void system_init kita menginisialisasi keypad dan LCD. Dan terakhir di dalam fungsi utama kita telah membaca keypad dengan memanggil fungsi switch_press_scan () dan mengembalikan nilainya ke lcd.
Unduh kode lengkap dengan file header dari sini dan periksa video Demonstrasi di bawah ini.