#include <avr/io.h>//стандартная библиотека ввода/вывода#include <avr/interrupt.h>//библиотека с прерываниями #define RS 2//RS=PD2 управляющий сигнал ЖКИ#define E 3//E=PD3 управляющий сигнал ЖКИ #define TIME 10//временная константа для ЖКИ//Тактовая частота 4Mhz unsigned char key_code[4][4]={
Теперь перейдем к написанию программы:
То есть, нажав клавишу во 2-й строке и 4-й колонке, микроконтроллер поймет, что была нажата клавиша «9» (массив будет отличаться, в зависимости от того, как подсоединить клавиатуру к микроконтроллеру). Далее все это будем . В схеме так же присутствуют ограничивающие резисторы R4-R11 номиналом 2 кОм, которые на «всякий пожарный случай» не дают пройти большому току через порт микроконтроллера. Клавиатуру проще всего изготовить из макетной платы и отдельных кнопок, соединив их короткими перемычками, она верой и правдой послужит в дальнейших опытах. Вид сверху:
unsigned char key_code[4][4]={{'C','D','E','F'}, {'B','3','6','9'}, {'A','2','5','8'}, {'0','1','4','7'}};
Со схемы видно, что для считывания 16-ти клавиш нам потребуется 8 выводов. По сравнению с обычным подключением (один пин одна кнопка) мы выиграем в 16/8=2 раза. Алгоритм считывания будет таков: конфигурируем выводы PB0-PB3 как выхода и подадим на них нулевой уровень, а выводы PC0-PC3, выставим как входа и будем смотреть в какой колонке находиться нажатая клавиша. Далее поменяем все местами. Порты PC0-PC3 будут выходами с нулевым уровнем, а на портах PB0-PB3 будет считывать строку, в которой находиться нажатая клавиша. Зная строку и колонку можно однозначно вычислить клавишу, которая была нажата. Каждой клавише сопоставим код, который будет храниться в 2х мерном массиве 4х4 (строка нажатой клавиши первый индекс массива, колонка - второй):
Но при большом количестве клавиш не хватает ножек. Можно перейти на более «многоногие» контроллеры, но они, как правило, стоят больших денег и в некоторых случаях приходиться заново переписывать проект под них. Рассмотрим решение проблемы нехватки ножек при считывании с клавиатуры, так называемое динамическое считывание. Например, мы имеем 16 клавиш, и хотим считать с них информацию. Хитро соединим их в клавиатурную матрицу, как показано на рисунке ниже:
В прошлой своей заметке я описывал с помощью и вывод на ЖКИ. Написанную выше программу можно легко модифицировать на большее количество кнопок. Следует подсоединить клавиши к свободным выводам и периодически их всех опрашивать.
Написал vakula дата Чт., 07/01/2010 - 22:33
» Матричная клавиатура 4х4 динамическое считывание данных с портов
Больше знаний, больше возможностей.
Матричная клавиатура 4х4 динамическое считывание данных с портов | AVR Lab устройства на микроконтроллерах AVR
Комментариев нет:
Отправить комментарий