не вижу антидребезг...
Добавлено after 18 minutes 44 seconds:
мы делали отдельные кнопки))
https://www.youtube.com/watch?v=qWojRM-tjP0
антидребезг...
мы опрашивали кнопки отдельно в прерывании... устанавливали флаг нажатия кнопки...
interrupt [TIM0_OVF] void timer0_ovf_isr(void) // 4.000.000/8=500.000/256= цикл 1.953 ,125
{
if (PIND.5==0) flag_k0 = 1; // флаг кнопки 0 // (........) 0- Вкл(Выкл)меню
if (PIND.6==0) flag_k1 = 1; // флаг кнопки 1 // (........) 1- Выбор меню / Вкл(Выкл) LCD
if (PINB.0==0) flag_k3 = 1; // флаг кнопки 3 // (....1...) 3- Вкл(Выкл) фары
//if (PINC.4==0) flag_k4 = 1; // флаг кнопки 4 // скорость
if (PIND.7==0) flag_k5 = 1; // флаг кнопки 5 // (..1.....) 5- Вкл(Выкл) резервный аккумулятор
if (PINC.3==0) flag_k6 = 1; // флаг кнопки 6 // (.1......) 6- Вкл выгрузка
if (PINC.5==0) flag_k7 = 1; // флаг кнопки 7 // 7- круиз-контроль
}
а антидребезг делали в основной программе...
/////////////////////////////////////////////////////////////////////////
///////////////////////////////////// (....1...) 3- Вкл(Выкл) фары
//if ( (PINB.0==0) && (k3==0) ) { // цикл 31,25 ms
if ( (flag_k3) && (k3==0) ) { // цикл 31,25 ms
k3++; // счёт
// kb3 = ~kb3; // kb3 - буфер
PORTB.1=1; // звук зуммер - вкл.
k = k ^ 0b00001000; // (....1...) 3- Вкл(Выкл) фары
};
if ( (8>k3) && (k3) ) {k3++;}; // счёт
if (k3 ==

{
PORTB.1=0; // звук зуммер - выкл.
k3++;
};
///////////////////////////////
if ( (PINB.0==1) && (k3 == 9) ) {k3++;};
if (k3 > 9) {k3++;}; // счёт
if (k3 == 17) {
k3=0; // сброс
flag_k3=0; // сброс
};
/////////////////////////////////////////////////////////////////////////
хотя можно всё делать и в основной программе...
/////////////////////////////////////////////////////////////////////////
///////////////////////////////////// (....1...) 3- Вкл(Выкл) фары
if ( (PINB.0==0) && (k3==0) ) { // цикл 31,25 ms
//if ( (flag_k3) && (k3==0) ) { // цикл 31,25 ms
k3++; // счёт
// kb3 = ~kb3; // kb3 - буфер
PORTB.1=1; // звук зуммер - вкл.
k = k ^ 0b00001000; // (....1...) 3- Вкл(Выкл) фары
};
if ( (8>k3) && (k3) ) {k3++;}; // счёт
if (k3 ==

{
PORTB.1=0; // звук зуммер - выкл.
k3++;
};
///////////////////////////////
if ( (PINB.0==1) && (k3 == 9) ) {k3++;};
if (k3 > 9) {k3++;}; // счёт
if (k3 == 17) {
k3=0; // сброс
flag_k3=0; // сброс
};
/////////////////////////////////////////////////////////////////////////
но отдельно в прерывании работало стабильней))
