Лабораторный практикум по курсу "Микропроцессорные устройства". Часть 1, страница 17

            Кнопки (ключи)  на  схеме рис.  П7.1 обозначены символом (цифровая клавиша) или сло­вом (командная клавиша) в кавычках (имен­но такое обозначение выгравировано на соот­ветс­тву­ющей клавише). Кнопки в матрице под­клю­ча­ются между соот­ветст­вую­щи­ми строкой  и  стол­б­цом мат­ри­цы.  Например, кнопка "0" под­клю­че­на к строке РА0 и стол­бцу РС4, а кнопка "RUN" - к строке РА4 и столбцу РС6. Место кнопки в матрице  уни­кально,  что позволяет однозначно определять факт ее нажатия.

            Порт А запрограммирован на ввод,  а порт С - на вывод.  Если ни одна кнопка не на­жа­та,  то чтение порта А даст результат FFH, поскольку  на  строки  матрицы через со­от­­вет­с­тву­ющий резистор Ri подается высокий потенциал от источника питания +5В.

            Идея определения факта нажатия какой-либо клавиши заключается в следующем.  Необ­хо­димо на линии РС6...РС4 выводить код, который  содержит единицы и один нуль (эта линия называется активной),  например, РС6 = РС5 = 1, РС4 = 0. Если после этого ввести данные  из  пор­­та А,  то можно определить была ли нажата одна из клавиш "0"..."7", поскольку при этом со­от­вет­ствующий бит введенного  кода окажется в нуле через соответствующий замкнутый ключ. Нетрудно видеть, что нажатая клавиша "0" даст код FEH, a клавиша "7" - 7FH.  Если введен код FFH, то это может означать, что ли­бо нажата клавиша не пренадлежащая столбцу РС4, либо, что не нажата никакая кла­ви­ша.

            Выдавая код РС6 = 1, РС5 = 0, РС4 = 1, можно определить факт нажатия клавиш "8"..."F", a код PC6 = 0 , PC5 = PC4 = 1 - клавиш "MEM"..."CLR".  Определение бита нажатой клавиши на­зывается сканированием активной линии.

            Совершенно очевидно,  что подобным образом подключенная клавиатура нуж­да­ет­ся в программной поддержке.

    П7.2. Программное обеспечение

            Из п. П7.1 следует, что факт нажатия клавиши определяется по отличию вве­ден­но­го из порта А кода от FFH.  Тип нажатой  клавиши определяется  по ее скан-коду.  Скан-код клавиши - это ее произвольный,  но уникальный номер, назначаемый программистом. Лучшая система скан-кодов такая, коды которой проще вычисляются. Например, можно пред­ложить систему скан-кодов, в соответствии с которой клавишам "0" ...  "F" соот­ветс­т­вуют коды 0...15,  а кла­ви­шам "MEM"..."CLR"  -  16...23. В настоящей  лабораторной  ра­бо­те скан-коды  используются  для  вывода  визуального образа нажатой клавиши на дис­плей (индикатор). Для этого код ви­зу­ального образа располагается  в  таблице кодов ви­зуальных образов на расстоянии значения скан-кода соответствующей клавиши от начала таблицы.

            С учетом сказанного,  алгоритм функционирования программного обеспечения клави­ату­ры может иметь вид,  представленный на  рис. П.7.2.

            Алгоритм представляет собой бесконечный цикл, в который входят блоки 1...3.

           

 
    Рис. П7.2.  Алгоритм  функционирования  программы  поддержки клавиатуры

            Пред­по­ла­­­гается, что  в  блоке  1 один раз активизируются (по очереди) все столб­цы, если ни одна из кла­ви­ша не нажата, или все столбцы,  включая столбец, на котором об­наружена нажатая клавиша (пос­ле этого выход из блока 1 без активизации  следующих  стол­бцов). Кроме этого, при выходе из блока 1 подпрограмма, которая его реализует, дол­ж­на возвращать признак нажатой/не на­жа­той клавиши. Например, через флажок С МП. Нажатотой клавише может соответствовать сбро­шен­ный флаг,  не нажатой - уста­нов­ленный (или наоборот). Если клавиша нажата, под­прог­рам­ма, реализующая блок 1 алгоритма должна возвращать скан-код нажатой  клавиши.

            В блоке 2 проверяется признак  нажатия  клавиши (состояние флажка С). Если кла­ви­ша не нажата, то следует переход на новое сканирование клавиатуры, в противном слу­чае - на блок 3.