ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 марта
900428 Топик полностью
Гудвин, волшебник (30.01.2019 21:39, просмотров: 283) ответил Ксения на Да у меня собственно уже есть такой проект, для которого ног мне катастрофично не хватает. Даже на STM32F429 глаз положила (ссылка №1) только из-за того, что у него ног еще больше, однако дорого показалось, тогда как моя на STM32F407 (ссылка №2)
Грусть. Не тот грусть, который в корзинку кладут, а тот грусть, который тоска. Не тот тоска в который гвоздь забивают, а тот тоска, который грусть :) Вот мой простейший код для для AVR, который возвращает код нажатой кнопки матрицы 6*8. В прерывании. Если не допустимы задержки внутри, можно задействовать прерывание таймера и флаги в глобальных переменных. Код сляпан на скорую руку, но вполне рабочий (это радио пульт на mega8). Мега этим прерыванием пробуждается из спячки... // Pin change 16-23 interrupt service routine interrupt [PCINT2] void pin_change_isr2(void) { unsigned char i; unsigned char b; volatile unsigned char cod; delay_ms(5); // антидребезг b=PIND; if(b == 0xFF) return; // прерывание было при отпускании кнопки - выходим без обработки for (i=0;i<8;i++) { if (!(b & 1)) break; b=b>>1; } cod=i; PORTD = 0; // меняем порты D и С местами DDRD = 0xFF; DDRC = 0; PORTC = 0x7F; delay_ms(5); // антидребезг b=PINC; for (i=0;i<6;i++) { if (!(b & 1)) break; b=b>>1; } DDRD=0x00; // возвращаем порты D и С в исходное состояние PORTD=0xFF; PORTC=0x00; DDRC=0x7F; cod=(i*8)+cod; cod+=1; // чтобы код начинался в единицы //putchar(cod); // отладочный вывод в отладчик stk500 PCIFR=0x04; // чистим флаг прерывания перед выходом }