Всем доброго времени суток. Помогите пожалуйста, или подскажите как реализовать следующее. Программа при нажатии на кнопки зажигает, а последующее тушит светодиоды на портах PB0 и PB1. Как сделать чтобы при подачи питания оба светодиода зажглись и потухли на пример через пару секунд и перешла в ожидание нажатия кнопок? Заранее благодарен.
Спойлер#include<avr/io.h>
#define F_CPU 128000UL
#include<util/delay.h>
//void _delay_ms
void wait(int time)
{
volatile int i;
for(i=0; i<time; i++);
}
int main(void)
{
char k1state, k2state;
Как сделать чтобы при подачи питания оба светодиода зажглись и потухли на пример через пару секунд и перешла в ожидание нажатия кнопок?
Т.е., алгоритм получается такой:
1. При подаче питания оба светодиода загораются на 2 с., после чего гаснут.
2. Далее нажатие кнопки включает оба светодиода, повторное тушит, и так далее.
Так?
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Доброго времени суток. Все верно, после включения, загораются оба светодиода. Далее алгоритм верный, только не оба светодиода, а по отдельности, каждый светодиод управляется своей кнопкой. В архиве файл протеуса и прошивка, можно посмотреть как работает.
Нажимаешь на кнопку зажигаешь диоды и обнуляешь счетчик таймера, а там хоть по совпадению, хоть по переполнению делай. Как счетчик достиг значения=2сек. диоды туши. Программа линейна и никуда возвращаться не надо.
DDRB |=(1<<0)|(1<<1); //0 и 1 порт на выход, остальные вход...
POPTB |=(1<<0)|(1<<1); //выводим на порт 0 и 1 еденицу
wait(100); //подбираем нужную задержку в скобках
POPTB &=~(1<<0)|(1<<1); //выводим на порт 0 и 1 ноль
wait(100); //подбираем нужную задержку в скобках
// и далее...
int main(void)
{
char k1state, k2state;
...........
Во первых зачем функция wait
используй библиотеку <delay.h>, там есть функция delay_ms(<задержка в миллисекундах>);
во вторых основная функция ничего не возвращает, поэтому правильно писать void main(void)
и самое главное, твой код здесь не при чем. Проверь, на работу с какой частотой настроен твой компилятор, она должна совпадать с частотой установленной в твоем коде и оптимизация должна быть минимальной, оптимизировать надо по скорости.
для твоего случая частоты в 1МГц за глаза хватит, не думаю, что на rc цепочке мк корректно раскрутит 12 МГц, без внешнего источника тактования.
судя по настройке там уже 128 кГц, для лампочек и кнопок стабилизация частоты не имеет смысла.
можно и делай использовать можно и своей функцией, тут кому как удобнее, да и не в задержке собственно проблема.
А вообще делай при возможности лучше заменять, сам стараюсь по минимуму ее использовать