Насколько помню сюда:
Спойлер
Код: Выделить всё
// -------------------------------- чтение ADC ---------------------------------------------
// Read the 8 most significant bits of the AD conversion result
unsigned char read_adc(unsigned char adc_input) {
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
} //---------------------------------------------------------------------------------------
// -------------------------- декодирование кнопок -----------------------------------------
unsigned char key_decode(unsigned char key) {
if (key <= 3) return KEY_PLUS; // = 0;
if ((key >= 124) && (key <= 130)) return KEY_MINUS; // = 1/2 от 255
if ((key >= 167) && (key <= 173)) return KEY_SEC; // = 2/3 от 255
if ((key >= 188) && (key <= 194)) return KEY_SET; // = 3/4 от 255
if ((key >= 201) && (key <= 207)) return KEY_K; // = 4/5 от 255
if ((key >= 210) && (key <= 215)) return KEY_AL1; // = 5/6 от 255
if ((key >= 216) && (key <= 222)) return KEY_AL2; // = 6/7 от 255
return 0;
} //---------------------------------------------------------------------------------------
// ---------------------------- чтение состояния кнопок ------------------------------------
Вставлять нужно в "декодирование кнопок". Причём от своего значения делаете плюс/минус 3...5 единичек. Тоесть если у Вас к примеру получилось значение 127, вписываете if ((key >=
124) && (key <=
130)) return KEY_MINUS;
Причём делитель из сопротивлений делал таким: 6,5k+680Om+1,5k+2,2k+3,3k+10k+56k Что позволило ещё больше разнести значения кнопок, друг от друга.
----------------------------------------------------------------------
Разобрался, спасибо!
Первая колонка показания из протеус, вторая показания моих часов.
______1колонка___2колонка
кн не наж = 255 - 255
_______+ = 000 - 000
_______ - = 128 - 128
_____СЕК = 170 - 171
_____УСТ = 192 - 193
_____КОР = 204 - 206
______Б1 = 213 - 214
______Б2 = 219 - 220
А вот исходник, который у меня. от 11.08.2011
// -------------------------- декодирование кнопок -----------------------------------------
unsigned char key_decode(unsigned char key) {
if (key <= 3) return KEY_PLUS; // = 0;
if ((key >= 124) && (key <= 130)) return KEY_MINUS; // = 1/2 от 255
if ((key >= 167) && (key <= 173)) return KEY_SEC; // = 2/3 от 255
if ((key >= 188) && (key <= 194)) return KEY_SET; // = 3/4 от 255
if ((key >= 201) && (key <= 207)) return KEY_K; // = 4/5 от 255
if ((key >= 210) && (key <= 215)) return KEY_AL1; // = 5/6 от 255
if ((key >= 216) && (key <= 222)) return KEY_AL2; // = 6/7 от 255
return 0;
} //---------------------------------------------------------------------------------------
Вобщемто расброс не большой. Заметил что, от хорошей работы часов, редко лезешь в них. От этого застоя, появился в кнопках дребезг контактов. Понажимал, расшевилил и все заработало.
Ради интереса, назрел следующий вопрос, делитель по каким критериям расчитывать?
Вот этот делитель, 6,5k+680Om+1,5k+2,2k+3,3k+10k+56k: полагаю расчитан под этот исходник, каким считается первый резистор 6.5к или 56к, если смотреть от + 5 по питанию?
Во время поиска небольших радиодеталей, упавших со стола, вероятность их обнаружения прямо пропорциональна размеру детали и обратно пропорциональна их значению для завершения работы