Code:
' IR Tastatur
'
' auf RN-Control
'
$regfile = "M32def.dat" ' the used chip
'$regfile = "M644def.dat" ' the used chip
$crystal = 16000000 ' frequency used
$baud = 38400
' configs
Config Portc = &B00111111
Config Timer0 = Timer , Prescale = 64 , Clear Timer = 1
Const Prescale64 = &H03
#if _chip = 23
On Oc0 Timer0isr
#endif
#if _chip = 37
On Oc0a Timer0isr
#endif
' Dim
Dim Cnt As Byte ' zähler für Timeraufrufe
Dim Rc_flag As Bit ' Flag ob was gekommen ist
Dim Z As Byte ' Zähler
Dim Rc(20) As Byte ' Bits von RC
Dim Rcdata(2) As Byte
Dim Rcdatal As Word At Rcdata(1) Overlay
Dim Idxw As Word ' Index aus der 1. Tabelle
Dim Idxb(2) As Byte At Idxw Overlay
Dim Taste As String * 12
' div
Portc = &HFF
#if _chip = 23
Ocr0 = &HC8 ' damits 800 µs werden
#endif
#if _chip = 37
Ocr0a = &HC8 ' damits 800 µs werden
#endif
Print
Print "NetBox IR Tastatur"
Print
Enable Interrupts
' Main
Do
#if _chip = 23
Toggle Portc.0
#endif
#if _chip = 37
Pinc.0 = 1
#endif
' IR-Daten holen
Gosub Getrcnetbox
Idxw = 0
If Rcdatal <> 0 Then
'Print " " ; Bin(rcdata(2)) ; Bin(rcdata(1)) ; " " ; Hex(rcdata(2)) ; Hex(rcdata(1)) ;
Idxw = Lookdown(rcdata(1) , Hex2keyrc , 118)
Print " " ;
Print Idxw
'Taste = Lookupstr(idxb(2) , Key2txtrc) ' geht irgendwie ned, kommt immer nur das 1. raus !?!
Restore Key2txtrc
If Idxw < 119 Then
For Z = 1 To Idxw
Read Taste
Next Z
Print Taste
End If
Sound Portd.7 , 300 , 250 'BEEP
End If
Waitms 100
Loop
End
' subs
' wartet auf IR
Getrcnetbox:
#if _chip = 23
Enable Oc0
#endif
#if _chip = 37
Enable Oc0a
#endif
' start init
Stop Timer0
Timer0 = 0
Rc_flag = 0
Rcdatal = 0 ' RC Daten löschen
Bitwait Pinc.6 , Reset ' warten auf low
Cnt = 0
Start Timer0
' warten bis der Timer fertig ist
Bitwait Rc_flag , Set
If Rc_flag = 1 Then
' nur wenn die ersten Bits 0010 sind, könnte der Rest passen, sonst von haus aus garnicht !
If Rc(1) = 0 And Rc(2) = 0 And Rc(3) = 1 And Rc(4) = 0 Then
For Z = 5 To 20
Shift Rcdatal , Left , 1
Rcdatal.0 = Rc(z)
Next Z
' debug ausgabe!
' For Z = 1 To 20
' Print Rc(z) ;
' Rc(z) = 0
' Next Z
' Print
' passen die Daten ?
If Rcdata(2) <> &H94 And Rcdata(2) <> &H95 Then
Rcdatal = 0
End If
End If
Timer0 = 0
Rc_flag = 0
End If
#if _chip = 23
Disable Oc0
#endif
#if _chip = 37
Disable Oc0a
#endif
Return
' Timer ISR
Timer0isr:
Incr Cnt
Rc(cnt) = Pinc.6
If Cnt = 20 Then
Stop Timer0
Cnt = 0
Rc_flag = 1
End If
Return
' Codetabellen
' erste Tabelle Codes die auf der TV-RC vorkommen, incl. der die auf beiden vorkommen
Hex2keyrc:
Data &HF4 , &HF5 , &H9C , &HC1 , &HA8 , &HF9 , &H24 , &H65
Data &H14 , &H95 , &HD4 , &H8D , &H20 , &H10 , &HE4 , &HAD
Data &H1C , &H35 , &H85 , &HB5 , &H0D , &H04 , &H05 , &H25
Data &H34 , &HA5 , &H15 , &HB1
' Tabelle 2, codes die nur auf dem Keyboard vorkommen
Hex2keykb:
Data &HB9 , &H30 , &H00 , &H38 , &H00 , &H00 , &HF8 , &H54
Data &H39 , &H00 , &H5D , &H00 , &H00 , &H00 , &H1D , &H9D
Data &H2C , &H8C , &H6D , &H6C , &H71 , &H60 , &H50 , &H48
Data &H49 , &H7C , &H7D , &H5C , &H4D , &H00 , &H00 , &H31
Data &H64 , &HE5 , &HD5 , &HB4 , &HF1 , &H08 , &H91 , &HD0
Data &HD1 , &HC8 , &H88 , &HBD , &HDD , &HFD , &HDC , &HCD
Data &HBC , &H3D , &HCC , &HED , &HF0 , &HC9 , &HE0 , &H09
Data &HFC , &H89 , &HE1 , &HA1 , &HB0 , &H3C , &HAC , &HEC
Data &H2D , &H70 , &H61 , &H51 , &H11 , &H90 , &HA0 , &HB8
Data &H0C , &H4C , &H79 , &H78 , &H55 , &H74 , &H94 , &H69
Data &HE8 , &HA4 , &H75 , &H28
Hex2keyshift:
Data &H29 , &H40 , &H98 , &H18 , &H21 , &HA9 , &H00 , &H00
' Text der zur Taste kommt
Key2txtrc:
Data "1 RC" , "2 RC" , "3 RC" , "4 RC" , "5 RC" , "6 RC" , "7 RC" , "8 RC"
Data "9 RC" , "0 RC" , "Mute RC" , "./.. RC" , "Enter RC" , "Prev RC" , "Menu RC" , "Vol + RC"
Data "Vol - RC" , "Rot RC" , "Grün RC" , "Gelb RC" , "Blau RC" , "CH + RC" , "CH - RC" , "C links"
Data "C rechts" , "C auf" , "C ab" , "TV/Web"
Key2txtkb:
Data 13 , " Tab" , "_" , " " , "_" , "_" , "#" , " Entf"
Data " Backspace" , "_" , "´" , "_" , "_" , "_" , "+" , ","
Data "-" , "." , "ß" , "0" , "1" , "2" , "3" , "4"
Data "5" , "6" , "7" , "8" , "9" , "_" , "_" , "<"
Data "Oben" , "Bild Auf" , "Bild Ab" , "Unten" , "a" , "b" , "c" , "d"
Data "e" , "f" , "g" , "h" , "i" , "j" , "k" , "l"
Data "m" , "n" , "o" , "p" , "q" , "r" , "s" , "t"
Data "u" , "v" , "w" , "x" , "y" , "z" , "ä" , "ö"
Data "ü" , "^" , "Home" , "WWW.." , "Album" , "Suche" , "E-Mail" , "F6"
Data "TV Mute" , "TV Video" , "F9" , "Neu laden" , "zurück" , "Weiter" , "Hilfe" , "Drucken"
Data "Option" , "Stop" , "Lesezeichen" , "Menü "
Key2txtshift:
Data "Alt Gr" , "Strg" , "Shift rechts" , "Shift links" , "Shift Lock" , "Alt"
TSOP1x36 ist an PORTC.6 angeschlossen,
Lesezeichen