|
|
  |
Подключение клавиатуры PS/2 к микроконтроллеру, есть исходник и видео |
|
|
|
Mar 30 2017, 11:15
|
Местный
  
Группа: Участник
Сообщений: 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] - для короткого!
--------------------
|
|
|
|
|
Mar 30 2017, 15:16
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(ffilin @ Mar 30 2017, 18:09)  Может кто то захочет сделать DDS генератор частоты а частоту вводить сразу, а не нажимая кнопочки или крутя инкодер. Может кто то захочет сделать бегущую строку, туда тоже нужно как то вводить текст... BASIC уже не модно. Кнопки уже не модно. Проще энкодером или с сенсорного экрана. Связь с ПК/планшетом для ввода текста можно легко сделать через BT или WiFi. Цитата(ffilin @ Mar 30 2017, 18:09)  единственное пост длинный получился, как спрятать исходник под кат? Тэг 'codebox'
|
|
|
|
|
Mar 30 2017, 16:36
|
Частый гость
 
Группа: Участник
Сообщений: 190
Регистрация: 13-02-17
Пользователь №: 95 415

|
Цитата(ffilin @ Mar 30 2017, 16:09)  единственное пост длинный получился, как спрятать исходник под кат? Чтобы сократить код напишите слова [ c o d e ] и [ / c o d e ] до и после кода (пробелы убрать) Будет вот так Код здесь ваш код Сделайте reply моего поста и сразу увидите. Другой вариант запаковать в zip и прикрепить к посту. Вы делаете отличные вещи, рассказываете и показываете практические результаты. Это самое ценное. Вам тут будут гадости писать не обращайте внимание. У нас тут полно всезнаек, которые стесняются выложить свои работы. А раз так, значит вес их слов равен нулю. Людям нужны такие вот обучающие видео. Спасибо за интересную работу. Отлично подойдет в качестве стартовой точки по работе с клавиатурой. Если будут особо доставать, включим тяжелую артиллерию...
Сообщение отредактировал IgorKossak - Mar 30 2017, 18:05
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
|
|
|
|
|
Apr 4 2017, 21:19
|
Местный
  
Группа: Участник
Сообщений: 247
Регистрация: 4-03-07
Из: Москва
Пользователь №: 25 852

|
Цитата(Aldec @ Apr 2 2017, 11:52)  В некоторых средах и пакетах разработки для AVR есть различные библиотеки для работы с периферией, SPI датчиками, USB, GSM, CAN модулями, ЛСД драйверы, PS2 клавиатуры, Программирую на С, паскале, ASM. Иногда пишу драйверы и библиотеки. просто BASCOM бесплатный и программатор 2 разъёма и 5 проводов. Этот преобразователь скан-кода в ASCII всего лишь часть более крупного проекта. Вывод текстовой строки в эфирную ТВ картинку.
--------------------
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|