- Функции для работы с клавиатурой
Функции для работы с клавиатурой
Рассмотрим функции для работы с клавиатурой, организованной в виде матрицы 4x4. Данные функции также могут использоваться для обслуживания клавиатур 4х1, 4х2 и 4хЗ. Схема подключения клавиатуры представлена на рисунке 23.
Рис. 23. Схема подключения клавиатуры 4x4
Для работы С клавиатурой испатьзуют-ся библиотечные функции Keypad_Init, Keypad_Read и Keypad_Released. Описание этих функций представлено в таблицах 4,5 и 6 соответственно.
Таблица 4. Описание функции Keypad_Init
Прототип | void Keypad_Init(unsigned *port) |
Возвращаемое значение | Нет |
Описание | Инициализирует порт для работы с клавиатурой. Должна вызываться перед использованием других функций данной библиотеки |
Требования | Нет |
Пример | Keypad_Init(&PORTB) |
Таблица 5. Описание функции Keypad_Read
Прототип | unsigned short Keypad_Read(void) |
Возвращаемое значение | 1 -16 в зависимости от нажатой клавиши и 0, если нет нажатых клавиш |
Описание | Проверяет нажатие клавиши. Функция возвращает 1 -16 в зависимости от нажатой клавиши и 0, если нет нажатых клавиш |
Требования | Порт должен быть предварительно проинициализирован с помощью функции Keypad_Init |
Пример | kp = Keypad_Read() |
Таблица 6. Описание функции Keypad_Released
Прототип | unsigned short Keypad_Released(void) |
Возвращаемое значение | Возвращаемое значение 1 – 16 в зависимости от клавиши |
Описание | Вызов функции Keypad_Released – блокирующий: функция ждёт, пока клавиша не будет нажата и отпущена. При отпускании функция возвращает код от 1 до 16 в зависимости от клавиши |
Требования | Порт должен быть предварительно проинициализирован с помощью функции Keypad_Init |
Пример | kp = Keypad_Released() |
Следующий программный код может быть использован для проверки клавиатуры. Он поддерживает клавиатуры с матричной организацией от 1 до 4 строк и от 1 до 4 столбцов. Код, возвращаемый библиотечными функциями, перекодируется в ASCII-коды [0..9, A..F]. Дополнительно используется однобайтовый счётчик для вывода общего количества нажатий на клавиши во второй строке ЖКИ.
unsigned short kp, cnt;
char txt[5];
void main() {
cnt = 0;
Keypad_Init(&PORTC);
Lcd_Init(&PORTB); // Инициализация LCD на PORTC
Lcd_Cmd(LCD_CLEAR); // Очистка дисплея
Lcd_Cmd(LCD_CURSOR_OFF); // Отключение курсора
Lcd_Out(1, 1, "Key :");
Lcd_Out(2, 1, "Times:");
do {
kp = 0; // Ожидание нажатия клавиши
do
//закомментировать неиспользуемую функцию опроса клавиатуры kp = Keypad_Released();
//kp = Keypad_Read();
while (!kp);
cnt++; // подготовить значение для вывода
if (kp > 10)
kp += 54;
else
kp += 47;
// вывод его на LCD
Lcd_Chr(1, 10, kp);
WordToStr(cnt, txt);
Lcd_Out(2, 10, txt);
}
while (1);
}
// конец прораммы