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

Views: 1218


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

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.



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


  • LATINO – открытый проект ch-светомузыкиLATINO – открытый проект ch-светомузыки
    Views: 1769   Проект построенный на некоторых принципах ch-светомузыка. Проект ознакомительный предназначен, для самостоятельного построения простого и эффективного светосинтезатора. Вывод осуществляется на ВОУ собранной на драйверах HL1606. Для этого была …
  • Altium Designer my Libraries, Project templates, System settings by Catcatcat. V26.0Altium Designer my Libraries, Project templates, System settings by Catcatcat. V26.0
    Views: 302 Altium Designer my Libraries, Project templates, System settings by Catcatcat. V26.0   Here I want to share how I configure Altium Designer and how I use the DXPPreferences1.DXPPrf …
  • MCC – K42 – настройка модуля DMAMCC – K42 – настройка модуля DMA
    Views: 1026 MCC – в версии v.3.95.0 и начиная ядра 4.85.0 конфигуратор предоставляет графический интерфейс для настройки модуля DMA. Для начала: Посмотреть какая версия МСС можно в закладке версии, если …
  • CCP модуль для декодирования ИК-кодов пультов ДУCCP модуль для декодирования ИК-кодов пультов ДУ
    Views: 1164 Множество изготовителей для своих пультов дистанционного управления на ИК лучах используют принцип широтно-импульсной модуляции. В таких кодах бит единицы представляется импульсом большой длительности, а ноль импульсом короткой длительности. …
  • LCD индикаторы на драйвере ML1001LCD индикаторы на драйвере ML1001
    Views: 2060  ML1001 – статический LCD GOG (чип в стекле) драйвер для 40-сегментного LCD в позолоченном противоударном исполнении. На них можно каскадно строить цельные из 80 или 120 сегментов LCD индикаторы. …
  • LM317 и светодиодыLM317 и светодиоды
    Views: 8205 LM317 и светодиоды статья с переработанная с сайта http://invent-systems.narod.ru/LM317.htm Долговечность светодиодов определяется качеством изготовления кристалла, а для белых светодиодов еще и качеством люминофора. В процессе эксплуатации скорость деградации кристалла …
  • Датчик контроля протечки воды ch-c0020Датчик контроля протечки воды ch-c0020
    Views: 2123 Как здорово летом под теплым дождем с тобою вдвоем оказаться. Как классно по лужам бежать босиком, с тобою играть и смеяться! Но совсем грустно оказаться под таким дождем, который течет с …
  • Проект с использованием MCC часть 15Проект с использованием MCC часть 15
    Views: 1778 EUSART – Универсальный асинхронный приёмопередатчик (УАПП, англ. Universal Asynchronous Receiver-Transmitter, UART) — узел вычислительных устройств, предназначенный для организации связи с другими цифровыми устройствами. … читать на вики. Внесем изменения в нашу схему, …
  • DIXELL XWEB500D-EVO + RUT900 или как пробить NAT-серверDIXELL XWEB500D-EVO + RUT900 или как пробить NAT-сервер
    Views: 1210 Когда необходимо под какой нибудь контроллер имеющий вэб сервер в инет, то нужен статический IP, что оказалось проблемой при работе с операторами сотовых сетей, конкретно с оператором сети …
  • Audio-bluetooth modules F-6188 (BK8000L)Audio-bluetooth modules F-6188 (BK8000L)
    Views: 2499Следующий модуль на чипе BK8000L. Заводское обозначение F-6188 также основным производителем не выпускается и отдан на тиражирование. с нижней стороны имеет маркировку В этом варианте мне попалась вроде полноценная …



 

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