Свежие обсуждения
Микроконтроллеры

Ликбез по программированию PIC , vol. # 2

1 9 17

Сделал первый работоспособный проект на mb. Всё тот же опрос всё той же клавиатуры. Hardware tested. Алгоритм пока не рисовал, там и так всё достаточно просто и наглядно. mikrobasic - мощный и продуманный инструмент. Мне нравится всё больше и больше.
http://slil.ru/23188180
Ахтунг: на главной странице нм.ру вирусы! Поэтому туда не стал выкладывать.

 

нм.ру привели в порядок. Вот версия 0.2:
http://www.pic16.nm.ru/likbez2/Test01_2.zip
Отображает на 7-сегментном индикаторе номер цифровой кнопки со старшим приоритетом. В случае, если нажаты одновременно 2 кнопки, дополнительно отображается точка. Если нажаты одновременно 3 и более кнопки - отображается "П". При нажатии * или # индикатор мигает.
Индикатор с общим анодом. Анод - к RA0, катоды - к PORTB по порядку (А к RB0...точка к RB7).

 

Уважаемые посетители данной странички!
"Поощрение столь же необходимо ... писателю, сколь необходима канифоль смычку виртуоза" (с) К. Прутков.
Поэтому прошу высказывать свои замечания, предложения, задавать вопросы, или хотя бы просто отметиться здесь, если тема Вам интересна. А то мы тут в основном вдвоем пишем - я и Splav56. Если тема нужная - будем продолжать и развивать.

 

Вот и алгоритм: http://www.pic16.nm.ru/likbez2/keybscan_algo.gif
А вот он же в формате visio5: http://www.pic16.nm.ru/likbez2/keybscan_algo_visio5.zip

 

picmaniac: Поэтому прошу высказывать свои замечания, предложения, задавать вопросы, или хотя бы просто отметиться здесь, если тема Вам интересна. А то мы тут в основном вдвоем пишем - я и Splav56.

Маниак! Не стоит генерить по этому поводу. Судя по рейтингу темы мы тут не одни. Просто пишем мы, а остальные в основном конспектируют. Мне тоже весьма сложно угнаться за этой темой, тем более что мой опыт программирования мизерный. То что преподавали в свое время - это полный отстой, кому нужен сейчас Алгол-60! Но тем не менее какие-то навыки остались. Я думаю что если будут вопросы у кого-либо, то они последуют непременно. Просто люди делятся на "крутых программистов", которым задавать вопросы здесь "просто западло" и "полных чайников", о чем никто признаться честно никто не хочет. Я признаться в том, что я "полный чайник" в программировании м/к не боюсь, поэтому и пишу. Мне интересна сама тема, поэтому и пишу.

PS: программу и алгоритм скачал, распечатал, нужно время для осмысления.

 

Да я и сам не так давно был полным чайником в программировании МК. Если бы не цикл статей ASD в "Радио" - возможно, так бы и остался до сих пор. Мне просто хочется убедиться, что наши труды не пропадают даром.

 

Поглядел алгоритм и программу, появился вопрос: для чего нужны приоритеты, чез них нельзя разве обойтись? И почему кнопке "0" присвоен высший приоритет?
Да еще хотелось бы увидеть полное словесное описание ТЗ. Дальше пока обсуждать не могу, надо распечатать хотя бы англоязычный мануал по mb.

 

Приоритеты нужны для того, чтоб выдать определенный результат при одновременном нажатии нескольких кнопок (в нашем случае двух). Будет выдан результат, соответствующий условно старшей из нажатых кнопок. Старшинство определяется нашим желанием. Вот я и присвоил приоритеты по порядку. А вообще можно в произвольном порядке присвоить - хоть от 1, 2...9, 0; хоть от 0, 1...8, 9; как угодно. Замечание: приоритет не касается кнопок * и #, они обрабатываются отдельно.
ТЗ я уже формулировал выше, оно есть на первой странице. Только я сделал немного иначе, точку задействовал и мигание. Ну и sleep пока не стал задействовать.

 

picmaniac: Приоритеты нужны для того, чтоб выдать определенный результат при одновременном нажатии нескольких кнопок (в нашем случае двух). Будет выдан результат, соответствующий условно старшей из нажатых кнопок.

Мне кажется приоритет в этом случае должен принадлежать первой из нажатых клавиш, а не условно старшей. Так будет правильнее с точки зрения логики.

 

И как определить "первую", если столбцы опрашиваются поочередно через некоторый промежуток времени? Все кнопки сразу одномоментно опросить невозможно.
Вводить в функцию задержки и повторные опросы? А нужно ли? Преимущество предложенной мною функции - быстрота. Переключили порт, очень быстро опросили, вернули порт в исходное состояние, быстро обработали полученные данные - и выдали результат.
Если потребуется определить "первую из нажатых кнопок", можем вызвать функцию несколько раз с желаемыми временнЫми интервалами.
И еще одно замечание: в момент вызова функции уже могут быть нажаты две кнопки!