Многокнопочная клавиатура

Views: 384


Самый недорогой и простой вариант ввода данных в устройство на микроконтроллерах, это считывание состояния тактовых кнопок. Для подключения к порту микроконтроллера достаточно одного резистора. А если порт позволяет подключать встроенные подтягивающие резисторы, то подключение имеет элементарно простой вид:

catcatcat_tact_01.png

Самый эффективный вариант опроса кнопок и формирования управляющих флагов, это когда обработка выполняется через прерывания. Для семейства PIC24 (MPLAB® XC16) это легко реализовать через прерывания по изменению состояния на входе порта B.

Для примера возьмём простую клавиатуру из 3 тактовых кнопок, из схемы на рисунке, с аналогичным подключением.

Первое что необходимо это для себя определить, какие флаги состояния нам необходимо получит при выполнении события по нажатию тактовой кнопки. При нажатии на кнопку PB1 – должен установиться флаг MINUS, для  PB2 – PLUS, для PB3 – FUNC. Дополнительно опишем флаги предыдущего состояния кнопок, они нам понадобиться, что-бы программа могла формировать только типа один импульс при нажатии кнопки, а не последовательность.

/* описываем флаги */
struct {
    unsigned RB3p : 1;  // флаг прошлого состояния
    unsigned RB4p : 1;  // флаг прошлого состояния
    unsigned RB5p : 1;  // флаг прошлого состояния
    unsigned FUNC : 1;  // флаг функция
    unsigned PLUS : 1;  // флаг увеличение
    unsigned MINUS : 1;  // флаг уменьшение

} Flagw; // Flagw.NAG название переменной (компилятор самостоятельно отводит количество байт)

Следующее – выполним настройку портов, выполнить настройку выводов порта – это делается при инициализации в начале программы.

/* настройка входов для клавиатуры*/
/* разрешение прерываний*/
CNEN1 = 0b0000000011100000;
CNEN2 = 0b0000000000000000;
/* включение подтягивающих резисторов*/
CNPU1 = 0b0000000011100000;
CNPU2 = 0b0000000000000000;
_CNIF = 0;/*сбросить прерывание*/
_CNIE = 1;/*включить прерывание*/

После этого надо создать саму функцию прерывания, а именно в этой функции будут описываться реакция на нажатия кнопок, у нас самое простое, при нажатии программа должно получить 1 импульс независимо от того как долго нажата кнопка.

/* прерывание от клавиатуры*/
void __attribute__((interrupt, auto_psv)) _CNInterrupt (void)
{
     __delay_us(100);
     if(!_RB5 && Flagw.RB5p) // если кнопка нажата и в предыдущем состоянии, она была отжата, то установить флаг MINUS
     {
         Flagw.MINUS=1;
     }
     else if(!_RB4 && Flagw.RB4p)
     {
         Flagw.PLUS=1;
     }
     else if(!_RB3 && Flagw.RB3p)
     {
         Flagw.FUNC=1;
     }
// запоминание предыдущего состояния кнопок клавиатуры
     Flagw.RB5p=_RB5;
     Flagw.RB4p=_RB4;
     Flagw.RB3p=_RB3;

     _CNIF = 0; // сброс прерывания
}

Из программы прерывания мы получаем флаги состояния кнопок, эти флаги легко обработать в основном цикле программы например так:

if(Flagw.PLUS)
{
   chettt++;
   Flagw.PLUS=0;
}

if(Flagw.MINUS)
{
   chettt--;
   Flagw.MINUS=0;
}

if(Flagw.FUNC)
{
   OledString ("тест",1,0,0,0,-1,70);
   Flagw.FUNC=0;
}

Т.е. как видно, все очень просто!



Это может быть интересно


  • The art of DJThe art of DJ
    Views: 225 The art of DJ. The art of DJ has gained wide popularity. Today, a DJ is not just someone whose task is to mix tracks; a DJ is …
  • ch-4060 – регулятор температуры и влажности на датчике DHT11/DHT22/AM2302ch-4060 – регулятор температуры и влажности на датчике DHT11/DHT22/AM2302
    Views: 2482 На плате ch-4000 очень легко собрать устройство регулятора температуры и влажности. Датчик DHT11  самый недорогой вариант для создания такого устройства, правда точность его не велика, но для бытовых устройств …
  • Проект с использованием MCC часть 14Проект с использованием MCC часть 14
    Views: 1005 С выводом данных на дисплей мы справились (но могу сразу сказать библиотеку графики к этой статьи пришлось доработать, поэтому в этом проекте она обновлена). У нас на текущем …
  • Защита датчиков температуры DS18B20 от статического электричестваЗащита датчиков температуры DS18B20 от статического электричества
    Views: 1955 Статья перепечатана с сайта http://svetomuzyka.narod.ru При удалении датчика на большие расстояния возникает опасность наведения импульсов высокого напряжения на кабель, который соединяет датчик с контролером. Если не принимать меры защиты, …
  • Часы + Календарь + Термометр + …Часы + Календарь + Термометр + …
    Views: 2789 Часы + Календарь + Термометр + Индикатор влажности + Секундомер + Дистанционное управление на ИК лучах (пульты на RC-5 протоколе) + Автоматическая регулировка яркости + Возможность вывода данных через USB, …
  • Проект с использованием MCC часть 15Проект с использованием MCC часть 15
    Views: 1714 EUSART – Универсальный асинхронный приёмопередатчик (УАПП, англ. Universal Asynchronous Receiver-Transmitter, UART) — узел вычислительных устройств, предназначенный для организации связи с другими цифровыми устройствами. … читать на вики. Внесем изменения в нашу схему, …
  • MPLAB® Harmony – или как это просто! Часть 1.MPLAB® Harmony – или как это просто! Часть 1.
    Views: 3806 Часть первая – Установка Гармонии. Музыкальная тема к статье, слушаем: В начале запуска нового проекта и выбора микроконтроллера стоит задача правильно его сконфигурировать, прежде чем перейти к реализации …
  • Гаджеты для домашней автоматики – Емкостной сенсорГаджеты для домашней автоматики – Емкостной сенсор
    Views: 1801 Управление светодиодным освещением – Сенсор емкостной. Данный гаджет предназначен для управления освещением где необходимо включением освещение сенсорным прикосновением. Датчик позволяет управлять светодиодной нагрузкой в виде модулей или светодиодных лент …
  • Модуль CAN в микроконтроллерах PIC18Модуль CAN в микроконтроллерах PIC18
    Views: 5923 Введение   CAN последовательный интерфейс связи, который эффективно поддерживает распределенное управление в реальном масштабе времени с высокой помехозащищенностью. Протокол связи полностью определен Robert Bosch GmbH, в спецификации требований …
  • Customs codes for exportCustoms codes for export
    Views: 342   Митні коди (HS Code) для надсилання посилок за кордон. Для відправки товару за кордон на сьогодні необхідно зазначати митні коди. Часто визначення коду займає багато часу. Для …



Поделись этим!