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

Views: 1217


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

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.



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


  • Проект с использованием MCC часть 16Проект с использованием MCC часть 16
    Views: 1325 Продолжим изучение EUSART. На этом этапе отработает передачи данных с ПК и получения эха. Для этого в основной цикл программы добавим код if(EUSART_DataReady) // проверим флаг готовности данных …
  • Audio-bluetooth modules BK8000L (noname)Audio-bluetooth modules BK8000L (noname)
    Views: 875 Еще один вариант, так сказать недоразумения Audio-bluetooth modules BK8000L (noname). Его отличительной маркировкой служат два отверстия в плате и надпись R2. Отличают его от модулей на чипе BK8000L, …
  • Real-time music visualization technologyReal-time music visualization technology
    Views: 354 Music visualization technology in real time (RTMV-technology). Я не музикант і я не маю спеціальної музичної освіти, я інженер розробник вбудованих систем. Але моє хобі розроблення технології візуалізації …
  • PIC18F25K42 – v. A001 – выявленные баги.PIC18F25K42 – v. A001 – выявленные баги.
    Views: 818 Модуль I2C Не работает при использовании в стандартной конфигурации MCC. Требует особой нестандартной конфигурации и управления для нормальной работы. Обойти Обход проблемы возможен библиотека см статью. Модуль ADC2 На …
  • Счетчики посетителейСчетчики посетителей
    Views: 1310 Вас сосчитали!? или счетчики посетителей.   Для чего нужны счетчики посетителей? Какие они бывают? ТОРГОВЛЯ. Подсчитайте, сколько ваш магазин посещает человек за день. Кок много человек приходит утром, какое …
  • Простой сенсорный регулятор светаПростой сенсорный регулятор света
    Views: 2518 Простой сенсорный регулятор. Проект – 2007 года. Регулятор выполнена на микроконтроллере PIC12F683 и имеет минимальное количество элементов. Выполняет стандартные функции, включение выключение света, изменение яркости, запоминание последнего установленного уровня …
  • CLUBBEST-50-LightCLUBBEST-50-Light
    Views: 472 CLUBBEST-50-LIGHT   Зміст Короткий опис проекту. 1 Опис схемотехніки візуалізатора музики. 2 Аудіо вхід. 3 MCU. 4 Цифровий вихід. 5 Схема живлення MCU. 6 Складання пристрою. 7 Список …
  • Универсальный терморегулятор ch-c3000Универсальный терморегулятор ch-c3000
    Views: 3233 Терморегулятор ch-c3000 предназначен для управления системами регулирования температуры в пределах от – (минус) 55 до + 125 С. Регулятор может использоваться как в системах отопления, так и в …
  • Проект с использованием MCC часть 10Проект с использованием MCC часть 10
    Views: 1087 Алгоритм управления освещением от нажатия кнопки. Обработка удержания кнопки: Мы должны проверить кнопка в настоящий момент нажата и флаг удержания установлен, если да Проверить таймер удержания “отработал” – …
  • Акриловый корпус для платы ch-4000Акриловый корпус для платы ch-4000
    Views: 871 Плата ch-4000 подходит для монтажа в корпуса на дин рейку, но для домашней автоматики необходимо что-то другое, поэтому был разработан корпус из акрила который позволит создавать настольные и настенные устройства. Корпус …



 

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