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.
Это может быть интересно
Altium Designer – подготовка документации для производства и сборки печатных платViews: 4050 В процессе освоения Altium Designer много возникает вопросов по подготовке документации для производства плат, а также для её сборки. Altium Designer позволяет сделать все требуемые документы, хотя скажем …
Система AT команд версии V2.0 для ESP8266 и ESP32Views: 13805 Появление нового модуля на базе ESP32 заставило систематизировать систему AT команд, а так же систему обновления и для модулей на базе ESP8266. Начиная с версии v2.0 в ESP8266 …
ESP8266 применение в проектахViews: 3790 (Актуально только для версий прошивки 1.хх) ESP8266 показала себя как надежное и безотказное устройство для обмена данными с применением WIFI. Я использую ESP8266 исключительно через UART, с применением AT …
Проект с использованием MCC часть 01Views: 2733 Для изучения MCC я выбрал простой контроллер PIC16F1509. Выбор его был обусловлен богатой новой периферией которую можно изучить. Для начала была собрана схема на макетной плате Внешний вид …
JDY-62A Audio bluetooth moduleViews: 1924 Простой модуль для простого аудио блютуса. Встроенные подсказки на английском языке. Модуль включён, режим муте – после подачи питания. Контроль разряда батареи предупреждение что батарея разряжена и необходима …
Flight controller for FPV drone.Views: 56 Reverse engineering of a flight controller (SpeedyBee F405 V4 55A 30×30 Stack). Мене зацікавила конструкція основних компонентів FPV-дрона. Першим варіантом, який я розглянув, був контролер польоту від китайської …
Бегущие огни на WS2812BViews: 5054 В настоящее время большой популярностью стали пользоваться светодиоды со встроенным драйвером WS2812B. Текущий проект предназначен показать возможность использования и управления этими светодиодами. Это и проект и исследование по …
PIC18 – модуль DMAViews: 1366 Введение Модуль прямого доступа к памяти (DMA) предназначен для обслуживания передачи данных непосредственно между различными областями памяти без вмешательства процессора. Исключив при этом необходимость в интенсивной обработки …
Ultrasonic Level Meters – ULM –53LViews: 806 Измерение расстояния при помощи ультра звукового датчика ULM–53L–10. Диапазон измерения от 0,5 м до 10 м, полностью пластмассовый излучатель PVDF, механическое соединение фланцем из полиэтилена HDPE (исполнение “N”) Характеристики …
AD9833 – Programmable Waveform Generator – part twoViews: 1966 Прошло время и появилась тема, что-бы закончить проект AD9833 – Programmable Waveform Generator. Приехали печатные платы. В этот раз я печатные платы заказывал в https://jlcpcb.com/ делал это в …