Чтение кнопок 2 – простая функция удержания клавиши

Views: 1222


Вариант формирование единичного нажатия и формирования сигнала удержания клавиши.

char KLAV02 (void)                          //
{
    if (button02==0)                        // проверяем, кнопка нажата? уровень низкий?
    {
        _delay(10000);                      // подождем 10 мСек. задержка для устранения "дребезга"
        if (button02==0)                    // и еще раз проверим, кнопка нажата
        {
            if (!timerpovtor02&&!button02DOUN) 	// проверяем бит, кнопка была нажата до этого?
            {
                timerpovtor02=DLITUD;         // таймер задежки на время удержание клавиши
                return 1;                   // одно нажатие
            }
            else
            {
                timerpovto02r--;              //
                if(!timerpovtor02)            //
                {
                    timerpovtor02=DLITUD;     //
                    button02DOUN=1;         //
                    return 2;               // удержание кнопки
                }
                return 0;                   // ожидание отработки таймера
            }
        }
    }
    button02DOUN=0; // сброс бита сигнал удержания сформирован
    timerpovtor02=0;
    return 0;
}

Эта функция при нажатии на кнопку button02 функция возвращает один раз 1 при обращении к этой функции. Через количество обращений равное DLITUD функция будет возвращать значение 2.

Для описания кнопки button02 используйте

#define button02 RC3  // привязка имя к конкретному порту

Для описания количество обращений для формирования кода удержания/авто повтора (2)

#define DLITUD 25       // длительность удержания клавищи для выдачи кода удержания/автоповтор

Для вызова и обработки клавиши, функцию надо вставить в главный цикл программы и контролировать при помощи условия, например:

        if(KLAV02()==1)
        {
             .....
        }

        if(KLAV02()==2)
        {
             .....
        }

Для нескольких кнопок можно использовать несколько функций изменение имя и добавив соответствующие биты контроля состояния, например:

char KLAV01 (void);
char KLAV02 (void);
char KLAV03 (void);
char KLAV04 (void);

#define button01         RA4//выбор окна
#define button02         RC5//функция кнопок
#define button03         RC4//volum_P
#define button04         RC3//volum_M

bit button01DOUN,button02DOUN,button03DOUN,button04DOUN;
char timerpovtor01, timerpovtor02, timerpovtor03, timerpovtor04;

Пример актуален без изменений для компилятора MPLAB® XC8 Compiler.



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


  • Дисплей KD035C-3A подключение и управлениеДисплей KD035C-3A подключение и управление
    Views: 898 Дисплей KD035C-3A производиться компанией SHENZHEN STARTEK ELECTRONIC TECHNOLOGY CO.,LTD Характеристики Параметр Спецификация Единицы измерения Размер дисплея 70.08(H)*52.56(V) (3.5inch) mm Тип дисплея TFT active matrix Цветовая гамма 65K/262K colors Разрешение …
  • Униполярный шаговый двигатель – часть 2Униполярный шаговый двигатель – часть 2
    Views: 1064 В этой части только итог и версия 2.0 универсальной, которая позволяет управлять шаговым двигателем во всех трех режимах и 3.0 специальной библиотеки только для одного полушагового режима. В …
  • LED модуль P10 (1R) V706ALED модуль P10 (1R) V706A
    Views: 8014 Это еще одно чудо от китайского брата. Это монохромные матрицы, называются они P10 (1R) V706A, ну типа  R-красные, но не верьте паяют светики и зеленые и синие, в общем …
  • Счетчики посетителейСчетчики посетителей
    Views: 1312 Вас сосчитали!? или счетчики посетителей.   Для чего нужны счетчики посетителей? Какие они бывают? ТОРГОВЛЯ. Подсчитайте, сколько ваш магазин посещает человек за день. Кок много человек приходит утром, какое …
  • Регулятор влажности ch-3800Регулятор влажности ch-3800
    Views: 1568   И еще один проект на плате ch-c3xxx –  универсальный регулятор влажности ch-3800. Регулятор позволяет работать как в режиме индикатора влажности, так и в режиме регулятора. Рабочий диапазон …
  • Kitchen timer with contactless gesture controlKitchen timer with contactless gesture control
    Views: 828    Кухонний таймер з безконтактним керуванням жестами дозволяє встановити необхідний період часу для приготування страв, не торкаючись пристрою. Дуже зручно під час приготування їжі, коли руки забрудниться. Усі …
  • Обновление ESP8266 c ESPFlashDownloadTool_v3.6.3Обновление ESP8266 c ESPFlashDownloadTool_v3.6.3
    Views: 3761 Технология обновления следующая: Загружаем программу со страницы espressif.com. Разархивируем. Где находятся файлы, для прошивки? Заходим в каталоги Подключаем по схеме в статье WiFi ESP8266 (замыкаем BT2, перемычка). Запускаем программу, …
  • Проект с использованием MCC часть 12-2Проект с использованием MCC часть 12-2
    Views: 1240 Настало время для изучения шины I2C. Изучать будем на примере работы с индикатором RET012864E. Что изменили со старой схемы: В прошлой теме я затупил и не добавил подтягивающие резисторы …
  • USB K-L-line адаптерUSB K-L-line адаптер
    Views: 4780 USB K-L-line адаптер предназначен для связи персонального компьютера с диагностической шиной автомобиля – интерфейс ISO-9141. Этот проект предназначен для сборки недорого устройства с использованием специально для этой цели …
  • Toyota Auto Fader – Модуль включения усилителяToyota Auto Fader – Модуль включения усилителя
    Views: 2135 Toyota Auto Fader – Модуль включения усилителя. Часто автолюбители прибегают к замене штатного головного устройства на универсальное мультимедийное, в котором значительно расширены функциональные возможности. Если возникает желание оставить …



 

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