Вход/Регистрация
Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
вернуться

Пак Дэниэл Дж.

Шрифт:

Программа опроса клавиатуры последовательно анализирует состояние клавиш каждого ряда, последовательно выставляя логический 0 на выводы PORTx[0]…PORTx[3]. На рис. 5.5 приведена таблица, в которой показаны коды, которые будут на линиях порта при нажатии каждой из клавиш. Эти коды должны быть использованы программой опроса для приведения кода нажатой клавиши к одному из стандартных представлений, например к коду ACSII.

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

Рис. 5.6. Блок-схема алгоритма опроса матричной клавиатуры

На рис. 5.6 приведена блок-схема алгоритма опроса матричной клавиатуры из 16 клавиш. Этот алгоритм состоит из четырех одинаковых блоков, в которых сначала устанавливается в 0 одна из линий PORTx[0]…PORTx[3], а затем контролируется состояние линий PORTx[4]…PORTx[7]. Если на входах линий PORTx[4]…PORTx[7] логические 1, то ни одна кнопка активизированного ряда не нажата, и следует перейти к опросу следующего ряда. Если на какой-либо из линий PORTx[4]…PORTx[7] обнаружен потенциал логического 0, то по номеру линии и по номеру активизированного ряда программа должна восстановить код нажатой клавиши. Для этого удобно использовать таблицу рис. 5.5. Мы привели лишь общую структуру алгоритма. Детальное ее рассмотрение последует после примера программного кода, и описания ЖК дисплея.

/*-----------------------------------------------------------*/

/* filename: keypad.c */

/* МAIN PROGRAМ: Эта программа производит анализ */

/*состояния матричной клавиатуры из 16 клавиш */

/*Для подключения клавиатуры использован PORTB */

/*Разряды PORTB[0]…PORTB[3] активизируют линии рядов */

/*разряды PORTB[4]…PORTB[7]используются для считывания кодов */

/*колонок */

/*-----------------------------------------------------------*/

/*подключаемые файлы*/

#include <912b32.h>

#include <stdio.h>

#include <math.h>

/*используемые функции*/

char keypad(unsigned char keypress, unsigned char row);

char which_key(unsigned char keypress); /*Function to select key*/

void main{void) {

 unsigned char keypress;

 /*задание кодов активизации рядов клавиатуры*/

 unsigned char first = 0xFE; /*код активизации первого ряда*/

 unsigned char second = 0xFD; /*код активизации второго ряда*/

 unsigned char third = 0xFB; /*код активизации третьего ряда*/

 unsigned char fourth = 0xF7; /*код активизации четвертого ряда*/

 DDRB = 0x0f; /*линии 0…3 на вывод, линии 4…7 на ввод*/

 while(1) {

PORTB = 0xFE;

keypress = PORTB;

key = keypad(keypress, first);

PORTB = 0xFD;

keypress = PORTB;

key = keypad(keypress, second);

PORTB = 0xFB;

keypress = PORTB;

key = keypad(keypress, third);

PORTB = 0xF7;

keypress = PORTB;

key = keypad(keypress, fourth);

 }

}

/*------------------------------------------------------------------------*/

/*Функция keypad определяет, была ли нажата какая-либо клавиша. */

/*Функция сравнивает прочитанное значение порта PORTB с тем значением, */

/*которое было выдано на порт PORTB. Если они равны, то ни одна клавиша в */

/*ряду не нажата */

/*------------------------------------------------------------------------*/

char keypad(unsigned char keypress, unsigned char row) {

 char key1;

 if (keypress != row) { /*какая-то клавиша нажата*/

key1 = which_key(keypress); /*определить клавишу*/

  • Читать дальше
  • 1
  • ...
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: