1 / 1 / 0
Регистрация: 18.04.2015
Сообщений: 25
|
||||||
1 | ||||||
Последовательное зажигание светодиодов по кнопке (ATtiny2313, Cи)18.04.2015, 16:23. Показов 8878. Ответов 58
Метки нет (Все метки)
Здравствуйте.Есть такая проблема.Написал код для подпрограммы последовательного зажигания светодиодов.Вот пример:
0
|
18.04.2015, 16:23 | |
Ответы с готовыми решениями:
58
Последовательное зажигание светодиодов по кнопке (ATmega8515, ASM) Последовательное зажигание светодиодов ATmega8 последовательное зажигание светодиодов Последовательное цикличное зажигание светодиодов |
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
||||||
21.04.2015, 23:53 | 21 | |||||
получается что последняя кнопка будет перебивать остальные
можно сделать так
0
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
|
22.04.2015, 00:06 | 22 |
В инструкции на девайс просто напишу "две и более кнопок сразу не нажимать. Лишение гарантии"
0
|
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,047
|
|
22.04.2015, 07:01 | 23 |
>получается что последняя кнопка будет перебивать остальные
А ты отслеживай не состояния кнопок, а переходы. Если реагировать у кнопок на переход 1->0 , то любая кнопка будет работать даже если остальные нажаты.
0
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
|
22.04.2015, 08:16 | 24 |
0
|
11 / 11 / 2
Регистрация: 22.02.2012
Сообщений: 115
|
|
22.04.2015, 11:20 | 25 |
0
|
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,047
|
|
22.04.2015, 12:34 | 26 |
Только по смыслу станет противоположной.
0
|
11 / 11 / 2
Регистрация: 22.02.2012
Сообщений: 115
|
|
22.04.2015, 13:09 | 27 |
0
|
1 / 1 / 0
Регистрация: 18.04.2015
Сообщений: 25
|
||||||
22.04.2015, 21:30 [ТС] | 28 | |||||
Я как понял,что в 14 строчке мы задаём наши варианты массивов,которые я прописывал в подрограмме?
Пока вот что получилось:
Добавлено через 1 час 33 минуты CodeVision выдаёт ошибку при компиляции данного кода.Что делать?
0
|
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,047
|
|
22.04.2015, 22:15 | 30 |
0
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
|
22.04.2015, 23:12 | 31 |
0
|
1 / 1 / 0
Регистрация: 18.04.2015
Сообщений: 25
|
|
22.04.2015, 23:21 [ТС] | 32 |
Я как понял,Что это другой вариант исполнения программы.Но вверху получается нужно задавать разные массивы?Если так, то что задавать в прерывании таймера и главной программа при KeyGet.Просто не могу много понять,а сильно по срокам поджимают с программой
0
|
11 / 11 / 2
Регистрация: 22.02.2012
Сообщений: 115
|
||||||||||||||||
23.04.2015, 13:16 | 33 | |||||||||||||||
"Вверху" - т.е глобально вы можете задать Ваши массивы. Существует глобальная область видимости и локальная. Если Вы объявите массивы как глобальные - то они будут доступны "во всех Ваших функциях" так сказать...
Так как вы объявили их сейчас - тоже будет работать, просто сейчас их область видимости ограничена функцией которою Вы создаете. Теперь, если Вы хотите работать через таймер, то работа с ним осуществляется через прерывание. Функция которая отвечает за прерывание - не может принимать никаких параметров, следовательно передать ей что - то можно только с помощью глобальных переменных. Используя код который написал уважаемый Витальич, Вам остается только глобально определить массивы а выводить их в порт в прерывании. в данном коде
Я предлагаю Вам завести глобальные переменные типа bool и выставлять их в функциях обработки кнопок, примерно так:
а уже в прерывании писать
Только - это мрачный быдлокод )))
0
|
1 / 1 / 0
Регистрация: 18.04.2015
Сообщений: 25
|
||||||
23.04.2015, 19:51 [ТС] | 34 | |||||
А почему мрачный?
Добавлено через 2 часа 34 минуты Написал всё вот так:
0
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
|
23.04.2015, 19:56 | 35 |
Я привел пример для компилятора GCC для своего смотрите в справке.
дословно приводите что пишет компилятор
Примерно так: interrupt [номер вектора] void имя функции обработчика прерывания(void)
0
|
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,047
|
|
23.04.2015, 20:01 | 36 |
0
|
11 / 11 / 2
Регистрация: 22.02.2012
Сообщений: 115
|
|
23.04.2015, 21:06 | 37 |
Надо объявить глобально ( Вверху по вашему )
Добавлено через 1 минуту Можете пояснить?
0
|
11 / 11 / 2
Регистрация: 22.02.2012
Сообщений: 115
|
|
23.04.2015, 22:06 | 39 |
Сгенерируйте прерывание визард мастером, он сам и таймер настроит и прерывание сделает.
Добавлено через 3 минуты ооООО Ничоси! Это я запомню! когда нужно будет еще больше оптимизировать ( запутать ) код - буду применять )))
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
23.04.2015, 22:16 | 40 |
не думаю что удастся оптимизировать, компиляторы давно уже остаток от деления на степень 2 заменяют на "И"
а деление на сдвиг тем более не получится, на это только очень начинающие попадутся
0
|
23.04.2015, 22:16 | |
23.04.2015, 22:16 | |
Помогаю со студенческими работами здесь
40
Последовательное зажигание Пяти светодиодов Последовательное зажигание светодиодов на Arduino UNO Зажигание светодиодов AT90S2313 Зажигание полос светодиодов на мк AT90S8515 Зажигание полос светодиодов на мк AT90S8515 Последовательное соединение светодиодов Последовательное гашение светодиодов на окружности с интервалом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |