ТАВРОФОРУМ

Вернуться   ТавроФорум > Не автомобильные темы > Решение бытовых проблем > Компьютеры

Компьютеры Уголок для решения бытовых компьютерных проблем.

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.10.2013, 21:30   #11
Kino
 
Kino
 
Адрес: Киев, м.Дарница
Возраст: 44
Сообщений: 3,660
Машина: Slavuta 1.3Li
Длина: 43480мкм
Диаметр: 38мм
Отправить сообщение для Kino с помощью ICQ
По умолчанию

Блин. Надо найти время и запилить вам этот проект. Осталось узнать как.

Вы на функции программу не перевели, у Вас остался goto. Это не принципиально, но и не функция.
Немного теории (совсем чуть-чуть). Регистры портов в авр делятся на три типа, направление, выход и вход, называються соответственно DDRx, PORTx и PINx.
Т.е. чтобы выдать на порт значение используем PORT, чтобы считать - используем PIN.

Давайте так.
Создайте функцию. Типа char GetEncoder(void);

И в ней, вместо этого, вызывайте её:

m: if (PORTB3==0)
{
PORTD=0b00001000;
}
else if(PORTB3==1 && PORTB0==1 && PORTB1==1)
{
PORTD=0b00000001;
}
else if(PORTB3==1 && PORTB0==1 && PORTB1==0)
{
PORTD=0b01000000;
}
else if(PORTB3==1 && PORTB0==0 && PORTB1==0)
{
PORTD=0b00100000;
}
else if(PORTB3==1 && PORTB0==0 && PORTB1==1 && PORTB2==0)
{
PORTD=0b00000010;
}
else if(PORTB3==1 && PORTB0==0 && PORTB1==1 && PORTB2==1)
{
PORTD=0b00000100;
}
else
{
goto com;
}
}
}


char GetEncoder(void)
{

if (PINB & 0x80 == 0)
{
PORTD=0b00001000;
return 1; // выход с флагом 1, что сработал по "if (PINB & 0x80 == 0) "
}

// иначе там единица, продолжаем

switch (PINB & 0x0F)
{
case 0x0B:
PORTD=0b00000001;
break;
case 0x09:
PORTD=0b01000000;
break;
case 0x08:
PORTD=0b00100000;
break;
case 0x0A:
PORTD=0b00000010;
break;
case 0x0E:
PORTD=0b00000100;
break;

default: // если ничего не совпало - возвращаем 2.
return 2;
break;
}




в цикле
while(1)
{
char x;

x = GetEncoder();


if (x == 1) знач вернулся вернулся по "if (PINB & 0x80 == 0) "
или так
while (GetEncoder()) == 2) {} // т.е. вызываем GetEncoder, пока не вернется что-то отличное от двойки.

} // скобка конца while()
Kino вне форума   Ответить с цитированием
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 16:46. Часовой пояс GMT +3.


Перевод: zCarot Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.