Visits: 323
Самый недорогой и простой вариант ввода данных в устройство на микроконтроллерах, это считывание состояния тактовых кнопок. Для подключения к порту микроконтроллера достаточно одного резистора. А если порт позволяет подключать встроенные подтягивающие резисторы, то подключение имеет элементарно простой вид:
Самый эффективный вариант опроса кнопок и формирования управляющих флагов, это когда обработка выполняется через прерывания. Для семейства 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; }
Т.е. как видно, все очень просто!
Это может быть интересно
- LED модуль P10C4V12Visits: 3070 LED панели на обычных регистрах типа 74HC595. Они выпускаются как монохромные так двух и полно цветные, особенность, что они предназначены для текстовой информации и имеют один уровень яркости. Общую яркость …
- MCC PIC24 – модуль OUTPUT COMPARE – режиме ШИМVisits: 1101 Во многих системах управления, для формирования управляющих сигналов требуется модуль ШИМ, он позволяет не только формировать импульсы заданной длительности, но и с применением обычного RC фильтра строить простые …
- AD9833 – Programmable Waveform Generator – part twoVisits: 1669 Прошло время и появилась тема, что-бы закончить проект AD9833 – Programmable Waveform Generator. Приехали печатные платы. В этот раз я печатные платы заказывал в https://jlcpcb.com/ делал это в …
- MPLAB X IDE – управление проектамиVisits: 910 Среда MPLAB X IDE позволяет оперативно работать с несколькими проектами, например, если у вас в работе несколько проектов: Для того чтобы переключиться достаточно выбрать другой проект: Для выбора …
- REFERENCE CLOCK OUTPUT MODULEVisits: 489 REFERENCE CLOCK OUTPUT MODULE Модуль формирования опорного тактового сигнала Модуль опорного тактового сигнала обеспечивает возможность посылать сигнал синхронизации на тактовый опорный выходной контакт или контакты (CLKR) в зависимости от …
- ch-светомузыка и AK4113Visits: 1266 Пришло время вернуться к светомузыке. На сегодня использование аналогового входа стало непрактичным, на сегодня необходимо использовать S/PDIF и Toslink. С этим надо было как то разобрать, что это …
- Altium Designer – создание рисунков на печатной платеVisits: 3242 Для создание рисунков на печатной платы в Altium Designer можно использовать возможность использовать в Altium Designer сторонних скриптов. Мне возможность эта очень понравилась и я решил её расшарить …
- JDY-62A Audio bluetooth moduleVisits: 1643 Простой модуль для простого аудио блютуса. Встроенные подсказки на английском языке. Модуль включён, режим муте – после подачи питания. Контроль разряда батареи предупреждение что батарея разряжена и необходима …
- Мультизоновый индикатор-терморегулятор ch-c3010Visits: 1154 Часто возникает необходимость получить информацию по температуре с множества точек контроля. Вам необходимо знать температуру в комнате, в коридоре, температуру на улице, а в погребе (или на балконе) …
- Altium Designer my setup system and project structureVisits: 625 Используйте только последнее обновление!!! Updates https://catcatcat.d-lan.dp.ua/altium-designer-my-libraries-project-templates-system-settings-by-catcatcat-v23-09/ Тут хочу поделиться как я настраиваю Altium Designer и как я использую файлы DXPPreferences.DXPPrf для быстрой конфигурации и получения …