Страница 1 из 1

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

Добавлено: Сб окт 07, 2023 13:23:21
grachevvlad2023
Здравствуйте. Как мне в этом коде прочитать состояние кнопок через 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
veso74
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
grachevvlad2023
[uquote="veso74",url="/forum/viewtopic.php?p=4486022#p4486022"]Syntax

Код: Выделить всё

switch(expression) {
 .....
[/uquote]
Спассибо

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

Добавлено: Сб окт 07, 2023 19:23:21
OKF
Удивительно что такие как veso74 отвечают на вопросы... Наверно, времени много, да и психика в порядке. Это нужно только приветствовать!)