про несколько нажатых кнопок - этот алгоритм их различит только если все они находятся в одной строке или в одном столбце, иначе запутается.
допустим, я нажал кнопку на пересечении 1-го столбца и 1-й строки и 2-го столбца 3-й строки. на строках я получу 1100, на столбцах 1010 - и эта комбинация никакими другими комбинациями кнопок не повторится. так что 2 одновременно нажатые кнопки ВСЕГДА будут определены корректно. на счет 3-х уже не уверен, но могу вечером поэкспериментировать в протеусе
что-то мне подсказывает, что все будет нормально вплоть до 4 одновременных кнопок, а вот больше - уже не будет.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
что интересно... "сканкод" при сканировании клавиатуры 4х4 набирается на 2 байта, а при координатном умещается в 1байт. _____ 1;1 и 2;3 != 1;3 и 2;1. а сканкод будет одинаков == 1100;1010
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Последний раз редактировалось Ivanoff-iv Чт фев 21, 2019 07:35:25, всего редактировалось 1 раз.
да... вы правы. погорячился я. но все равно неплохой алгоритм. и разных комбинаций поддерживает достаточно для практического применения. во всяком случае, свою нишу в применении вполне может иметь
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
согласен - алгоритм изумительный (и для матричных клавиатур, в которых нет диодов подходит даже лучше), потому и считаю, что у него должно быть название пс: я написание примера поправил, а то не очень понятно выглядело...
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Клавиатурные матрицы могут сканироваться несколькими способами. Если может быть нажата только одна кнопка, то выбирается быстрый способ сканирования, при котором одновременно выбираются (устанавливается низкое значение) все строки, и считывается состояние столбцов. После этого выбираются все столбцы, и считывается состояния строк. Возвращенные значения столбца и строки объединяются в код, идентифицирующий нажатую кнопку. Этот метод и используется в данном примере применения...
Слушайте, что я накропал вчера ночью при колеблющемся свете электрической лампы: «Я помню чудное мгновенье, передо мной явилась ты, как мимолетное виденье, как гений чистой красоты». Правда, хорошо? Талантливо? И только на рассвете, когда дописаны были последние строки, я вспомнил, что этот стих уже написал А. Пушкин. Такой удар со стороны классика! А?
Это что. Когда то пишу какую-то программулину и чувствую что-то знакомое... Заподозрил. И действительно, оказалось что я это уже писал когда то... Ну, а Пушкин - это само-собой.)))
Компиляция проходит гладко, вижу свою заветную строку. Решаю провести эксперимент - удаляю приведение указателя к char: printf("%s", ptr) Компилирую, ожидаю увидеть ошибку, но нет, все проходит успешно, опять вижу заветную строку. Это норма ? Дело в том, что я вывожу через спецификатор %s, и оно все равно приводится к char ?
Последний раз редактировалось Пока_без_кота Пн мар 04, 2019 21:10:40, всего редактировалось 1 раз.
Компилирую, ожидаю увидеть ошибку, но нет, все проходит успешно, опять вижу заветную строку. Это норма ?
Да. Спецификатор %s указывет функции printf на то, что ей параметром передается указатель на строку. Так она его и интерпретирует. Хоть в указатель на int его преобразуйте - от этого его содержимое не изменится.
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Тут надо понимать одно - любой указатель, неважно на что указывающий, имеет одну ширину памяти. А void* - универсальный указатель, для каких-либо промежуточных результатов. Либо для неизвестного типа. И, что самое интересное. В функциях void означает "пустоту". Ничто. ... А вот указатель на void допустим. Когнитивный диссонанс какой-то получается. Особенно у новичков
в чем смысл использования отдельного стека данных? многие компиляторы отводят под это дело кусочек ОЗУ... а почему не использовать общий стек? вопрос в контексте микроконтроллеров, у которых нет "разных" ОЗУ и нет защиты блоков ОЗУ от доступа "чужих" процессов.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Вы бы привели конкретный пример. Потому что почти все компиляторы выделяют весь стек в отдельный сегмент, для возможности управления им редактором связей (linker). А вот чтобы какой-то компилятор выделал отдельные сегменты для стека вызовов и стека данных я даже припомнить не могу.
что значит один, если четным по серому написано DATA STACK и RETURN ADRESS STACK? к тому же я вопрос задал после того, как столкнуля именно с ДВУМЯ стеками на практике: параметры функций загоняются в стек данных через указатель, а call-ы и ret-ы, естественно, адресуются через SP, как обычно.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения