Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Tastatur Initialisierung Kategorie: Programmierung Basic (von Dennis - 14.07.2006 7:10)
Ich nutze:
C-Control Pro Mega32, CC-Pro 32 Application Board
Hi @all

In meinem Basic Programm ist die * Taste der Folientastatur so definiert, dass man mit ihr das LED,
sowie das LCD Display Löschen kann. Bei erneutem druck auf eine andere Taste sollen die Displays
nun den eingegebenen Wert wieder ausgeben, was leider nicht Funktioniert, Villeicht könnt ihr mir
helfen


#define MINUS &H40
#define A &H77
#define B &H7F
#define C &H39
#define d &H5E
#define E &H79
#define F &H71
#define G &H7D
#define H &H76
#define I &H06
#define J &H0F
#define L &H38
#define n &H54
#define x &H5C  ' ist das kleine o
#define P &H73
#define r &H50
#define S &H6D
#define t &H78
#define U &H3E
#define y &H6E


Dim key_in As Word                          ' globale Variablendeklaration
Dim key_ch, key_ch1 As Byte                 ' globale Variablendeklaration
Dim Pos As Byte                             ' globale Variablendeklaration




Dim TAUSENDER   As Byte
Dim HUNDERTER   As Byte
Dim ZEHNER      As Byte
Dim EINER       As Byte

Dim count As Integer
Dim count10 As Integer
Dim count100 As Integer
Dim count1000 As Integer

Dim zaehler As Integer
Dim Milli (6) As Integer
Dim Millimeter As Integer
Dim Poss As Integer

Dim Zeile(12) As Char
'-----------------------------------------------------
'               7 SEGMENT DECODER
'-----------------------------------------------------
Sub  DECODE (CODE As Byte) As Byte
Select Case CODE
  Case 0
  CODE=&H3F
  Case 1
  CODE=&H06
  Case 2
  CODE=&H5B
  Case 3
  CODE=&H4F
  Case 4
  CODE=&H66
  Case 5
  CODE=&H6D
  Case 6
  CODE=&H7D
  Case 7
  CODE=&H07
  Case 8
  CODE=&H7F
  Case 9
  CODE=&H6F
End Case
Return CODE
End Sub
'------------------------------------------------------

'-----------------------------------------------------
'--      IIC SEND BUFFER TO SAA1064               ----
'-----------------------------------------------------


Sub SENDBUF(BRIGHT As Byte,DIGIT1 As Byte,DIGIT2 As Byte,DIGIT3 As Byte,DIGIT4 As Byte)

I2C_Start()        ' I2C Bus starten
I2C_Write (&H76)   ' Adresse des Bausteins
I2C_Write (0)      ' Startbit
I2C_Write (BRIGHT) ' Controllbit
I2C_Write (DIGIT1) ' erstes LED Segment
I2C_Write (DIGIT2) ' zweites LED Segment
I2C_Write (DIGIT3) ' drittes LED Segment
I2C_Write (DIGIT4) ' viertes LED Segment
I2C_Stop()         ' I2C Stoppen
AbsDelay(5)
End Sub


'----------------------------------------------------
'          SPLIT VALUE INTO DIGITS
'----------------------------------------------------
Sub SPLIT_DIGITS(VALUE As Word)
TAUSENDER=VALUE/1000
HUNDERTER=(VALUE-(TAUSENDER*1000))/100
ZEHNER=(VALUE-(TAUSENDER*1000)-(HUNDERTER*100))/10
EINER=VALUE-TAUSENDER*1000-HUNDERTER*100-ZEHNER*10
End Sub
'----------------------------------------------------
'---------------------------------------------------------



'------------------------------------------------------------------------------
' Tastaturabfrage der Folientastatur mit Zeichenumwandlung
'

