Поизвращался еще над термометром. Теперь термометр имеет настройки:
1. Время индикации(задержка перед засыпанием) (5-90секунд с шагом 5с).
2. Отображать/не отображать температуру измеренную до засыпания, после просыпания(off/on). Если off - после просыпания до первого измерения текущей температуры(в течении 1сек на экране ---), если on в течении первой секунды отображается предыдущая температура.
3. Периодичность автоматического измерения температуры(0-60мин с шагом 1мин) 0 = автоматическое измерение выключено.
Вход в настройки по длинному(более 1сек) нажатию на кнопку в режиме отображения температуры. Изменение настраиваемого параметра - короткое нажатие на кнопку. Переход к настройке следующего параметра и запоминание параметра - длинное нажатие. Значения сохраняются во флешке. Если в течении 10сек не менять значение - происходит автоматический выход без сохранения.
Кроме этого термометр запоминает мин/макс температуру. Для просмотра в режиме отображения температуры - короткое нажатие на кнопку - мин значение, повторное нажатие -макс значение, следующее нажатие - выход в режим отображения температуры. Если в течении 10 сек ничего не нажимать - выйдет автоматом. При отображении мин/макс температуры длинное нажатие - сброс соответствующего значения.
Теперь об автоматическом измерении и периодичности. Если значение - 0, автоматическое измерение не проводится. Т.е. термометр просыпается только по нажатию кнопки. Соответственно мин и макс значения запоминаются только в моменты ручного просыпания. Если хочется чтобы термометр сам периодически замерял температуру(для корректного запоминания мин/макс значений) - выставляем значение от 1-до 60(минуты). Тогда с заданным периодом термометр будет просыпаться и замерять температуру и засыпать. Во время измерения в автоматическом режиме температура на экран не выводится(на экране на время измерения отображаются все точки... чисто для контроля, что все пучком - работает

)
Выключение режима автоматического измерения служит для продления жизни батареек. В режиме когда автоматическое измерение выключено микропроцессор засыпает в Power-Down, т.е. реагирует только на внешнии прерывания, но при этом кушает меньше 1мкА. В режиме автоматических измерений уже в Power-Down заснуть нельзя - нужна работа таймера. Поэтому микропроцессор засыпает в режиме Idle. Чтобы как-то еще уменьшить потребление, частоту процессора снижаю на время спячки до 31250Гц... Потребление в Idle в таком режиме составляет порядка 0.1мА
Т.е. алгоритм примерно такой:
Перед спячкой проверяется значение переода автоматического измерения. Если 0 - засыпаем в Power-Down. Если больше нуля - уменьшаем частоту до 31250, выключаем таймерТ0(отвечает за периодичность измерений в нормальном режиме),включаем таймер(Т1), который разбудит через заданное время для автоматического измерения. и засыпаем процессор в Idle. Далее, когда срабатывает таймер, повышаем частоту до нормальной(1МГц) измеряем и опять по кругу(снижение частоты, перезапуск таймера(Т1), спячка ). Если микропроцессор будится после Idle по кнопке - опять делается почти тоже самое: повышение частоты до нормальной, стопорение таймера (Т1 - в данном случае отвечает за автоматическое пробуждение из Idle), запуск таймера Т0(отвечает за периодичность замеров температуры в режиме отображения) и т.д.
Все эти извращения с понижением частоты делал с целью уменьшения потребления, т.к. хочу питать от батареек. Разводки платы пока нет, т.к. собрано пока все на макетке.
Можно также все испытать в протеусе, если взять модель в из предыдущего варианта. Единственное - нужно в модели выствить фузе бит предделителя на 8(CKDIV8), т.к. иначе протеус будет глючить с записью во флеш. Если делать в "железе" - то настройка фьюзов по дефолту(т.е. как с завода) - 8МГц от внутреннего генератора и предделитель на 8(CKDIV8)... хотя если собирать в "железе" на фьюз предделителя пофиг, т.к предделитель все равно настраивается в самой программе.
ЗЫ. Код во вложении. (Наконец-то нашел как тут вложения прикручиваюся

)