Борюсь с дребезжанием кнопок, мне нужно увеличивать уставку температуры нажатием кнопки. Кучу времени потратил, чтобы разобраться, но пока до конца не уверен в решении.
Как я понял часто применяют задержку __delay_ в несколько миллисекунд. Но мне такая практика не нравится, так как если на каждую кнопку ставить задержку то контроллер только и будет что ждать и ничего не делать.
Хочу аппаратно сделать обработку нажатия кнопки, простых решений не нашел, придумал свой велосипед) Посмотрите пожалуйста, насколько такая обработка нажатия (посредство использования таймера) вообще логична и правильна? В целом сейчас все работает как и хотел, но не очень стабильно, поэтому хочется услышать ваше мнение.
unsigned char timer_00(void)
{
TCCR0 &= ~(1<<CS01);
TCCR0 |=(1<<CS02)|(1<<CS00); // делим на 1024
if (TCNT0 == 100) // считает до 100 и обнуляется
{
b1++;
TCNT0 = 0;
}
if (b1 == 30) // переменная для подсчета количества переполнений, обнуляем после 30
{
b1=0;
}
return b1; // возвращаем количество переполнений счетчика (информационно)
}
while(1)
{
unsigned int zx=timer_00();
setpos(5,1);
vivod_chisla(zx);
PORTC|=(1<<5); //ПОДТЯГИВАЮЩИЙ РЕЗИСТОР НА КНОПКУ
if(~PINC & (1<<5))// проверяем нажатие кнопки
{
if(TCNT0==50) // если кнопка нажата и значение в таймере 50, увеличить уставку на 1
{
T_ustavka++;
}
}
setpos(10,1);
vivod_chisla(T_ustavka);
}


