Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.59.154.143] |
|
Страницы: (18) « Первая ... 5 6 [7] 8 9 ... 17 18 все ( Перейти к последнему сообщению ) |
Сообщ.
#91
,
|
|
|
Цитата Можно сколько угодно. Лишь бы портов хватило. В существующем варианте 3 кнопки, для которых существует 7 комбинаций нажатий. bizar, 2.02.04, 13:42 Можно до 7 кнопок замутить? |
Сообщ.
#92
,
|
|
|
нет, 3-входа=7 возможных состояний
Добавлено в : ссори, уже ответили:) |
Сообщ.
#94
,
|
|
|
Прошу прощения за оффтопик, но тут вообще про что? А то интересно стало!
|
Сообщ.
#95
,
|
|
|
Цитата Да тут bizar пытается осваивать программирование микроконтроллеров на примере создания "мигалки" на МК семейства PIC16 NadZ, 2.02.04, 22:31 Прошу прощения за оффтопик, но тут вообще про что? А то интересно стало! Добавлено в : Цитата Нет. bizar, 2.02.04, 20:23 Типа этого? У тебя три бита(три входа: RA2,RA3,RA4, три кнопки). Сколько у трех бит возможных ненулевых состояний? Ответ: 7 Хочешь больше - добавь еще используемых входов(портов) микроконтроллера. Только придется взять микроконтроллер побольше или совмещать функции выводов в существующем. |
Сообщ.
#96
,
|
|
|
Если нельзя сделать на трёх выводах семь кнопок,
зачем нужны 7 ненулевых состояний? |
Сообщ.
#97
,
|
|
|
тебе же говорят, ты можешь отслеживать одновременное нажатие кнопок:)
|
Сообщ.
#98
,
|
|
|
Цитата Они не нужны. Они есть. Элементарная двоичная арифметика - слово размером в три двоичных разряда имеет семь состояний, когда хотя бы один бит ненулевой. Не хочешь отслеживать все возможные состояния - не отслеживай. bizar, 3.02.04, 12:26 зачем нужны 7 ненулевых состояний? |
Сообщ.
#99
,
|
|
|
Нажимаю на кнопку выполняется зажигание светодиодов,
потом нажимаю другую, в исходнике trainer, не должны выполняться другие зажигания, а будет выполняться до конца нажатие первой кнопки???? Добавлено в : potor, я смогу нажать две кнопки одновременно и что из этого выйдит? |
Сообщ.
#100
,
|
|
|
Программа опрашивает состояние всех кнопок и ждет пока не будет нажата хотя бы одна из них. Затем в соответствии с их состоянием выполняет некое действие в течение некоторого времени, затем снова опрашивает состояние и т.д.. Цитата Что напишешь в соответствующем case, то и выйдет. bizar, 3.02.04, 15:43 я смогу нажать две кнопки одновременно и что из этого выйдит? |
Сообщ.
#101
,
|
|
|
trainer, почему та сказал "нет" , про схему
#93 там-же есть одновременное нажатие 2 кнопок, только в одной кнопки? |
Сообщ.
#102
,
|
|
|
Потому, что это не решение. В схеме из #93 можно все равно нажать несколько кнопок. Так зачем такой огород городить? Если 3 кнопки обеспечивают то же самое.
|
Сообщ.
#103
,
|
|
|
В #include, нужно указать библиотеку, у меня IAR (PIC), (potor у тебя есть IAR для пик (ты его скачал или нет)) я не знаю какие библиотеки для чего служат, укажите какие/для чего?
Фрагменты выделенные с двух сторон : Можно ли описывать так или нужно ставить break, мне надо одновременно чтобы порты RA и RB гасли светодиоды? #include<имя файла, где описан твой пресловутый порт RB, RA> main() { volatile unsigned char Keys; unsigned char mask; unsigned int i; TRISA = 4 | 8 | 16; // RA2,RA3,RA4 настраиваем на вход PORTA = 0xff; TRISB = 0; while(1) { PORTB = 0xff; do { tick(); // не будеи опрашивать кнопки слишком часто Keys = (~PORTA) & (4|8|16); // состояние кнопок на RA2-RA4. 1-нажата } while(Keys == 0); Keys >>= 2; // нормализуем(сдвигаем) mask = 1<<Keys; // битовая маска инвертируемого вывода порта B for( i=1000; i != 0; i-- ) { switch( Keys ) { case 1: PORTA = 0x1d; //Если Keys равен 1 горит светодиод на RA1 break; PORTA = 0x1c; //горит RA1 и RA0 break; PORTB = 0x7f; // горит RB7 с RA1 и RA0 break; PORTB = 0x3f; // горит RB7, RB6 (RA1 - 0) break; PORTB = 0x1f; // горит RB7 - RB5 (RA1 - 0) break; PORTB = 0xf; // горит RB7 - RB4 (RA1 - 0) break; PORTB = 0x7; // горит RB7 - RB3 (RA1 - 0) break; PORTB = 0x3; // горит RB7 - RB2 (RA1 - 0) break; PORTB = 0x1; // горит RB7 - RB1 (RA1 - 0) break; PORTB = 0x0; // горит RB7 - RB0 (RA1 - 0) //горят все светодиоды break; :unsure: PORTB = 0xff; // гасим светодиоды на RB PORTA = 0xff; // гасим светодиоды на RA :unsure: break; PORTB = 0xfe; // горит RB0 break; PORTB = 0xfc; // горит RB0, RB1 break; PORTB = 0xf8; // горит RB0 - RB2 break; PORTB = 0xf0; // горит RB0 - RB3 break; PORTB = 0xe0; // горит RB0 - RB4 break; PORTB = 0xco; // горит RB0 - RB5 break; PORTB = 0x80; // горит RB0 - RB6 break; PORTB = 0x0; // горит весь RB порт break; PORTA = 0x1d; // горит RA1 (RB0 - 7) break; PORTA = 0x1c; // горит RA0, RA1 (RB0 - 7) break; :unsure: PORTA = 0xff; // гасим RA POTRB = 0xff; // гасим RB :unsure: break; case 2: // делаю в виде бегущей туда сюда точки PORTA = 0x1d; // Если Keys равен 2 горит светодиод на RA1 break; PORTA = 0x1e; //горит светодиод на RA0 break; :unsure: PORTA = 0xff; // гасим RA порт PORTB = 0x7f; //горит светодиод на RB7 :unsure: break; PORTB = 0xbf; //горит светодиод на RB6 break; PORTB = 0xdf; //горит светодиод на RB5 break; PORTB = 0xef; //горит светодиод на RB4 break; PORTB = 0xf7; //горит светодиод на RB3 break; PORTB = 0xfb; //горит светодиод на RB2 break; PORTB = 0xfd; //горит светодиод на RB1 break; PORTB = 0xfe; //горит светодиод на RB0 break; PORTB = 0xfd; //горит светодиод на RB1 break; PORTB = 0xfb; //горит светодиод на RB2 break; PORTB = 0xf7; //горит светодиод на RB3 break; PORTB = 0xef; //горит светодиод на RB4 break; PORTB = 0xdf; //горит светодиод на RB5 break; PORTB = 0xbf; //горит светодиод на RB6 break; PORTB = 0x7f; //горит светодиод на RB7 break; :unsure: PORTB = 0xff; // гасим RB порт PORTA = 0x1e; //горит светодиод на RA0 :unsure: break; PORTA = 0x1d; //горит светодиод на RA1 break; } PORTB ^= mask; // инвертируем бит tick(); // делаем небольшую задержку } } } tick() // делаем задержку времени { for (unsigned int i = 0xffff; i!=0; i--); for (unsigned int i = 0xffff; i!=0; i--); for (unsigned int i = 0xffff; i!=0; i--); for (unsigned int i = 0xffff; i!=0; i--); } |
Сообщ.
#104
,
|
|
|
Слишком уж много у тебя строчек в switch.
то есть хочется сделать бегущий огонь? #include <pic16f84.h> /* подпрограмма временной задержки */ void tick(void) { unsigned int i; for ( i = 0xffff; i!=0; i--); for ( i = 0xffff; i!=0; i--); for ( i = 0xffff; i!=0; i--); for ( i = 0xffff; i!=0; i--); } /* Эта подпрограмма зажигает нулем светодиод на определенном выводе */ void FlashPin(unsigned char pin_code){ switch(pin_code) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: /* 0-7 - выводы порта B */ PORTB &= 0xfe<<pin_code; break; case 8: case 9: /* 8,9 - выводы порта A(RA0,RA1) */ PORTA &= 0xfe<<(pin_code-8); } } /* Эта подпрограмма гасит все светодиоды */ void TurnOffPins(void) { PORTB = 0xff; PORTA |= 3; } /* основная программа */ main() { volatile unsigned char Keys; unsigned char counter; unsigned char i; unsigned char direction; TRISA = 4 | 8 | 16; // RA2,RA3,RA4 настраиваем на вход PORTA = 0x1c; TRISB = 0; while(1) { TurnOffPins(); /* гасим все светодиоды */ do { tick(); // не будем опрашивать кнопки слишком часто Keys = (~PORTA) & (4|8|16); // состояние кнопок на RA2-RA4. 1-нажата } while(Keys == 0); Keys >>= 2; // нормализуем(сдвигаем). Теперь: // бит 0 - RA2, // бит 1 - RA3, // бит 2 - RA4. counter = Keys; direction = -1; /* направление "движения" */ for( i=1000 ; i != 0 ; i-- ) { if( counter == Keys ) { // прошли круг - начанаем двигаться в другую сторону direction = -direction; } TurnOffPins(); /* гасим все светодиоды */ FlashPin(counter); /* зажигаем определенный */ counter += direction; /* в следующий раз будем зажигать другой */ if( counter == 0xff ) { /* закольцовываем "снизу" */ counter = 9; } if( counter == 10 ) { /* закольцовываем "сверху" */ counter = 0; } tick(); /* пауза - чтобы светодиод погорел немного */ } } } Что будет не понятно - отвечу. |
Сообщ.
#105
,
|
|
|
Цитата potor у тебя есть IAR для пик (ты его скачал или нет) скачать то я его скачал, два раза пытался, не проходит у меня его установка, причем на обоих домашних машинах:(( |