реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Подключение клавиатуры PS/2 к микроконтроллеру, есть исходник и видео
ffilin
сообщение Mar 30 2017, 11:15
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 247
Регистрация: 4-03-07
Из: Москва
Пользователь №: 25 852



преобразователь скан кода компьютерной клавиатуры PS/2 в UART.
видео камера не высокого разрешения по этому плохо видно как отображаются на экране ноутбука, в программе Hyper Terminal нажатые на клавиатуре кнопки.

Работает следующим образом, данные проходят Клавиатура --> скан код--> микроконтроллер ATmega8--> UART--> MAX232-->COM port-->Hyper Terminal

https://www.youtube.com/watch?v=gGJYEg4GNJM

Исходник на BASCOM AVR

CODE
' программа kebord-->ascii
'
'-------------------------------------------------------------------------------
' директивы компилятора
'-------------------------------------------------------------------------------
$regfile = "m8def.dat" ' тип процессора
$crystal = 14318180 ' частота кварца
$baud = 9600
'Config Serialin = Buffered , Size = 16 ' скорость связи

'-------------------------------------------------------------------------------
' соответствие электрических цепей выводам портов
'-------------------------------------------------------------------------------
' сеть
' направление данных в сети
' конечники

'-------------------------------------------------------------------------------
' переменные
'-------------------------------------------------------------------------------

Dim B As Byte
Dim B_o As Byte
Dim Y As Byte
Dim C As Byte

Dim V As Bit
Dim O As Bit
Dim P As Bit

Dim In_p As Bit
Dim Caps As Bit

'============================================================================
===
' начало программы
'-------------------------------------------------------------------------------
' вектор прерывания по сбросу (начало программы)
Startmodule:
' обрабатываем источник сброса
' if MCUCSR.WDRF = 1 then goto ResetWD

' goto ConfigModule

Resetwd: ' сброс по сторожевому таймеру
' resetFlag = MCUCSR
' MCUCSR.WDRF = 0




Configmodule:
'настройка портов ввода/вывода
'внутреннее сопротивление
'0 - 100кОм(в микроконтроллер)
'1- низкое (измикроконтроллера)
'
'подтягивание
'1 - к плюсу
'0 - на нуле


Ddrb = &B00000000
Ddrc = &B00000000
Ddrd = &B00000010
Portb = &B00000000
Portc = &B00000000
Portd = &B00000000


Ucsrc = &B10111110 '2-stop odd-par




Config Int0 = Falling

On Int0 Int0_int

Enable Interrupts ' разрешить работу прерываний
Enable Int0

Stop Ac ' отключить питание
' настройка АЦП
' Stop ADC
' F_him = 10


'переходит в режим приёма ожидает начало пакета


' Enable Interrupts ' разрешить работу прерываний


' загрузка конфигурации
Loadconfig:





' основной цикл программы
Reset Caps

Main:
'Tmp = Waitkey()

If V = 1 Then

Waitus 800

If B = &H12 Then Set Caps
If B = &H59 Then Set Caps

If B_o = &HF0 Then
If B = &H12 Then Reset Caps
If B = &H59 Then Reset Caps
End If


If Caps = 0 Then
Select Case B

Case &H69 : C = &H31 '1
Case &H72 : C = &H32 '2
Case &H7A : C = &H33 '3
Case &H6B : C = &H34 '4
Case &H73 : C = &H35 '5
Case &H74 : C = &H36 '6
Case &H6C : C = &H37 '7
Case &H75 : C = &H38 '8
Case &H7D : C = &H39 '9
Case &H70 : C = &H30 '0



Case &H16 : C = &H31 '1
Case &H1E : C = &H32 '2
Case &H26 : C = &H33 '3
Case &H25 : C = &H34 '4
Case &H2E : C = &H35 '5
Case &H36 : C = &H36 '6
Case &H3D : C = &H37 '7
Case &H3E : C = &H38 '8
Case &H46 : C = &H39 '9
Case &H45 : C = &H30 '0
Case &H4E : C = &H2D '-
Case &H55 : C = &H3D '=
Case &H5D : C = &H5C '\

Case &H15 : C = &H71 'q '
Case &H1D : C = &H77 'w
Case &H24 : C = &H65 'e
Case &H2D : C = &H72 'r
Case &H2C : C = &H74 't
Case &H35 : C = &H79 'y
Case &H3C : C = &H75 'u
Case &H43 : C = &H69 'i
Case &H44 : C = &H6F 'o
Case &H4D : C = &H70 'p
Case &H54 : C = &H5B '[
Case &H5B : C = &H5D ']

