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

Views: 391


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

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;
}

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



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


  • Стробоскоп для автомобиляСтробоскоп для автомобиля
    Views: 2255 Одним из популярных решений светового тюнинга автомобиля, мотоцикла или скутера стал эффект –  “полицейский стробоскоп“. На база платы ch-c0050 реализовано несколько проектов. В этой статье приводятся две версии …
  • Real-time music visualization technologyReal-time music visualization technology
    Views: 380 Music visualization technology in real time (RTMV-technology). Я не музикант і я не маю спеціальної музичної освіти, я інженер розробник вбудованих систем. Але моє хобі розроблення технології візуалізації …
  • WiFi ESP8266 – AT команды связанные с функцией TCP/IP (v.1.6.1)WiFi ESP8266 – AT команды связанные с функцией TCP/IP (v.1.6.1)
    Views: 5438 AT команды связанные с функцией TCP/IP В этом разделе описаны команды которые позволяют устанавливать соединения между серверами и клиентами в сети. Приведено описание команд и примеры их выполнения. …
  • Проект с использованием MCC часть 14Проект с использованием MCC часть 14
    Views: 1109 С выводом данных на дисплей мы справились (но могу сразу сказать библиотеку графики к этой статьи пришлось доработать, поэтому в этом проекте она обновлена). У нас на текущем …
  • Toyota Auto Fader – Модуль включения усилителяToyota Auto Fader – Модуль включения усилителя
    Views: 2126 Toyota Auto Fader – Модуль включения усилителя. Часто автолюбители прибегают к замене штатного головного устройства на универсальное мультимедийное, в котором значительно расширены функциональные возможности. Если возникает желание оставить …
  • Сумеречное релеСумеречное реле
    Views: 1672 Реле управления освещением, датчик день-ночь – одним словом фотореле для управления освещением или формирования сигнала для системы умный дом о понижении или повышении освещенности относительно заданного уровня. Реле выполнено по классической схеме, конденсаторный блок питания, от сети переменного тока …
  • Применение typedef, struct и unionПрименение typedef, struct и union
    Views: 8922 Полезные описания переменных Часто необходимо в памяти расположить последовательно разные виды данных, что бы потом можно было их использовать. Полезные ссылки Взято и переработано с сайта http://www.butovo.com/~zss/cpp/struct.htm http://cppstudio.com/post/9172/ …
  • УКВ – радиоприем, часть 1УКВ – радиоприем, часть 1
    Views: 9834 Музыкальная тема к статье, слушаем: Первый мой радиоприемник, выглядел так. Использовал исключительно в школе на уроках, держась за одно ухо и преданно смотря на училку и сладко улыбаясь. …
  • Проблемы классической светомузыкиПроблемы классической светомузыки
    Views: 2200 Светомузыка – что это такое? Определение: Светомузыка  (жаргонное: цветомузыка)  — вид искусства, основанный на способности человека ассоциировать звуковые ощущения со световыми восприятиями. Такое явление в неврологии получило название …
  • Altium Designer first projectAltium Designer first project
    Views: 548 Эта статья подразумевает, что у вас установлен и настроен Altium Designer как описано в статье  Altium Designer my setup system and project structure.  Обратите внимание! Библиотека постоянно обновляется, …



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