видео камера не высокого разрешения по этому плохо видно как отображаются на экране ноутбука, в программе 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
'
'-------------------------------------------------------------------------------
' директивы компилятора
'-------------------------------------------------------------------------------
$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