- Навіщо нам потрібна клавіатура 4x4:
- Як працює матрична клавіатура 4x4:
- Необхідний матеріал:
- Кругова діаграма:
- Пояснення програмування:
Клавіатури - це широко використовувані пристрої введення, що використовуються в різних електроніках та вбудованих проектах. Вони використовуються для введення даних у вигляді цифр та алфавітів, і подають їх у систему для подальшої обробки. У цьому підручнику ми збираємось поєднати матричну клавіатуру 4x4 з PIC16F877A.
Перш ніж вдаватися до логіки деталей та навчитися користуватися клавіатурою, нам потрібно знати кілька речей.
Навіщо нам потрібна клавіатура 4x4:
Зазвичай ми використовуємо один штифт вводу-виводу мікроконтролера для зчитування цифрового сигналу, як вхід перемикача. У кількох програмах, де для введення потрібно 9, 12, 16 ключів, якщо ми додамо кожен ключ у порт мікроконтролера, ми в кінцевому підсумку використаємо 16 портів вводу-виводу. Ці 16 портів вводу-виводу призначені не тільки для зчитування сигналів вводу-виводу, але їх також можна використовувати як периферійні з'єднання, як ADC-підтримка, I2C, SPI-з'єднання також підтримуються цими виводами вводу-виводу. Оскільки ці штирі пов'язані з перемикачами / клавішами, ми не можемо використовувати їх, а лише як порти вводу-виводу. Це взагалі не має сенсу. Отже, як зменшити кількість штифтів? Відповідь полягає у використанні шестигранної клавіатури або матричної клавіатури; ми можемо зменшити кількість штифтів, які асоціюють матричні ключі 4х4. Він використовуватиме 8 контактів, з яких 4 з'єднані в рядки та 4 з'єднані в стовпці, таким чином економить 8 контактів мікроконтролера.
Як працює матрична клавіатура 4x4:
На верхньому зображенні зліва показано матричний модуль клавіатури. Праворуч показано внутрішнє з'єднання, а також порт. Якщо ми бачимо порт, є 8 контактів, спочатку 4 зліва направо - це X1, X2, X3 і X4 - це рядки, а останні 4 зліва направо - Y1, Y2, Y3, Y4 - чотири стовпці. Якщо ми робимо 4 рядки або X боку, як вихід і зробити їх низький логічний рівень або 0, і зробити 4 колонки, як вхід і читати ключі ми будемо читати перемикач натисніть, коли кореспондент Y отримує 0.
Те саме відбувається в матриці nxn, де n - число. Це може бути 3x3, 6x6 тощо.
Тепер просто подумайте, що натиснуто 1. Тоді 1 розміщується в рядку X1 і стовпці Y1. Якщо X1 дорівнює 0, тоді Y1 буде рівним 0. Таким же чином ми можемо відчути кожну клавішу в рядку X1, зчитуючи стовпці Y1, Y2, Y3 та Y4. Це відбувається з кожним перемикачем, і ми будемо зчитувати положення перемикачів у матриці.
Кожне зелене коло - це перемикач, і вони обидва з’єднані між собою однаково.
У цьому підручнику ми будемо взаємодіяти з клавіатурою з наступними технічними характеристиками -
- Ми будемо використовувати внутрішнє підтягування
- Ми додамо опцію відмови ключа
Але коли перемикачі не натиснуті, нам потрібно зробити Y1, Y2, Y3 і Y4 як високі або 1. В іншому випадку ми не можемо виявити зміни логіки при натисканні на перемикач. Але ми не змогли зробити це за кодами чи програмами, оскільки ці шпильки використовуються як вхід, а не як вихід. Отже, ми будемо використовувати внутрішній регістр операцій у мікроконтролері і працюватимемо з цими контактами як із слабким ввімкненим режимом. За допомогою цього буде логічний режим високого дозволу, коли він перебуває у стані за замовчуванням.
Крім того, коли ми натискаємо клавішу, виникають стрибки або шуми генеруються з контактами перемикача, і через це багаторазове натискання на перемикач відбувається, що не очікується. Отже, спочатку ми виявимо натискання перемикача, зачекаємо кілька мілісекунд, ще раз перевіримо, натиснуто перемикач чи ні, і якщо перемикач все ще натиснутий, ми приймемо натискання перемикача, нарешті, ні. Це називається відскоком вимикачів.
Ми реалізуємо все це в нашому коді та встановимо з'єднання на макеті.
Також перевірте, як взаємодіяти клавіатуру 4x4 з іншими мікроконтролерами:
- Взаємодія клавіатури з Arduino Uno
- Взаємодія матричної клавіатури 4x4 з мікроконтролером 8051
- Взаємодія клавіатури 4x4 з мікроконтролером ATmega32
- Замок цифрового коду Raspberry Pi на макеті
Необхідний матеріал:
- Макет
- Pic-kit 3 та середовище розробки у вашому ПК, тобто MPLABX
- Проводи та роз'єми
- РК-дисплей із символами 16x2
- Кристал 20 МГц
- 2 шт. 33pF керамічна кришка диска.
- Резистор 4.7k
- 10k попередньо встановлений (змінний резистор)
- Матрична клавіатура 4x4
- Адаптер 5 В
Кругова діаграма:
Ми з’єднаємо кристали та резистор у відповідних штифтах. Крім того, ми підключимо РК-дисплей у 4-бітному режимі через PORTD. Ми підключили шестигранну клавіатуру або матричну клавіатуру через порт RB4.
Якщо ви новачок у PIC, тоді починайте з Початок роботи з мікроконтролером PIC: Вступ до PIC та MPLABX
Пояснення програмування:
Повний код взаємодії матричної клавіатури з мікроконтролером PIC подано в кінці. Код простий і зрозумілий. Бібліотека клавіатури - це єдине, що слід розуміти в коді. Тут ми використали клавіатуру keypad.h та lcd.h для взаємодії з клавіатурою та РК-дисплеєм 16x2. Тож давайте побачимо, що відбувається всередині цього.
Усередині клавіатури.h ми побачимо, що ми використовували заголовок xc.h, який є бібліотекою регістрів за замовчуванням, частота кристалів визначена для використання із затримкою, що використовується у файлі kepad.c. Ми визначили порти клавіатури в регістрі PORTRB та визначили окремі штифти як рядок (X) та стовпці (Y).
Ми також використовували дві функції - одну для ініціалізації клавіатури, яка перенаправляє порт як вихід і вхід, та сканування натискання на перемикач, яке повертає стан натискання на перемикач при виклику.
#включати
На клавіатурі. C ми побачимо, що наведена нижче функція поверне натискання клавіші, коли функція сканера клавіатури не поверне 'n'.
char switch_press_scan (void) // Отримати ключ від користувача { char key = 'n'; // Припустимо, що жодна клавіша не натиснута, поки (key == 'n') // Зачекайте, доки не буде натиснута клавіша key = keypad_scanner (); // Сканування ключів ще раз і знову ключ повернення; // при натисканні клавіші повертаємо її значення }
Нижче наведена функція зчитування з клавіатури. На кожному кроці ми будемо робити рядки X1, X2, X3 та X4 як 0 і зчитувати статус Y1, Y2, Y3 та Y4. Затримка використовується для ефекту розриву, коли все ще натиснуто перемикач, ми повернемо пов'язане з ним значення. Якщо не натиснуто жодного перемикача, ми повернемо 'n'.
char сканування клавіатури (void) { X_1 = 0; X_2 = 1; X_3 = 1; X_4 = 1; якщо (Y_1 == 0) {__delay_ms (100); в той час як (Y_1 == 0); повернути '1'; } if (Y_2 == 0) {__delay_ms (100); в той час як (Y_2 == 0); повернення '2'; } if (Y_3 == 0) {__delay_ms (100); в той час як (Y_3 == 0); повернення '3'; } if (Y_4 == 0) {__delay_ms (100); в той час як (Y_4 == 0); повернути 'A'; } X_1 = 1; X_2 = 0; X_3 = 1; X_4 = 1; якщо (Y_1 == 0) {__delay_ms (100); в той час як (Y_1 == 0); повернення '4'; } if (Y_2 == 0) {__delay_ms (100); в той час як (Y_2 == 0); повернення '5'; } if (Y_3 == 0) {__delay_ms (100); в той час як (Y_3 == 0); повернення '6'; } if (Y_4 == 0) {__delay_ms (100); в той час як (Y_4 == 0); повернення 'B'; } X_1 = 1; X_2 = 1; X_3 = 0; X_4 = 1; якщо (Y_1 == 0) {__delay_ms (100); в той час як (Y_1 == 0); повернення '7'; } if (Y_2 == 0) {__delay_ms (100); в той час як (Y_2 == 0); повернення '8'; } if (Y_3 == 0) {__delay_ms (100); в той час як (Y_3 == 0); повернення '9'; } if (Y_4 == 0) {__delay_ms (100); в той час як (Y_4 == 0); повернення 'C'; } X_1 = 1; X_2 = 1; X_3 = 1; X_4 = 0; якщо (Y_1 == 0) {__delay_ms (100); в той час як (Y_1 == 0); повернути '*'; } if (Y_2 == 0) {__delay_ms (100); в той час як (Y_2 == 0); повернути '0'; } if (Y_3 == 0) {__delay_ms (100); в той час як (Y_3 == 0); повернути '#'; } if (Y_4 == 0) {__delay_ms (100); в той час як (Y_4 == 0); повернення 'D'; } повернути 'n'; }
Ми також встановимо слабке підтягування на останніх чотирьох бітах, а також встановимо напрямок портів як останні 4 вхідних і перші 4 як вихідні. OPTION_REG & = 0x7F; використовується для встановлення режиму слабкого витягування на останніх штифтах.
порожнеча InitKeypad (порожнеча) { Keypad_PORT = 0x00; // Встановити значення контактів порту клавіатури нулем Keypad_PORT_Direction = 0xF0; // Останні 4 висновки введення, Перші 4 висновки вихід OPTION_REG & = 0x7F; }
В основній програмі PIC (подана нижче) ми спочатку встановили біти конфігурації та включили кілька необхідних бібліотек. Потім у void функціях system_init ми ініціалізуємо клавіатуру та РК-дисплей. І, нарешті, в в головній функції ми прочитали клавіатуру, викликавши switch_press_scan () функцію і повертає значення для ЖК.
Завантажте повний код із файлами заголовків звідси та перегляньте демонстраційне відео нижче.