Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Информация о состоянии входов STM32F1XX
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Evgeny72
Прошу помочь описать состояние входов микроконтроллера. Есть два входа на STM. На них присутствуют логические состояния: 00, 01, 10, 11. Нужно при определенном состоянии вывести строку на дисплей. (Вывод строки я освоил.) Например, при состоянии на входах 00, шлем одно сообщение. при состоянии на входах 01, шлем другое сообщение и т.д. Смог реализовать только для одного вывода, 0 или 1.

CODE
DigitalIn SW1 (USER_BUTTON);


int buttonPushCounter = 0;
int buttonState = 0;
int lastButtonState = 0;

int main()
{

...

while(1)
{
buttonState = SW1;
if (buttonState != lastButtonState) {
if (buttonState == 1) {
buttonPushCounter++;

Шлем информацию на дисплей ...

}
else
{
Шлем информацию на дисплей ...
}

}
lastButtonState = buttonState;
}

}

Прошу сильно не пинать, только начал осваивать микроконтроллеры, использовал среду разработки mbed.
Genadi Zawidowski
Код
if (button1State == 0&& button2State == 0)
{
}
else if (button1State == 0 && button2State == 1)
{
}else if (button1State == 1 && button2State == 0)
{
}else if (button1State == 1 && button2State == 1)
{
}
ViKo
Оператор case подходит для такого случая. Если кнопки висят на одном порту. Если нет, можно склеить в новую переменную.
KnightIgor
Цитата(Evgeny72 @ Sep 7 2016, 08:46) *
Прошу помочь описать состояние входов микроконтроллера. Есть два входа на STM. На них присутствуют логические состояния: 00, 01, 10, 11. Нужно при определенном состоянии вывести строку на дисплей. (Вывод строки я освоил.) Например, при состоянии на входах 00, шлем одно сообщение. при состоянии на входах 01, шлем другое сообщение и т.д. Смог реализовать только для одного вывода, 0 или 1.

Сведите оба состояния в одну переменную и обработайте switch:

Код
unsigned char sw;

sw = (sw1 == 1) | ((sw2 == 1) << 1);

switch (sw) {

case 1: // 01

break;

case 2: // 10

break;

case 3: // 11

break;

default: { // 00

}
}
SSerge
или так:
Код
  switch((SW1 ? 1 : 0)|(SW2 ? 2 : 0))
  {
  case 0:
      //
      break;
  case 1:
      //
      break;
  case 2:
      //
      break;
  case 3:
      //
      break;
  }

Но если на этих входах кнопки или что-то похожее, то придётся озаботиться программным устранением дребезга контактов.
Evgeny72
Всем спасибо за советы! Сделал.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.