Главная » Микроконтроллеры
Призовой фонд
на октябрь 2017 г.
1. Термометр Relsib WT51
Рэлсиб
2. 1000 руб
PCBWay
3. Регулируемый паяльник 60 Вт
Паяльник
4. 100 руб.
От пользователей

Похожие статьи:


Урок 12. Работа с компьютерной PS/2 клавиатурой в BASCOM-AVR

Иногда бывают ситуации, когда необходимо “вручную” вводить в микроконтроллер большое количество данных. Для этого конечно можно сделать клавиатуру самому, но зачем делать велосипед, когда всё уже сделано? Ведь удобнее использовать готовую компьютерную клавиатуру с PS/2 или DIN разъемом. И так, в этом уроке мы научимся работать с компьютерной клавиатурой на BASCOM-AVR. Для работы клавиатуры необходимо всего четыре провода:
4. Питание плюс 5 вольт
3. Питание минус 5 вольт
5. Линия синхронизации данных (Clock)
1. Линия передачи данных (Data)

Распиновка разъема клавиатуры PS/2:

Распиновка разъема клавиатуры PS2

Линия Data нужна для передачи данных, а линия Clock для синхронизации этих данных. Каждая клавиша на клавиатуре имеет свой собственный скан код. Причём при нажатии клавиши этот код - один, а при отжимании – другой, это позволяет определить нажата ли та или иная клавиша или нет. Точные данные о скан кодах клавиатуры можно посмотреть в справке к BASCOM-AVR.

Работа с компьютерной клавиатурой в BASCOM-AVR

Для начала работы с клавиатурой в BASCOM-AVR нужно сконфигурировать порты микроконтроллера, к которым она подключена, вот так:
Config Keyboard = (порт микроконтроллера к которому подключена линия клавиатуры Clock), Data = (порт микроконтроллера к которому подключена линия клавиатуры Data) , Keydata = (Данные о скан кодов)
Пример:
Config Keyboard = Pinb.0 , Data = Pinb.1 , Keydata = Key
При этом нужно использовать следующие данные о скан кодах:
Key:
Data 0 , 0 , 0 , 0 , 0 , 200 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , &H5E , 0
Data 0 , 0 , 0 , 0 , 0 , 113 , 49 , 0 , 0 , 0 , 122 , 115 , 97 , 119 , 50 , 0
Data 0 , 99 , 120 , 100 , 101 , 52 , 51 , 0 , 0 , 32 , 118 , 102 , 116 , 114 , 53 , 0
Data 0 , 110 , 98 , 104 , 103 , 121 , 54 , 7 , 8 , 44 , 109 , 106 , 117 , 55 , 56 , 0
Data 0 , 44 , 107 , 105 , 111 , 48 , 57 , 0 , 0 , 46 , 45 , 108 , 48 , 112 , 43 , 0
Data 0 , 0 , 0 , 0 , 0 , 92 , 0 , 0 , 0 , 0 , 13 , 0 , 0 , 92 , 0 , 0
Data 0 , 60 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 56 , 125 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 81 , 33 , 0 , 0 , 0 , 90 , 83 , 65 , 87 , 34 , 0
Data 0 , 67 , 88 , 68 , 69 , 0 , 35 , 0 , 0 , 32 , 86 , 70 , 84 , 82 , 37 , 0
Data 0 , 78 , 66 , 72 , 71 , 89 , 38 , 0 , 0 , 76 , 77 , 74 , 85 , 47 , 40 , 0
Data 0 , 59 , 75 , 73 , 79 , 61 , 41 , 0 , 0 , 58 , 95 , 76 , 48 , 80 , 63 , 0
Data 0 , 0 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 13 , 94 , 0 , 42 , 0 , 0
Data 0 , 62 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0
В них описаны данные принимаемые с клавиатуры.
После конфигурирования можно принимать данные (скан коды) с клавиатуры командой Getatkbd() , вот так:
(Переменная типа Byte) = Getatkbd()
Пример:
A = Getatkbd()

Работа с компьютерной клавиатурой в BASCOM-AVR на практике

