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

Обсуждаем контроллеры компании Atmel.
Ответить
grachevvlad2023
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Сб окт 07, 2023 09:59:13

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

Сообщение 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 то перестаёт работать весь код.
Реклама
veso74
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

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

Сообщение 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 для наглядности.
Реклама
grachevvlad2023
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Сб окт 07, 2023 09:59:13

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

Сообщение grachevvlad2023 »

[uquote="veso74",url="/forum/viewtopic.php?p=4486022#p4486022"]Syntax

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

switch(expression) {
 .....
[/uquote]
Спассибо
OKF
Это не хвост, это антенна
Сообщения: 1405
Зарегистрирован: Вт июн 07, 2011 08:03:18

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

Сообщение OKF »

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

Вернуться в «AVR»