Case &H1C : C = &H61 'a
Case &H1B : C = &H73 's
Case &H23 : C = &H64 'd
Case &H2B : C = &H66 'f
Case &H34 : C = &H67 'g
Case &H33 : C = &H68 'h
Case &H3B : C = &H6A 'j
Case &H42 : C = &H6B 'k
Case &H4B : C = &H6C 'l
Case &H4C : C = &H3B ';
Case &H52 : C = &H27 ''

Case &H1A : C = &H7A 'z
Case &H22 : C = &H78 'x
Case &H21 : C = &H63 'c
Case &H2A : C = &H76 'v
Case &H32 : C = &H62 'b
Case &H31 : C = &H6E 'n
Case &H3A : C = &H6D 'm
Case &H41 : C = &H2C ',
Case &H49 : C = &H2E '.
Case &H4A : C = &H2F '/

Case &H29 : C = &H20 '" "
Case &H5A : C = &H0D ' "enter"
Case &H76 : C = &H1B ' "esc"

Case Else : Reset O

End Select
End If

If Caps = 1 Then
Select Case B

Case &H69 : C = &H31 '1
Case &H72 : C = &H32 '2
Case &H7A : C = &H33 '3
Case &H6B : C = &H34 '4
Case &H73 : C = &H35 '5
Case &H74 : C = &H36 '6
Case &H6C : C = &H37 '7
Case &H75 : C = &H38 '8
Case &H7D : C = &H39 '9
Case &H70 : C = &H30 '0


Case &H16 : C = &H21 '1 !
Case &H1E : C = &H40 '2 @
Case &H26 : C = &H23 '3 #
Case &H25 : C = &H24 '4 $
Case &H2E : C = &H25 '5 %
Case &H36 : C = &H5E '6 ^
Case &H3D : C = &H26 '7 &
Case &H3E : C = &H2A '8 *
Case &H46 : C = &H28 '9 (
Case &H45 : C = &H29 '0 )
Case &H4E : C = &H5F '- _
Case &H55 : C = &H2B '= +
Case &H5D : C = &H7C '\ |

Case &H15 : C = &H51 'q '
Case &H1D : C = &H57 'w
Case &H24 : C = &H45 'e
Case &H2D : C = &H52 'r
Case &H2C : C = &H54 't
Case &H35 : C = &H59 'y
Case &H3C : C = &H55 'u
Case &H43 : C = &H49 'i
Case &H44 : C = &H4F 'o
Case &H4D : C = &H50 'p
Case &H54 : C = &H7B '[{
Case &H5B : C = &H7D ']}

Case &H1C : C = &H41 'a
Case &H1B : C = &H53 's
Case &H23 : C = &H44 'd
Case &H2B : C = &H46 'f
Case &H34 : C = &H47 'g
Case &H33 : C = &H48 'h
Case &H3B : C = &H4A 'j
Case &H42 : C = &H4B 'k
Case &H4B : C = &H4C 'l
Case &H4C : C = &H3A '; :
Case &H52 : C = &H22 ' ' ""

Case &H1A : C = &H5A 'z
Case &H22 : C = &H58 'x
Case &H21 : C = &H43 'c
Case &H2A : C = &H56 'v
Case &H32 : C = &H42 'b
Case &H31 : C = &H4E 'n
Case &H3A : C = &H4D 'm
Case &H41 : C = &H3C ',<
Case &H49 : C = &H3E '.>
Case &H4A : C = &H3F '/ ?

Case &H29 : C = &H20 '" "
Case &H5A : C = &H0D ' "enter"
Case &H76 : C = &H1B ' "esc"


Case Else : Reset O

End Select
End If

If B <> &HF0 Then
If B_o <> &HF0 Then

If O = 1 Then Printbin C

' Print©
End If
End If






B_o = B

Reset V
Reset O
Reset P

B = 0
Y = 0

End If


Goto Main

Int0_int:
Disable Interrupts

If Y > 10 Then

Reset V
Reset O
Reset P

B = 0
Y = 0

End If

In_p = Pind.3


Select Case Y
Case 0 : If In_p = 0 Then Set V

Case 1 : If In_p = 1 Then
B = B + 1
Toggle P
End If

Case 2 : If In_p = 1 Then
B = B + 2
Toggle P
End If
Case 3 : If In_p = 1 Then
B = B + 4
Toggle P
End If
Case 4 : If In_p = 1 Then
B = B + 8
Toggle P
End If
Case 5 : If In_p = 1 Then
B = B + 16
Toggle P
End If
Case 6 : If In_p = 1 Then
B = B + 32
Toggle P
End If
Case 7 : If In_p = 1 Then
B = B + 64
Toggle P
End If
Case 8 : If In_p = 1 Then
B = B + 128
Toggle P
End If
Case 9 : If In_p = P Then B = 0
Case 10 : If In_p = 1 Then Set O
End Select

Incr Y

Enable Interrupts
Enable Int0
Return


