Далее в прерывании INT1 устанавливается отдельный счетчик разрядов set_up, который будет считать от 1 до 4 (если он больше, то выходим из режима установки), и признак режима установки (бит 0 регистра Flag). Если этот признак установлен, то разряд, соответствующий установленному номеру в счетчике set_up, станет мигать. Это достигается с помощью вспомогательного счетчика count (см. процедуру TIM1 по метке CONT1). В этом же месте программы отслеживается состояние Кн2 — если она нажата и удерживается, то каждую секунду происходит увеличение значения выбранного разряда на 1 в тех пределах, в которых это допускается (для единиц минут — от 0 до 9, для десятков минут — от 0 до 5, для десятков часов — от 0 до 2, причем предел единиц часов зависит от значения десятков), далее значение опять обращается в 0. Отпустив кнопку Кн2, вы фиксируете установленное значение, а нажав кратковременно на Кн1, переходите к следующему разряду. После прохождения всех разрядов, при последнем (пятом) нажатии Кн1 режим установки отменяется, т. е. бит 0 регистра Flag сбрасывается (см. процедуру по прерыванию INT1).
Немаловажная особенность этой конструкции — то, что во время установки счет времени прекращается, а при выходе из режима установки счетчик секунд устанавливается в состояние 59 (команда idi sek,59), т. е. счет сразу же начинается с новой минуты. Окончание установки — это довольно важный момент, который можно организовать по-разному, но данный способ наиболее удобен, т. к. вам достаточно дождаться окончания текущей минуты по образцовым часам, и в этот момент сделать последнее нажатие, выйдя из режима установки, чтобы довольно точно синхронизировать время. Сравните, например, как неудобно исполнена ручная установка часов в Windows, где часы продолжают идти и во время установки. А если бы мы обнуляли счетчик секунд вместо его установки в максимальное значение, то нам пришлось каждый раз устанавливать число минут на единицу большее текущего, что неудобно.
Теперь об обеспечении режима автономной работы. Программа контроллера в непрерывном цикле опрашивает значение логического уровня на выводе номер 12 (РВО, он же AIN+), и когда оно становится равным нулю, принимает меры к снижению потребления, в первую очередь за счет отключения внешних портов (см. процедуру Disable). Как только внешнее питание восстанавливается, автоматически возобновляется нормальный режим работы (Restore).
При перебрасывании компаратора в любою сторону происходит прерывание ACOMPI. В нем вывод 15 (ОС1) отключается от таймера Timer 1 и устанавливается навсегда в единичное состояние, если состояние компаратора есть логическая единица (т. е. когда истощается или отключается батарейка). Тогда двоеточие горит постоянно. И наоборот, вывод этот опять подключается к автоматическому миганию, когда компаратор перебрасывается обратно в нулевое состояние.
Детали и конструкция
В качестве источника питания мы используем внутренности блока со встроенной вилкой, с номинальным напряжением питания 10 В и током не менее 500 мА (такие продаются для некоторых игровых консолей). Напряжение на холостом ходу у него будет составлять примерно 13–14 В, под нагрузкой 130 мА оно сядет как раз примерно до 11–12 В.
В качестве кнопок Кн1 и Кн2 с легким нажатием удобно использовать обычные микропереключатели (известные в отечественном варианте под названием МП-1), но со специальной металлической лапкой-рычагом, которая предназначена для того, чтобы уменьшить усилия нажатия и увеличить зону срабатывания (вообще-то такие кнопки предназначены для использования в качестве концевых выключателей). Подойдут импортные кнопки типа SM5 (см. рис. 20.3). Тогда нам не придется портить внешний вид фалыдпанели кнопками или устанавливать их где-то сзади, а установить их прямо на плату индикаторов и просверлить в дымчатом оргстекле напротив них маленькие отверстия, через которые кнопку можно нажимать зубочисткой или другим острым предметом. Чтобы отверстие в оргстекле выглядело «фирменно», сверлить следует осторожно, на малых оборотах, затем вручную сверлом или зенковкой сделать аккуратную фаску с лицевой стороны и обработать отверстие маслом, чтобы оно не белело. Подобное решение хорошо еще и тем, что случайное нажатие кнопок — беда почти всех бытовых электронных устройств — совершенно исключено.
Рис. 20.3. Кнопка SM5 c лапкой-рычагом
После изготовления платы индикации сначала следует установить с обратной стороны разъем, а затем «обдуть» лицевую часть платы черной эмалью из баллончика, не слишком густо (достаточно одного слоя), чтобы краска не затекла в отверстия. Потом на черную плату уже монтируются индикаторы, светодиоды разделительной точки и кнопки. Светодиоды нужно выбирать, естественно, того же цвета свечения, что и индикаторы. Имейте в виду, что сама по себе характеристика «желтый» или «зеленый» еще ни о чем не говорит, — только в таблице, приведенной в главе 7, два зеленых цвета и три красных, а у разных изделий разных фирм их может быть еще больше. И чтобы разница не бросалась в глаза, приготовьтесь к тому, что покупать придется несколько разновидностей и подбирать оттенок по месту. Под индикаторы указанного типоразмера (1 дюйм) подойдут светодиоды диаметром 3 мм, обычные 5-миллиметровые будут слишком выделяться (а под меньшие индикаторы потребуются светодиоды с еще меньшим диаметром).