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

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

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



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


  • WiFi ESP8266 – AT команды связанные с функцией TCP/IP (v.1.6.1)WiFi ESP8266 – AT команды связанные с функцией TCP/IP (v.1.6.1)
    Views: 5438 AT команды связанные с функцией TCP/IP В этом разделе описаны команды которые позволяют устанавливать соединения между серверами и клиентами в сети. Приведено описание команд и примеры их выполнения. …
  • Дисплей KD035C-3A подключение и управлениеДисплей KD035C-3A подключение и управление
    Views: 890 Дисплей KD035C-3A производиться компанией SHENZHEN STARTEK ELECTRONIC TECHNOLOGY CO.,LTD Характеристики Параметр Спецификация Единицы измерения Размер дисплея 70.08(H)*52.56(V) (3.5inch) mm Тип дисплея TFT active matrix Цветовая гамма 65K/262K colors Разрешение …
  • Светодиоды со встроенным драйвером WS2812BСветодиоды со встроенным драйвером WS2812B
    Views: 1090 Производитель http://www.world-semi.com Краткое описание продукции фирмы Каталог продукции” catcatcat_ws_19 catcatcat_ws_15 catcatcat_ws_11 catcatcat_ws_07 catcatcat_ws_03 catcatcat_ws_18 catcatcat_ws_14 catcatcat_ws_10 catcatcat_ws_06 catcatcat_ws_02 catcatcat_ws_05 catcatcat_ws_09 catcatcat_ws_13 catcatcat_ws_17 catcatcat_ws_16 catcatcat_ws_12 catcatcat_ws_08 catcatcat_ws_04 catcatcat_ws_01 This jQuery …
  • Customs codes for exportCustoms codes for export
    Views: 385   Митні коди (HS Code) для надсилання посилок за кордон. Для відправки товару за кордон на сьогодні необхідно зазначати митні коди. Часто визначення коду займає багато часу. Для …
  • Применение typedef, struct и unionПрименение typedef, struct и union
    Views: 8922 Полезные описания переменных Часто необходимо в памяти расположить последовательно разные виды данных, что бы потом можно было их использовать. Полезные ссылки Взято и переработано с сайта http://www.butovo.com/~zss/cpp/struct.htm http://cppstudio.com/post/9172/ …
  • Ultrasonic Level Meters – ULM –53LUltrasonic Level Meters – ULM –53L
    Views: 806 Измерение расстояния при помощи ультра звукового датчика ULM–53L–10. Диапазон измерения от 0,5 м до 10 м, полностью пластмассовый излучатель PVDF, механическое соединение фланцем из полиэтилена HDPE (исполнение “N”) Характеристики …
  • Просто о внешних переменныхПросто о внешних переменных
    Views: 950  Часто возникает задача когда необходимо предавать данные между модулями программы. Например, передать данные между файлами, или управлять работой модулей. Для этого создаем заголовочный файл и описываем наши переменные как …
  • Game, exercise machine – Logic Gates.Game, exercise machine – Logic Gates.
    Views: 40 Game, exercise machine – Logic Gates. A game, a simulator, a gift – the development of logical thinking. The game is designed to develop logical thinking in children, …
  • LCD драйвер – UC1601sLCD драйвер – UC1601s
    Views: 1836 http://svetomuzyka.narod.ru/project/UC1601s.html Читайте обновление на http://catcatcat.d-lan.dp.ua/?page_id=178 В данный момент можно приобрести в ООО “Гамма” несколько типов индикаторов на драйвере UC1601s. RDX0048-GC, RDX0077-GS, RDX0154-GC и RDX0120-GC выполнены по технологии COG.
  • Универсальный терморегулятор ch-c3000Универсальный терморегулятор ch-c3000
    Views: 3236 Терморегулятор ch-c3000 предназначен для управления системами регулирования температуры в пределах от – (минус) 55 до + 125 С. Регулятор может использоваться как в системах отопления, так и в …



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