
определил на чтение одну ногу а припаялся к другой ( соседней )

клава работает.
имхо, длительность импульсов сканирования не суть важна, главное чтобы опрос клавы производился не реже раза в четверть секунды

Отправлено 18 Ноябрь 2003 - 14:09
Отправлено 18 Ноябрь 2003 - 15:37
Отправлено 19 Ноябрь 2003 - 00:41
Отправлено 19 Ноябрь 2003 - 01:11
Отправлено 19 Ноябрь 2003 - 01:47
#pragma interrupt_handler timer0_ovf_isr:10 void timer0_ovf_isr(void) { u8 i, c; TCNT0 = 0x83; //reload counter value // опрашиваем кнопки c = PIND; for (i = 0; i < BUTTON_COUNT; i++) { struct button * b = buttons+i; if ((c&buttonMask[i]) != b->value) { // состояние кнопки изменилось b->value = c&buttonMask[i]; b->processed = 0; b->ticks = 0; continue; } // состояние кнопки осталосьь тем же if (b->processed) continue; // кнопка уже обработана if (++(b->ticks) > 4) { // состояние кнопки не менялось уже 1ms, можно ее и обработать u8 cl = i >> 1; // номер кулера b->processed = 1; if (b->value) // если кнопку отпустили - ничего не делаем continue; if (i & 1) { // '+' if (coolers[cl] < 8) coolers[cl]++; } else { // '-' if (coolers[cl] > 0) coolers[cl]--; } // вывести значение на светодиоды PORTC = ledMask[coolers[cl]]; // TODO: записать в соответствующий регистр } } // TODO: включить/выключить все кулеры output = coolers[0] > phase ? 0xFF : 0xBF; phase++; phase &= 7; PORTB = output; }
Отправлено 19 Ноябрь 2003 - 13:03
Отправлено 19 Ноябрь 2003 - 18:32
Отправлено 20 Ноябрь 2003 - 11:13
Отправлено 20 Ноябрь 2003 - 12:22
Отправлено 20 Ноябрь 2003 - 17:28
Цитата
Отправлено 21 Ноябрь 2003 - 22:51