Views: 391
Самый недорогой и простой вариант ввода данных в устройство на микроконтроллерах, это считывание состояния тактовых кнопок. Для подключения к порту микроконтроллера достаточно одного резистора. А если порт позволяет подключать встроенные подтягивающие резисторы, то подключение имеет элементарно простой вид:
Самый эффективный вариант опроса кнопок и формирования управляющих флагов, это когда обработка выполняется через прерывания. Для семейства 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;
}
Т.е. как видно, все очень просто!
Это может быть интересно
Стробоскоп для автомобиляViews: 2255 Одним из популярных решений светового тюнинга автомобиля, мотоцикла или скутера стал эффект – “полицейский стробоскоп“. На база платы ch-c0050 реализовано несколько проектов. В этой статье приводятся две версии …
Real-time music visualization technologyViews: 380 Music visualization technology in real time (RTMV-technology). Я не музикант і я не маю спеціальної музичної освіти, я інженер розробник вбудованих систем. Але моє хобі розроблення технології візуалізації …
WiFi ESP8266 – AT команды связанные с функцией TCP/IP (v.1.6.1)Views: 5438 AT команды связанные с функцией TCP/IP В этом разделе описаны команды которые позволяют устанавливать соединения между серверами и клиентами в сети. Приведено описание команд и примеры их выполнения. …
Проект с использованием MCC часть 14Views: 1109 С выводом данных на дисплей мы справились (но могу сразу сказать библиотеку графики к этой статьи пришлось доработать, поэтому в этом проекте она обновлена). У нас на текущем …
Toyota Auto Fader – Модуль включения усилителяViews: 2126 Toyota Auto Fader – Модуль включения усилителя. Часто автолюбители прибегают к замене штатного головного устройства на универсальное мультимедийное, в котором значительно расширены функциональные возможности. Если возникает желание оставить …
Сумеречное релеViews: 1672 Реле управления освещением, датчик день-ночь – одним словом фотореле для управления освещением или формирования сигнала для системы умный дом о понижении или повышении освещенности относительно заданного уровня. Реле выполнено по классической схеме, конденсаторный блок питания, от сети переменного тока …
Применение typedef, struct и unionViews: 8922 Полезные описания переменных Часто необходимо в памяти расположить последовательно разные виды данных, что бы потом можно было их использовать. Полезные ссылки Взято и переработано с сайта http://www.butovo.com/~zss/cpp/struct.htm http://cppstudio.com/post/9172/ …
УКВ – радиоприем, часть 1Views: 9834 Музыкальная тема к статье, слушаем: Первый мой радиоприемник, выглядел так. Использовал исключительно в школе на уроках, держась за одно ухо и преданно смотря на училку и сладко улыбаясь. …
Проблемы классической светомузыкиViews: 2200 Светомузыка – что это такое? Определение: Светомузыка (жаргонное: цветомузыка) — вид искусства, основанный на способности человека ассоциировать звуковые ощущения со световыми восприятиями. Такое явление в неврологии получило название …
Altium Designer first projectViews: 548 Эта статья подразумевает, что у вас установлен и настроен Altium Designer как описано в статье Altium Designer my setup system and project structure. Обратите внимание! Библиотека постоянно обновляется, …