Сообщение отредактировал IgorKossak - Mar 30 2017, 18:04
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!


--------------------
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 30 2017, 11:27
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Абсолютная муть.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
prottoss
сообщение Mar 30 2017, 12:20
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(zltigo @ Mar 30 2017, 17:27) *
Абсолютная муть.
+1


--------------------
Go to the top of the page
 
+Quote Post
ffilin
сообщение Mar 30 2017, 15:09
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 247
Регистрация: 4-03-07
Из: Москва
Пользователь №: 25 852



Может кто то захочет сделать DDS генератор частоты а частоту вводить сразу, а не нажимая кнопочки или крутя инкодер. Может кто то захочет сделать бегущую строку, туда тоже нужно как то вводить текст...

единственное пост длинный получился, как спрятать исходник под кат?


--------------------
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 30 2017, 15:16
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(ffilin @ Mar 30 2017, 18:09) *
Может кто то захочет сделать DDS генератор частоты а частоту вводить сразу, а не нажимая кнопочки или крутя инкодер. Может кто то захочет сделать бегущую строку, туда тоже нужно как то вводить текст...

BASIC уже не модно.
Кнопки уже не модно. Проще энкодером или с сенсорного экрана.
Связь с ПК/планшетом для ввода текста можно легко сделать через BT или WiFi.

Цитата(ffilin @ Mar 30 2017, 18:09) *
единственное пост длинный получился, как спрятать исходник под кат?

Тэг 'codebox'
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 30 2017, 15:27
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(adnega @ Mar 30 2017, 17:16) *
BASIC уже не модно.

Тут проблема уже начинается не с BASIC. BASIC это уже мелкий штрих.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Mar 30 2017, 15:34
Сообщение #7


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(adnega @ Mar 30 2017, 18:16) *
Тэг 'codebox'

а ещё лучше ссылка на github или mysvn
zip в конце концов


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 30 2017, 15:47
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(zltigo @ Mar 30 2017, 18:27) *
Тут проблема уже начинается не с BASIC. BASIC это уже мелкий штрих.

На серьезность намерений подход ТС не намекает, а для всех прочих вариантов годится тот же Arduino.
Go to the top of the page
 
+Quote Post
hsoft
сообщение Mar 30 2017, 16:36
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 190
Регистрация: 13-02-17
Пользователь №: 95 415



Цитата(ffilin @ Mar 30 2017, 16:09) *
единственное пост длинный получился, как спрятать исходник под кат?

Чтобы сократить код напишите слова [ c o d e ] и [ / c o d e ] до и после кода (пробелы убрать)

Будет вот так
Код
здесь ваш код

Сделайте reply моего поста и сразу увидите. Другой вариант запаковать в zip и прикрепить к посту.

Вы делаете отличные вещи, рассказываете и показываете практические результаты.
Это самое ценное.
Вам тут будут гадости писать не обращайте внимание. У нас тут полно всезнаек, которые стесняются выложить свои работы.
А раз так, значит вес их слов равен нулю. Людям нужны такие вот обучающие видео.
Спасибо за интересную работу. Отлично подойдет в качестве стартовой точки по работе с клавиатурой.


Если будут особо доставать, включим тяжелую артиллерию...sm.gif

Сообщение отредактировал IgorKossak - Mar 30 2017, 18:05
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 30 2017, 17:49
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(hsoft @ Mar 30 2017, 19:36) *
У нас тут полно всезнаек,

Для портянок лучше использовать 'codebox', вместо 'code'.
Go to the top of the page
 
+Quote Post
Aldec
сообщение Apr 2 2017, 07:52
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 160
Регистрация: 21-06-16
Пользователь №: 92 272



В некоторых средах и пакетах разработки для AVR есть различные библиотеки для работы с периферией, SPI датчиками, USB, GSM, CAN модулями, ЛСД драйверы, PS2 клавиатуры,

Сообщение отредактировал Aldec - Apr 2 2017, 07:55
Go to the top of the page
 
+Quote Post
ffilin
сообщение Apr 4 2017, 21:19
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 247
Регистрация: 4-03-07
Из: Москва
Пользователь №: 25 852



Цитата(Aldec @ Apr 2 2017, 11:52) *
В некоторых средах и пакетах разработки для AVR есть различные библиотеки для работы с периферией, SPI датчиками, USB, GSM, CAN модулями, ЛСД драйверы, PS2 клавиатуры,


Программирую на С, паскале, ASM. Иногда пишу драйверы и библиотеки.
просто BASCOM бесплатный и программатор 2 разъёма и 5 проводов.

Этот преобразователь скан-кода в ASCII всего лишь часть более крупного проекта.

Вывод текстовой строки в эфирную ТВ картинку.


--------------------
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th July 2025 - 17:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01502 секунд с 7
ELECTRONIX ©2004-2016