И так, работать с компьютерной клавиатурой на практике мы научились, теперь попробуем подключить клавиатуру к МК на практике. Возьмём микроконтроллер ATtiny2313, ЖК индикатор 16*2 на контроллере HD44780, компьютерную PS/2 клавиатуру и соберём простую схему:

Схема с подключением клавиатуры PS2

Питание схемы: 5 вольт.
После чего напишем простую программу для МК, используя полученные знания:

$regfile = "attiny2313.dat"
$regfile = 8000000

Config Lcd = 16 * 2
Config Keyboard = Pinb.0 , Data = Pinb.1 , Keydata = Key

Dim A As Byte

Cls

Do
A = Getatkbd()
If A > 0 Then Lcd Chr(a)
Loop

End

Key:
Data 0 , 0 , 0 , 0 , 0 , 200 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , &H5E , 0
Data 0 , 0 , 0 , 0 , 0 , 113 , 49 , 0 , 0 , 0 , 122 , 115 , 97 , 119 , 50 , 0
Data 0 , 99 , 120 , 100 , 101 , 52 , 51 , 0 , 0 , 32 , 118 , 102 , 116 , 114 , 53 , 0
Data 0 , 110 , 98 , 104 , 103 , 121 , 54 , 7 , 8 , 44 , 109 , 106 , 117 , 55 , 56 , 0
Data 0 , 44 , 107 , 105 , 111 , 48 , 57 , 0 , 0 , 46 , 45 , 108 , 48 , 112 , 43 , 0
Data 0 , 0 , 0 , 0 , 0 , 92 , 0 , 0 , 0 , 0 , 13 , 0 , 0 , 92 , 0 , 0
Data 0 , 60 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 56 , 125 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 81 , 33 , 0 , 0 , 0 , 90 , 83 , 65 , 87 , 34 , 0
Data 0 , 67 , 88 , 68 , 69 , 0 , 35 , 0 , 0 , 32 , 86 , 70 , 84 , 82 , 37 , 0
Data 0 , 78 , 66 , 72 , 71 , 89 , 38 , 0 , 0 , 76 , 77 , 74 , 85 , 47 , 40 , 0
Data 0 , 59 , 75 , 73 , 79 , 61 , 41 , 0 , 0 , 58 , 95 , 76 , 48 , 80 , 63 , 0
Data 0 , 0 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 13 , 94 , 0 , 42 , 0 , 0
Data 0 , 62 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0

После прошивки микроконтроллера фьюз биты необходимо установить на работу микроконтроллера от внутреннего тактового генератора на 8МГц, пример установки фьюз битов в программе SinaProg:

Фьюзы в SinaProg

Принцип работы схемы такой: при нажатии кнопки на клавиатуре эта копка будет отображаться на ЖК индикаторе.

Вот что получилось у меня на макетной плате:

Макетная плата

Скачать файлы для урока (проект в Proteus, исходник, прошивка) вы можете ниже

Прикрепленные файлы:

Теги:

Яковлев Александр Вячеславович Опубликована: 2012 г. 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (6) | Я собрал (0) | Подписаться

+1
uh9cae #
Мне кажется или на схеме в протусе попутана полярность питания клавиатуры ?
Ответить
0
TDA2003 #
Да правда!
Ответить
0
JasonALT #
Скажите, а как быть с переводом на другую строку, а еще лучше привинтить экран сразу в клавиатуру и последующей отдаче сигналов компу. Что если в наличии есть несколько ЮСБ клав?
Ответить
0
Ev3658 #
А как можно не тормозить программу до нажатия кнопки?
Ответить
0
FrAnPl #
Используй прерывания
Ответить
0
soxie #
Вот это, пожалуй, годное аппаратное решение - снимать скан-код клавиши, переиначивать его на неиспользуемые скан-коды ОС, и выдавать в PS/2 компьютера. Буфер такой своеобразный. ОС в свою очередь уже можно подогнать софтом, обрабатывающим неиспользуемые скан-коды на макросы или смайлы. Это кажется попроще, чем разделить на независимые устройства две клавиатуры, чтобы подменять скан-код хуком или через драйвер.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
iMAX B6 - зарядное для Lion, LiPo, LiFe, Pb, NiCd и NiMH аккумуляторов Конструктор: DDS генератор сигналов
вверх