akulov писал(а):Барсик писал(а):.....как отличить короткое нажатие от длинного.
Интересный пример, буду пробовать! Что будет не ясно-напишу.
С кодом разобрался, приспособил под себя. Отрабатывает и одиночное нажатие, и повтор, но только если удерживаешь кнопку. Я, так думаю, что и с АЦП получится. Но есть один нюанс. Как сделать, чтобы при одиночном нажатии на кнопку и включенной переменной find=1, кнопка отрабатывалась постоянно до изменения find (find=0)? Пробовал цикл while, но потом, почему то, не могу из него выйти. И вставлял его в разные участки кода. Фрагмент переделанного кода:
Код: Выделить всё
void key3ExecuteShort(void) // обрабатывает короткое нажатие кнопки 3
{ Tuner ();
Key=3;
}
и сам Key=3:
Код: Выделить всё
void Tuner (void)
{
work=Key;
switch(work){
case 3:{ // увеличение частоты
//-------- Это для двух диапазонного
if(FFreq<=7400)StepFreq=3;
if(FFreq>=8750)StepFreq=5;
if(FFreq==7400){FFreq=8750;StepFreq=5;}
if(FFreq>=10800)FFreq=6576;// некрасиво, но КОРОТКО
FFreq=FFreq+StepFreq;
DLL_Freq(FFreq,StepFreq);
ShowFreq(FFreq);
work=0;
break;}
Остальное не менял.
И, попутно, вопрос: с точки зрения загрузки контроллера и быстродействия что предпочтительней, обработка кнопок через АЦП, или через порты?
И еще, на какой тактовой частоте лучше работать, 8 или 16мГц? Просто в Протеусе при большей частоте загрузка ЦП увеличивается в 2 раза.
Может, вопросы и глупые, но на них меня "заело".