Sub Key2Display()
    key_in=Key_Scan()                       ' Tastatureingabe wird gelesen

    If key_in<>0 Then                       ' und in die Variable key_in geschrieben
        key_ch=Key_TranslateKey(key_in)     ' Eingabe wird in ASCII Zeichen umgewandelt

        If key_ch<>key_ch1 Then             ' Abfrage auf neue Eingabe
                        key_ch1=key_ch                  ' (Zeichenwiederholung)

            If Pos=16 Then                  ' nach dem 16. Zeichen wird das
                LCD_ClearLCD()              ' Display gelöscht
                LCD_CursorOff()             ' Display Cursor ausschalten
                Pos=0
            End If
            If Pos<8 Then
                LCD_CursorPos(Pos)          ' Cursorposition in der ersten Zeile
            Else                            ' Die erste Stelle der zweiten Zeile hat
                LCD_CursorPos(&H38+Pos)     ' die Position &H40!! LCD_Pos=8
            End If
            LCD_WriteChar(key_ch)           ' Ausgabe des Wertes der Variablen
                                    ' key_ch als ChrString auf dem Display.
            Pos=Pos+1                       ' Variablenwert um eins herhöhen
        End If
    Else
        key_ch1=+1
    End If
  ' If key_ch >= 48 Then
  '    count = key_ch - 48
  '    End If

   '   If key_ch = 42 Then
   '        count = key_ch
  ' End If
     ' If key_ch = 35 Then

     ' Poss = Pos * 1000


    'count = (key_ch + Poss)


    'count = Pos * 100




   ' End If


  Poss=Pos


  'If key_ch=35 Then
   'Bestaetigen()

   'End If


  If key_ch = 42  Then
   Loeschen()
  End If





  If Poss = 1 Then
  Milli (Poss) = (key_ch - 48) * 1000
  End If

  If Poss = 2 Then
  Milli (Poss) = (key_ch - 48) * 100
  End If

  If Poss = 3 Then
  Milli (Poss) = (key_ch - 48) * 10
  End If

  If Poss = 4 Then
  Milli ( Poss) = (key_ch - 48)
  End If
  'If Pos > 3 Then
  'Pos = 0
  'End If

  count = Milli (1) + Milli (2) + Milli (3)  + Milli (4)







I2C_Init(I2C_100kHz)                    ' I2C Bit Rate: 100 kHz




SPLIT_DIGITS(count)
SENDBUF(&H17,DECODE(EINER),DECODE(ZEHNER),DECODE(HUNDERTER),
DECODE(TAUSENDER))     'Statt Variable Bright 1 fester Wert als Hex &H17


End Sub

'------------------------------------------------------------------------------
' Tastaturverzögerung alle 10ms
'
Sub INT_10ms()
   Dim irqcnt As Integer
    Key2Display()                           ' Funktionsaufrauf: Tastaturabfrage
    irqcnt=Irq_GetCount(INT_TIM2COMP)       ' Interrupt Request Counter
End Sub

'Sub Loesch()
'count = 48

'End Sub



 '------------------------------------------------------------------------------
 ' Löschen über die Taste *
 Sub Loeschen()

   LCD_ClearLCD()
                             ' Display löschen
  LCD_Init()                              ' Display initialisieren
      Key_Init()                              ' Keyboard initialisieren

    Pos=0
    key_ch=0
    key_ch1=-1

    'Irq_SetVect(INT_TIM2COMP,INT_10ms)      ' Funktionsaufruf: Tastaturverzögerung


      'Sub SHOW_IDLE()

        SENDBUF(&H17,0,0,0,0)





End Sub



'------------------------------------------------------------------------------
 'Schriftzug Halo Ã?ber die Taste *



 'Sub Bestaetigen()
'SENDBUF(&H17,x,L,A,H)
 ' AbsDelay(1000)




'End Sub


'-------------------------------------------------------------------------------

' Hauptprogramm
'

Sub main()

Dim COUNTER As Integer
Dim Zeile(12) As Char


LCD_Init()                              ' Display initialisieren
                                             ' LCD Cursor positionieren
LCD_WriteText(Zeile)                   ' String  ausgeben
LCD_CursorPos(&H40)
'Zeile = "Demo"                        ' LCD Cursor auf 2.Zeile positionieren
LCD_WriteText(Zeile)                   ' String  ausgeben


    'LCD_ClearLCD()                          ' Display löschen
    'LCD_CursorOff()                         ' Display Cursur ausschalten
    Key_Init()                              ' Keyboard initialisieren

    Pos=0
    key_ch=0
    key_ch1=-1

    Irq_SetVect(INT_TIM2COMP,INT_10ms)      ' Funktionsaufruf: Tastaturverzögerung
   Do While 5
   End While
End Sub





'------------------------------------------------------------------------------
' Hauptprogramm
'
'Sub main2()



'--------- FLASHING READY -------------------------------


'End Sub



    Antwort schreiben


Antworten: