Библиотека кнопок

Библиотека кнопок предоставляет процедуры для обнаружения нажатия кнопок и дебонирования (исключение влияния мерцания контакта при нажатии кнопки)

Процедуры библиотеки

Button

Прототип

function Button(var port: word; pin: word; time: word; ActiveState: word) : word;

Описание

Функция устраняет влияние мерцания контакта при нажатии кнопки (debouncing). Штырь кнопки проверяется сразу после вызова функции, а затем снова после истечения периода отладки. Если штырь находился в активном состоянии в обоих случаях, функция возвращает 255 (true).

Параметры
  • port: адрес порта
  • pin: вывод кнопки
  • time: период стабилизации в миллисекундах
  • active_state: определяет то, что считается активным состоянием. Допустимые значения: 0 (логический ноль) и 1 (логический)
Возвращает
  • 255 если штырь находился в активном состоянии за данный период.
  • 0в противном случае
Требует

Ничего

Пример

Stellaris

program Button_Test;
  var oldstate : byte;
begin
  GPIO_Digital_Input(@GPIO_PORTE_DATA_BITS, _GPIO_PINMASK_1);    // Set GPIO_PORTE.1 as digital input
  GPIO_Digital_Output(@GPIO_PORTF_DATA_BITS, _GPIO_PINMASK_ALL); // Set GPIO_PORTF as digital output
  oldstate := 0;

   while TRUE do
     begin
       if (Button(GPIO_PORTE_DATA, 1, 1, 1)) then                // detect logical one on PE1 pin
         oldstate := 1;
       if (oldstate and Button(GPIO_PORTE_DATA, 1, 1, 0)) then
         begin                                                   // detect one-to-zero transition on PE1 pin
           GPIO_PORTF_DATA := not GPIO_PORTF_DATA;              // invert GPIO_PORTF value
           oldstate := 0;
         end;
     end;                                                         // endless loop
end.

STM32

program Button_Test;
  var oldstate : byte;
begin
  GPIO_Digital_Input(@GPIOA_BASE, _GPIO_PINMASK_0);      // Set PA0 as digital input
  GPIO_Digital_Output(@GPIOD_BASE, _GPIO_PINMASK_ALL);   // Set PORTD as digital output
  oldstate := 0;

   while TRUE do
     begin
       if (Button(GPIOA_IDR, 0, 1, 1)) then               // detect logical one on PA0 pin
         oldstate := 1;
       if (oldstate and Button(GPIOA_IDR, 0, 1, 0)) then
         begin                                            // detect one-to-zero transition on PA0 pin
           GPIOD_ODR := not GPIOD_ODR;                    // invert PORTD value
           oldstate := 0;
         end;
     end;                                                 // endless loop
end.
Notes

Нет.