'--------------------------------------------------------------------------'
' 4 mal 3 Tasten Test '
'--------------------------------------------------------------------------'
' '
'Test mit Tasten '
' '
'Testprogramm für ATmega8 '
'Der gesendete Text kann mit dem Hyperterminal von Windows angezeigt
werden' '
'Einstellungen am Hyperterminal: '
' Bits pro sekunde: 9600 '
' Datenbits : 8 '
' Parität : keine '
' Stoppbits : 1 '
' Flusssteuerung : keine
'
'Port C0- c1-c2 sind als Eingänge für Tastatur (3 mal mit PullUps)
'
'Port C3 - C4 - D2 - D4 sind als Ausgänge für Tastatur (4 Spalten)
'legt die jeweils abgefragte Spalte auf LO
'
'Port B0 - B1 - B2 - B3 - B4 - B5 sind Ausgänge für LCD Display
' '
'-------------------------------------------------------------------------------'
$regfile = "m8def.dat" 'definieren des verwendeten Chip Atmega 8
Config Lcd = 16 * 2 'wir Verwenden Ein Display Mit 16 Mal 2 Zeichen
'-------------------------- Aus - Eingänge setzen ------------------------------
Ddrc = &B00011000 '4 Ausgänge setzen C3 - C4 und D2 - D3 rest sind
Eingänge
Ddrd = &B00001100
Portc = &B00000111 'PullUp setzen für Eingänge C0 und C1 und C2
'------------------------- Variablen Setzen ------------------------------
Dim S As String * 12 ' Variabel S als String mit 12 Zeichen setzen
S = "123456789*0#" ' Zeichen in der Vriabel setzen
Dim Ss As String * 1 ' Variabel Ss als String mit einem Zeichen setzen
Dim Spalte As Byte ' Variabel Spalte als Byte setzen
Dim Zeile As Byte ' Variabel Zeile als Byte setzen
Dim Taste As Byte ' Variable enthält die Tasten Nr.
'--------------------- Funktion Tastenabfrage ----------------------------
Declare Function Query_matrix() As Byte
Do
Taste = Query_matrix() 'Abfrage der Tastatur
If Taste <> 0 Then 'Ist der Tastenwert etwas anders als 0
Ss = Mid(s , Taste , 1) 'dann nimm einen Wert von der gedrückten Taste aus von links
Print Ss 'Anzeigen der gelesene Taste im Terminal Programm
Cls
Lcd Ss ' Anzeige der gelesenen Taste auf dem LCD
End If 'ende der Abfrage
Waitms 10 ' Pause
Loop
'------------------------------------------------------------------------------
End
Function Query_matrix() As Byte
Taste = 0
For Spalte = 0 To 3
Portc.3 = 1
Portc.4 = 1
Portd.3 = 1
Portd.2 = 1
'----------------------- Tasten Spalten resetieren -----------------------
If Spalte = 0 Then Reset Portd.2 'resetiert die jeweils abzufragende Spalte
If Spalte = 1 Then Reset Portd.3
If Spalte = 2 Then Reset Portc.4
If Spalte = 3 Then Reset Portc.3
'-------------------------------------------------------------------------------
For Zeile = 4 To 7 ' Hier werden die Tasten innerhalb einer Zeile abgefragt
Select Case Zeile
Case 4 : Debounce Pinc.0 , 0 , Calc_key , Sub
Case 5 : Debounce Pinc.1 , 0 , Calc_key , Sub
Case 6 : Debounce Pinc.2 , 0 , Calc_key , Sub
Case 7 : Debounce Pinc.3 , 0 , Calc_key , Sub End Select
Next
Next
Query_matrix = Taste
End Function Query_matrix() Query_matrix()
'-------------------------------------------------------------------------------
Calc_key:
Select Case Zeile
Case 4 : Taste = Spalte + 1
Case 5 : Taste = Spalte + 4
Case 6 : Taste = Spalte + 7
Case 7 : Taste = Spalte + 10
End Select
Return |