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

ATtiny2313: порты ввода-вывода

Добавлено: Чт ноя 10, 2016 11:48:10
evgen_kz
Всем привет!
Помогите, пожалуйста, с таким заданием.

К порту D микроконтроллера подключены кнопки (7 шт). Нажатие кнопки должно обеспечить "высвечивание" её номера (начиная от единицы) в двоичном коде на цепочке светодиодов, подключённых к порту B.

Подскажите, как это можно осуществить?

Re: ATtiny2313: порты ввода-вывода

Добавлено: Чт ноя 10, 2016 13:43:13
Vov123
Изображение

Re: ATtiny2313: порты ввода-вывода

Добавлено: Чт ноя 10, 2016 14:07:01
BOB51
evgen_kz писал(а):Всем привет!
Помогите, пожалуйста, с таким заданием.

... Нажатие кнопки должно обеспечить "высвечивание" её номера (начиная от единицы) в двоичном коде на цепочке светодиодов, подключённых к порту B.

Подскажите, как это можно осуществить?
цепочка последовательно включенных светиков на один вывод МК?
:wink:

Re: ATtiny2313: порты ввода-вывода

Добавлено: Чт ноя 10, 2016 15:04:57
alex_

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

void main()
{
  DDRB=0b01111111; // настроен на выход
  DDRD=0;          // на вход, но можно было и не писать
  while(1)
  {
    PORTB=PIND;    // считаем из D порта и скопируем в B порт
  }
}

Re: ATtiny2313: порты ввода-вывода

Добавлено: Чт ноя 10, 2016 15:11:45
ARV
alex_ писал(а):

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

void main()
{
  DDRB=0b01111111; // настроен на выход
  DDRD=0;          // на вход, но можно было и не писать
  while(1)
  {
    PORTB=PIND;    // считаем из D порта и скопируем в B порт
  }
}
жестоко :facepalm:

Re: ATtiny2313: порты ввода-вывода

Добавлено: Чт ноя 10, 2016 15:24:13
a_skr
alex_ писал(а):

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

void main()
{
  DDRB=0b01111111; // настроен на выход
  DDRD=0;          // на вход, но можно было и не писать
  while(1)
  {
    PORTB=PIND;    // считаем из D порта и скопируем в B порт
  }
}
Неправильно. Нужно же номер кнопки в двоичном коде. И было бы логично кнопки на корпус.

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

PORTD = 0x7F;
DDRB  = 0x07;
while(1)
{
  if((PIND & (1<<0)) == 0) PORTB = 1;
  if((PIND & (1<<1)) == 0) PORTB = 2;
  if((PIND & (1<<2)) == 0) PORTB = 3;
  if((PIND & (1<<3)) == 0) PORTB = 4;
  if((PIND & (1<<4)) == 0) PORTB = 5;
  if((PIND & (1<<5)) == 0) PORTB = 6;
  if((PIND & (1<<6)) == 0) PORTB = 7;
}

Re: ATtiny2313: порты ввода-вывода

Добавлено: Чт ноя 10, 2016 15:33:05
ARV
ну вот и еще один горе-студент зачёт получил...

Re: ATtiny2313: порты ввода-вывода

Добавлено: Пт ноя 11, 2016 05:57:05
evgen_kz
a_skr писал(а):
alex_ писал(а):

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

void main()
{
  DDRB=0b01111111; // настроен на выход
  DDRD=0;          // на вход, но можно было и не писать
  while(1)
  {
    PORTB=PIND;    // считаем из D порта и скопируем в B порт
  }
}
Неправильно. Нужно же номер кнопки в двоичном коде. И было бы логично кнопки на корпус.

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

PORTD = 0x7F;
DDRB  = 0x07;
while(1)
{
  if((PIND & (1<<0)) == 0) PORTB = 1;
  if((PIND & (1<<1)) == 0) PORTB = 2;
  if((PIND & (1<<2)) == 0) PORTB = 3;
  if((PIND & (1<<3)) == 0) PORTB = 4;
  if((PIND & (1<<4)) == 0) PORTB = 5;
  if((PIND & (1<<5)) == 0) PORTB = 6;
  if((PIND & (1<<6)) == 0) PORTB = 7;
}
Спасибо за помощь. Но а можно это реализовать как то графически в Algorithm Builder?
Не могу понять как можно отобразить while

Re: ATtiny2313: порты ввода-вывода

Добавлено: Пт ноя 11, 2016 07:39:10
oleg110592
evgen_kz писал(а):графически в Algorithm Builder
Изображение

Re: ATtiny2313: порты ввода-вывода

Добавлено: Пт ноя 11, 2016 09:44:31
alex_
evgen_kz писал(а):Спасибо за помощь.
Если помогло плюсани товарищу :))

Re: ATtiny2313: порты ввода-вывода

Добавлено: Сб ноя 12, 2016 11:38:35
evgen_kz
alex_ писал(а):
evgen_kz писал(а):Спасибо за помощь.
Если помогло плюсани товарищу :))
Не нажимается "+", идет загрузка и все на этом....

Добавлено after 2 minutes 14 seconds:
oleg110592 писал(а):
evgen_kz писал(а):графически в Algorithm Builder
Изображение
Спасибо за помощь.
Еще такой вопрос, а как сделать если не нажата кнопка, чтобы и светодиод не горел, т.к. горит последняя нажатая комбинация?
И необходимо, чтобы порт D был включен в режим ввода.

Re: ATtiny2313: порты ввода-вывода

Добавлено: Сб ноя 12, 2016 11:39:48
Jack_A
не '+' на клаве, а кнопка '+' в соответствующем сообщении :(
билдеровскими протезами никогда не пользовался, но по смыслу "если D = 0хFF, то 0 -> PORTB" - добавить еще одно условие.

Re: ATtiny2313: порты ввода-вывода

Добавлено: Сб ноя 12, 2016 15:17:45
oleg110592
Изображение
порт D после сброса включен в режим ввода