Свежие обсуждения
Микроконтроллеры

Индикация нажатой кнопки

1 2 5

choroh: Теперь нажимаем кнопку на другом пине, сажаем выход 1 на корпус, сжигаем порт.Нет, порт не сгорит, если вывод сконфигурировать как выход с нулевым уровнем. Это и требуется для зажигания светодиода, который подключен анодом к питанию через резистор. Получится что даже если выход с активным нулем коротить кнопкой, то ничего страшного. Конечно если ошибиться в программе и сконфигурировать вывод порта как выход с активным высоким уровнем, то да, будет гореть порт. Ну а что делать, по другому не вижу как задачу решить без "тырканья" порта, надо будет аккуратнее.

 

choroh: Нажали кнопку, засветился соответствующий светодиод, порты перестроились, как выходы. На данном пине выводится 0, на остальных 1 Перестраивать на выход надо только тот порт, по которому нажали кнопку, а остальные не трогать, т.е. они останутся входами, я здесь алгоритм chav1961 имею ввиду, на него опираюсь.

 

Не хватает выводов у МК? Почитайте тут статью "Большие возможности м...
Может поможет.

 

еще можно триггеры поставить
мк этим нагружать не следует я думаю

 

BCluster: еще можно триггеры поставить... Можно и на триггерах конечно, но вот какая штука, я специально ушел от схемы на логике из 9 корпусов и наконец-то решил заняться освоением МК, построив на нём схему, которая на логике. Так что лучше помучаюсь, но сделаю на МК, пусть трудится Ну правда, не думаю, что для МК это сверхзадача.

 

Digital: Каким образом можно сделать так, чтобы индицировать светодиодом, подключенным к выводу порта МК, нажатие кнопки, которая висит на том же выводе порта?

И зачем это ? Какое чисто практическое применение этого ? Хочешь выводы экономить добавь shift registr . Ну или регистр памяти .
Поймал кнопку - вывел /защелкнул - освободил порт и опять кнопку лови.

 

Sweet Moon: Еще в цепь светодиода обычно ставят резистор, можно кнопку поставить после него, тогда даже если порт в состоянии выхода, он будет на время нажатия нагружен не на корпус, а на этот резистор..
Сбрасывать порт МК на 0 через резистор?

 

Digital: Получится что даже если выход с активным нулем коротить кнопкой, то ничего страшного.
Если переводить на выход только текущий пин порта, то да.

 

Прикинул по вашим требованиям. Получилась такая программа. Добавил еще антидребезг кнопок. См. аттач.
Главная часть вот. Все делается в обработчике прерываний.

// обработчик прерываний по переполнению таймера
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
t_oprosa++;
if (t_oprosa < n) return;
if (knop_1 == PIND)
knop_2 = knop_1;
knop_1 = PIND;
t_oprosa = 0;
if ((PORTD != knop_2) && (knop_2 != 0xFF))
PORTD = knop_2;
DDRD=~PORTD;
}

Если интересно, есть работающий проект в Протеусе.

179065.c

 

Спасибо Zandy, подумаю над этим вариантом Но, стоп, больше не подсказывать , а то привыкну к такой поддержке. В протеусе не надо, я в vmlab-е пока (на протеус у меня антивирь ругается). П.С.: а почему в обработчике прерываний, а не в главной функции программы? У меня прерывание по переполнению уже используется, не хотелось бы его еще больше затягивать.