- Mengapa kita memerlukan Pad Kekunci 4x4:
- Cara Keypad Matriks 4x4 berfungsi:
- Bahan yang Diperlukan:
- Rajah Litar:
- Penjelasan Pengaturcaraan:
Pad kekunci adalah alat input yang banyak digunakan yang digunakan dalam pelbagai projek elektronik dan terbenam. 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 pad kekunci matriks 4x4 dengan PIC16F877A.
Sebelum masuk ke logik perincian dan belajar menggunakan pad kekunci, kita perlu mengetahui beberapa perkara.
Mengapa kita memerlukan Pad Kekunci 4x4:
Biasanya kita menggunakan pin I / O tunggal unit mikrokontroler untuk membaca isyarat digital, seperti input suis. Dalam beberapa aplikasi di mana 9, 12, 16 kunci diperlukan untuk tujuan input, jika kita menambahkan setiap kunci dalam port mikrokontroler, kita akan akhirnya menggunakan 16 port I / O. Port 16 I / O ini bukan hanya untuk membaca isyarat I / O, tetapi ia juga boleh digunakan sebagai sambungan periferal, seperti sokongan ADC, sambungan I2C, SPI juga disokong oleh pin I / O tersebut. Oleh kerana pin tersebut dihubungkan dengan suis / kekunci, kami tidak dapat menggunakannya tetapi hanya sebagai port I / O. Ini sama sekali tidak masuk akal. Jadi, bagaimana mengurangkan bilangan pin? Jawapannya ialah, menggunakan pad kekunci heks atau pad matriks; kita dapat mengurangkan bilangan pin, yang mengaitkan kunci matriks 4x4. Ia akan menggunakan 8 pin di mana 4 dihubungkan dalam baris dan 4 dihubungkan dalam lajur, oleh itu menjimatkan 8 pin mikrokontroler.
Cara Keypad Matriks 4x4 berfungsi:
Pada gambar atas, modul papan kekunci matriks ditunjukkan di sebelah kiri. Di sebelah kanan sambungan dalaman ditunjukkan dan juga sambungan port. Sekiranya kita melihat port terdapat 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 lajur. Sekiranya kita menjadikan 4 baris atau sisi X sebagai output dan menjadikannya logik rendah atau 0, dan menjadikan 4 lajur sebagai input dan membaca kekunci, kita akan membaca tekan suis apabila koresponden Y mendapat 0.
Perkara yang sama akan berlaku dalam matriks nxn di mana n adalah nombor. Itu boleh 3x3, 6x6 dll.
Sekarang hanya berfikir bahawa 1 ditekan. Kemudian 1 terletak di baris X1 dan lajur Y1. Sekiranya X1 adalah 0, maka Y1 akan menjadi 0. Dengan cara yang sama kita dapat merasakan setiap kunci dalam baris X1, dengan mengesan lajur Y1, Y2, Y3 dan Y4. Perkara ini berlaku untuk setiap suis dan kita akan membaca kedudukan suis dalam matriks.
Setiap lingkaran hijau adalah suis dan mereka berdua dihubungkan bersama dengan cara yang sama.
Dalam tutorial ini kita akan memaparkan papan kekunci dengan spesifikasi berikut-
- Kami akan menggunakan pull up dalaman
- Kami akan menambah pilihan utama penyahtinjaan
Tetapi apabila suis tidak ditekan kita perlu membuat Y1, Y2, Y3 dan Y4 sebagai tinggi atau 1. Jika tidak, kita tidak boleh mengesan perubahan logik apabila suis ditekan. Tetapi kami tidak dapat membuatnya dengan kod atau program kerana pin tersebut digunakan sebagai input, bukan output. Oleh itu, kami akan menggunakan daftar operasi dalaman di mikrokontroler dan mengoperasikan pin tersebut sebagai mod penarik lemah. Dengan menggunakan ini, akan ada mod logik tinggi ketika berada dalam keadaan lalai.
Juga, ketika kita menekan kekunci, ada lonjakan atau bunyi yang dihasilkan dengan kenalan suis, dan disebabkan oleh ini banyak tekan tekan berlaku yang tidak diharapkan. Oleh itu, pertama-tama kita akan mengesan tekan suis, tunggu beberapa milisaat, sekali lagi periksa sama ada suis masih ditekan atau tidak dan jika suis masih ditekan, kita akan menerima tekan suis akhirnya jika tidak. Ini dipanggil sebagai penghentian suis.
Kami akan melaksanakan semua ini dalam kod kami, dan membuat sambungan di papan roti.
Periksa juga bagaimana untuk menghubungkan pad kekunci 4x4 dengan Pengawal Mikro lain:
- Pad kekunci Berinteraksi dengan Arduino Uno
- 4x4 Matrix Keypad Interfacing dengan 8051 Microcontroller
- Padanan Kekunci 4x4 dengan Mikrokontroler ATmega32
- Kunci Kod Digital Raspberry Pi di Breadboard
Bahan yang Diperlukan:
- Papan roti
- Pic-kit 3 dan persekitaran pembangunan di PC anda, iaitu MPLABX
- Wayar dan penyambung
- LCD watak 16x2
- Kristal 20Mhz
- 2 pcs topi cakera seramik 33pF.
- Perintang 4.7k
- Pratetap 10k (perintang berubah)
- Pad kekunci 4x4 Matrix
- Penyesuai 5 V
Rajah Litar:
Kami akan menghubungkan kristal dan perintang pada pin yang berkaitan. Kami juga akan menyambungkan LCD dalam mod 4 bit di seluruh PORTD. Kami menyambungkan papan kekunci hex atau pad matriks di port RB4.
Sekiranya anda baru menggunakan PIC, mulailah dengan Bermula dengan PIC Microcontroller: Pengenalan kepada PIC dan MPLABX
Penjelasan Pengaturcaraan:
Kod lengkap untuk menghubungkan Matrix Keypad dengan PIC Microcontroller diberikan pada akhir. Kod mudah dan jelas. Perpustakaan papan kekunci adalah perkara yang perlu difahami dalam kod. Di sini kita telah menggunakan keypad.h dan lcd.h Perpustakaan untuk antara muka pad kekunci dan 16x2 LCD. Oleh itu, mari kita lihat apa yang berlaku di dalamnya.
Di dalam papan kekunci.h kita akan melihat bahawa kita telah menggunakan header xc.h yang merupakan perpustakaan daftar lalai, frekuensi kristal ditentukan untuk penggunaan untuk penundaan yang digunakan dalam file kepad.c. Kami menentukan port keypad pada daftar PORTRB dan menentukan pin individu sebagai baris (X) dan lajur (Y).
Kami juga menggunakan dua fungsi satu untuk inisial keypad yang akan mengalihkan port sebagai output dan input, dan scan tekan suis yang akan mengembalikan status tekan tekan ketika dipanggil.
#sertakan
Di papan kekunci.c kita akan melihat bahawa fungsi di bawah akan mengembalikan penekanan kekunci apabila fungsi pengimbas papan kekunci tidak mengembalikan 'n'.
char switch_press_scan (void) // Dapatkan kunci dari pengguna { char key = 'n'; // Anggap tidak ada kekunci ditekan semasa (kunci == 'n') // Tunggu sehingga kekunci ditekan kekunci = keypad_scanner (); // Imbas kekunci sekali lagi dan kembali kunci; // apabila kekunci ditekan kemudian kembalikan nilainya }
Berikut adalah fungsi membaca papan kekunci. Pada setiap langkah kita akan menjadikan baris X1, X2, X3, dan X4 sebagai 0 dan membaca status Y1, Y2, Y3 dan Y4. Kelewatan digunakan untuk kesan debounce, apabila suis masih ditekan, kami akan mengembalikan nilai yang berkaitan dengannya. Apabila tiada suis ditekan, kami akan mengembalikan 'n'.
char keypad_scanner (tidak sah) { X_1 = 0; X_2 = 1; X_3 = 1; X_4 = 1; jika (Y_1 == 0) {__delay_ms (100); sementara (Y_1 == 0); kembalikan '1'; } jika (Y_2 == 0) {__delay_ms (100); sementara (Y_2 == 0); kembalikan '2'; } jika (Y_3 == 0) {__delay_ms (100); sementara (Y_3 == 0); kembalikan '3'; } jika (Y_4 == 0) {__delay_ms (100); sementara (Y_4 == 0); kembalikan 'A'; } X_1 = 1; X_2 = 0; X_3 = 1; X_4 = 1; jika (Y_1 == 0) {__delay_ms (100); sementara (Y_1 == 0); kembalikan '4'; } jika (Y_2 == 0) {__delay_ms (100); sementara (Y_2 == 0); kembalikan '5'; } jika (Y_3 == 0) {__delay_ms (100); sementara (Y_3 == 0); kembalikan '6'; } jika (Y_4 == 0) {__delay_ms (100); sementara (Y_4 == 0); kembalikan 'B'; } X_1 = 1; X_2 = 1; X_3 = 0; X_4 = 1; jika (Y_1 == 0) {__delay_ms (100); sementara (Y_1 == 0); kembalikan '7'; } jika (Y_2 == 0) {__delay_ms (100); sementara (Y_2 == 0); kembali '8'; } jika (Y_3 == 0) {__delay_ms (100); sementara (Y_3 == 0); kembalikan '9'; } jika (Y_4 == 0) {__delay_ms (100); sementara (Y_4 == 0); kembalikan '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); pulangkan '0'; } jika (Y_3 == 0) {__delay_ms (100); sementara (Y_3 == 0); kembalikan '#'; } jika (Y_4 == 0) {__delay_ms (100); sementara (Y_4 == 0); kembalikan 'D'; } kembali 'n'; }
Kami juga akan menetapkan tarikan lemah pada empat bit terakhir, dan juga menetapkan arah port sebagai 4 input terakhir dan 4 pertama sebagai output. The OPTION_REG & = 0x7F; digunakan untuk mengatur mod pull up yang lemah pada pin terakhir.
batal InitKeypad (kekosongan) { Keypad_PORT = 0x00; // Tetapkan nilai pin port Kekunci sifar Keypad_PORT_Direction = 0xF0; // Input 4 pin terakhir, output 4 pin pertama OPTION_REG & = 0x7F; }
Dalam program PIC utama (diberikan di bawah) pertama kami menetapkan bit konfigurasi dan memasukkan beberapa perpustakaan yang diperlukan. Kemudian dalam fungsi void system_init kita menginisialkan papan kekunci dan LCD. Dan akhirnya pada dalam utama fungsi kami telah membaca papan kekunci dengan menghubungi switch_press_scan () fungsi dan pulangan balik untuk lcd.
Muat turun kod lengkap dengan fail tajuk dari sini dan periksa video Demonstrasi di bawah.