Обсуждаем контроллеры компании Atmel.
Ответить

Чтение состояния порта через SWITCH

Сб окт 07, 2023 13:23:21

Здравствуйте. Как мне в этом коде прочитать состояние кнопок через switch? Помогите пожалуйста. Пробовал:
Код:
i = PINA;
switch(PINA, i){
......


не сработало.
Сам код:
Спойлер
Код:
#include <avr/io.h>

int main(void)
{
   
   DDRA = 0x00;
   PORTA = 0xFF;

   while (1)
   {
      if (bit_is_clear(PINA, 0))
      { NUM = 'A';}
      
      else if (bit_is_clear(PINA, 1))
      {NUM = 'B';}

      else if (bit_is_clear(PINA, 2))
      {NUM = 'C';}

      else if (bit_is_clear(PINA, 3))
      {NUM = 'D';}

      else if (bit_is_clear(PINA, 4))
      {NUM = 'E';}

      else if (bit_is_clear(PINA, 5))
      {NUM = 'F';}

      else if (bit_is_clear(PINA, 6))
      {NUM = 'G';}

      else if (bit_is_clear(PINA, 7))
      {NUM = 'K';}
      else { NUM = 0;}

      if (bit_is_clear(PINB, 0))
      {NUM = 'L';}
      
      else if (bit_is_clear(PINB, 1))
      {NUM = 'M';}
      
      else if (bit_is_clear(PINB, 2))
      {NUM = 'N';}
      else { NUM = 0;}
   }
}



И если подключить последние три кода с PINB то перестаёт работать весь код.

Re: Чтение состояния порта через SWITCH

Сб окт 07, 2023 14:01:53

Syntax
Код:
switch(expression) {
  case x:
    // code block
    break;
  case y:
    // code block
    break;
  default:
    // code block
}

Контролируйте состояние обоих портов одновременно. Но возникнет множество логических операций. Вариант: поэтому бы присвоил одному 16 bit переменную состояние двух портов и в соответствии с еe значением -> значение NUM.

напр.
Код:
uint16_t st = ((0b00000111 & PINB) << 8) | PINA;

switch (st) {
  case 0b0000011111111110: NUM = 'A'; break;
  case 0b0000011111111101: NUM = 'B'; break;
  ...
  case 0b0000001111111111: NUM = 'N'; break;
  default: NUM = '0';
}

Если удобнее, используйте шестнадцатеричный формат. Я образно написал код в BIN для наглядности.

Re: Чтение состояния порта через SWITCH

Сб окт 07, 2023 15:49:48

Syntax
Код:
switch(expression) {
 .....

Спассибо

Re: Чтение состояния порта через SWITCH

Сб окт 07, 2023 19:23:21

Удивительно что такие как veso74 отвечают на вопросы... Наверно, времени много, да и психика в порядке. Это нужно только приветствовать!)
Ответить