Новая темаОтветить Страница 1 из 1   [ Сообщений: 2 ]
Автор Сообщение
 Заголовок сообщения: Изменение кода для счетчика
СообщениеДобавлено: 08 июн 2017, 13:11 

Зарегистрирован: 02 июн 2017, 11:37
Сообщения: 1
Здравствуйте. Помогите, пожалуйста.

Нужно дополнить код:

Код:
#include <avr/io.h>

#define F_CPU 8000000L
#include <avr/io.h>
#include <util/delay.h>
//unsigned int i;???

//---------------------------------------------
void segchar (unsigned char seg)
{
   switch (seg)
   {
      case 1: PORTD = 0b11111001; break;
      case 2: PORTD = 0b10100100; break;
      case 3: PORTD = 0b10110000; break;
      case 4: PORTD = 0b10011001; break;
      case 5: PORTD = 0b10010010; break;
      case 6: PORTD = 0b10000010; break;
      case 7: PORTD = 0b11111000; break;
      case 8: PORTD = 0b10000000; break;
      case 9: PORTD = 0b10010000; break;
      case 0: PORTD = 0b11000000; break;
   }
}
//---------------------------------------------
int main(void)
{
   unsigned char i;
   unsigned butcount=0,butstate=0;
   DDRD = 0xFF;
   DDRB = 0x00;
   PORTD = 0b00000000;
   PORTB = 0b00000001; // Нулевой порт на вход, подано питание.
   while(1)
   {
      for (i=0;i<10;i++) // Начальное и конечное значения, шаг.
      {
         while(butstate==0)
         {
            if (!(PINB&0b00000001)){
               if (butcount < 5)
               {
                  butcount++;
               }
               else
               {
                  i=0;
                  butstate=1;
               }
            }
            else
            {
               if (butcount > 0)
               {
                  butcount--;
               }
               else
               {
                  butstate=1;
               }
            }
         }
         segchar(i);
         _delay_ms(1500); // Задержка 1,5 секунды
         butstate = 0;
      }

   }
}


В исходном виде он считает без нажатия кнопки и возвращается к нулю при ее нажатии. А нужно, чтобы отсчет начинался при нажатии кнопки и после остановки продолжался с той цифры, на которой отсчет был прерван, при этом не заменяя цикл for на таймер. Если правильно понимаю строка

butstate = 0; после строки со значением задержки отвечает за сбрасывание в ноль при остановке. На что ее заменить, чтобы отсчет продолжался не с нуля?

Как начать отсчет по нажатию кнопки при входе в программу (кнопка на нулевой ножке, при нажатии получается логический ноль)? В какую часть кода добавить эту новую строку? И нужно ли использовать переменную unsigned int i?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: 08 июн 2017, 17:28 
Аватара пользователя

Зарегистрирован: 02 мар 2013, 09:18
Сообщения: 1464
Откуда: Москва
Какая-то каша. Зачем нужна переменная int i?
Если нужно запоминать значения счета в памяти после отключения питания, то нужно работать с EEPROM, но при такой частоте перезаписи EEPROM быстро помрет. Поэтому нужно все сохранять в ОЗУ, а по питанию МК поставить кондер эдак на 1000мФд. Далее перед кондером поставить диод Шоттки для отсечки утечки при отключении питания. Перед диодом по плюсу питания подключить вывод МК и смотреть логическую единицу. Если появился ноль, значит питания нет. Лучше даже это повесить на ножку INT внешнего прерывания. а в обработчике прерывания уже сохранять значение в EEPROM. Ну а при старте программы вычитывать его.

_________________
Если долго мучиться, может быть получится.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Новая темаОтветить Страница 1 из 1   [ Сообщений: 2 ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
     Рейтинг@Mail.ru           Яндекс.Метрика