реклама на сайте
подробности

 
 
> Информация о состоянии входов STM32F1XX
Evgeny72
сообщение Sep 7 2016, 07:46
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 4-01-14
Пользователь №: 79 899



Прошу помочь описать состояние входов микроконтроллера. Есть два входа на 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.

Сообщение отредактировал IgorKossak - Sep 7 2016, 18:10
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
Genadi Zawidowsk...
сообщение Sep 7 2016, 07:57
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Код
if (button1State == 0&& button2State == 0)
{
}
else if (button1State == 0 && button2State == 1)
{
}else if (button1State == 1 && button2State == 0)
{
}else if (button1State == 1 && button2State == 1)
{
}


Сообщение отредактировал Genadi Zawidowski - Sep 7 2016, 07:57
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 7 2016, 08:10
Сообщение #3


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Оператор case подходит для такого случая. Если кнопки висят на одном порту. Если нет, можно склеить в новую переменную.
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Sep 7 2016, 08:11
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(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

}
}
Go to the top of the page
 
+Quote Post
SSerge
сообщение Sep 7 2016, 08:11
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



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

Но если на этих входах кнопки или что-то похожее, то придётся озаботиться программным устранением дребезга контактов.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
Evgeny72
сообщение Sep 7 2016, 11:18
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 4-01-14
Пользователь №: 79 899



Всем спасибо за советы! Сделал.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01383 секунд с 7
ELECTRONIX ©2004-2016