ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
12 июля
444020 Топик полностью
Andreas (19.09.2013 11:17 - 11:25, просмотров: 52) ответил SciFi на Вот более полный пример:
А можно и попроще, в прерывании каждые N мс:  if (Flags.Press){// было нажатие if((GETBITP(1,K4)==0))RelCnt=KEY_DEFRELCNT;else if(--RelCnt==0)Flags.Press=0; }else{// не было нажатия if((GETBITP(1,K4)==0)){ // первое нажатие if(GETBITP(2,K2)==0) KeyCode=KEY_TARA; else KeyCode=KEY_RESET; RelCnt=KEY_DEFRELCNT; Flags.Press=1; Flags.KeyPressed=1; } } Если клава матричная - чуть другой кусок, а на выходе тоже. Если нужно долгое нажатие, можно уже с периодичностью в многие сотни мс if(Flags.Press){ if(++LongPressCnt==8){ LongPressCnt=0; KeyCode|=0x80; Flags.KeyPressed=1; } }else LongPressCnt=0; А нужды в автоповторе пока не встречал, а возможные варианты интерфейса с ним отсекались еще на этапе проработки, как неудобные.