Показать сообщение отдельно
Непрочитано 16.04.2011, 15:04  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Ну и писать программку я начал с этой функции:
PHP код:
//Сканирование кнопки
void    key_scan(void)
{
    if  
KeyPress                //Если кнопка нажата
    
{                            //Проверим, давно ли её нажали
        
if (KeyNew)             //Если флаг установлен (значит "давно")
        
{                                          
            
count++;          //Увеличиваем счётчик задержки
            
if  (countlongkey//Если длинное нажатие
            
{                                 
                
bright_ch();    //Начинаем менять компаратор ШИМ
                
count--;        //Декремент счетчика(увеличивать-то его больше никчему)
                
PWM_on 1;
            }                   
//Выход
        

        else                    
//Нажали только что, на это и укажем
        
{   
            
KeyNew 1;         //Устанавливаем флаг
        
}                       //Выход
    
}   
    else                        
//Если кнопка не нажата Это может означать,  
    
{       //что её и не нажимали или только что отпустили, вот это и проверим даьше
        
if (KeyNew)             //Если флаг установлен (только что отпустили)
        
{                       //Проверим, до скольки успели досчитать
            
if (countlongkey)  //Если меньше длинного(короткое нажатие)
            
{//Можно было и объединить, но не люблю я двойные условия, МК их всё равно по очереди сделает      
                
if (countshortkey//Если больше минимального (короткое, но не дребезг)
                
{                     
                    
led_on_off();   //Включаем/выключаем фонарь
                
}               //Иначе - Это был дребезг
            
}
        }                       
        
clr_var();              //Сброс переменных
    
}                           //Выход  
    
KeyEXE 0;                 //Запрет опроса кнопок   
    #asm("sleep")               //Усыпляем МК

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

Сообщение от poligon_85 Посмотреть сообщение
Кстати вылезла проблема максимальной яркости.
Сейчас сделаем. Надо немного дописать функцию изменения яркости...

Последний раз редактировалось omercury; 16.04.2011 в 15:52.
omercury вне форума