Elektronik303
31.03.2007, 03:27
Hi,
ich hab folgenen code, mit dem ich text eingeben kann, nur irgendwann nach dem ca. 250ten Zeichen das ich eingebe kommt der gesamte eingegebene text auf dem display verstreut angezeigt.
$lib "lcd4busy.lbx" 'ersetzt die Standard LCD Bibliothek
$regfile = "m644def.dat"
$crystal = 8000000
$baud = 19200
Config Lcd = 16 * 2
Const _lcdport = Portc
Const _lcdddr = Ddrc
Const _lcdin = Pinc
Const _lcd_e = 1
Const _lcd_rw = 2
Const _lcd_rs = 3
Dim A As Integer
Dim B As String * 1
Dim Zeile As String * 999
Dim Zeichen As Integer
Dim Fzeichen As Integer
Dim Chapter As Integer
Config Keyboard = Pind.5 , Data = Pind.6 , Keydata = Keydata
Initlcd
Cursor Off Noblink
Cls
Config Pind.7 = Output
Portd.7 = 1 'Beleuchtung
Zeile = ""
A = 0
B = ""
Zeichen = 0
Cursor On Noblink
Do
A = Getatkbd()
If A > 0 And A <> 7 And A <> 42 And A <> 8 Then
Cls
If A = 121 Then
A = 122
Elseif A = 122 Then
A = 121
End If
B = Chr(a)
Zeile = Zeile + B
End If
If A = 42 Then
Cursor Off Noblink
Chapter = 16
Do
A = Getatkbd()
If A = 54 Then Chapter = Chapter + 5
If A = 52 And Chapter > 16 Then Chapter = Chapter -5
Locate 1 , 1
Lcd Left(zeile , Chapter)
Loop Until A = 13
Cls
Lcd "Wait..."
Waitms 100
Cls
A = 0
Cursor On Noblink
End If
If A = 7 Then
Cls
Zeile = ""
End If
If A = 8 Then
Zeichen = Len(zeile) - 1
Zeile = Left(zeile , Zeichen)
Cls
End If
Locate 2 , 1
Fzeichen = 999 - Len(zeile)
Lcd "F. Zeichen:" ; Fzeichen
Locate 1 , 1
If Len(zeile) > 16 Then Lcd Right(zeile , 15)
If Len(zeile) <= 16 Then Lcd Zeile
Loop
Keydata:
' Shift-Taste nicht gedrückt
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , &H5E , 0
Data 0 , 0 , 0 , 0 , 0 , 113 , 49 , 0 , 0 , 0 , 122 , 115 , 97 , 119 , 50 , 0
Data 0 , 99 , 120 , 100 , 101 , 52 , 51 , 0 , 0 , 32 , 118 , 102 , 116 , 114 , 53 , 0
Data 0 , 110 , 98 , 104 , 103 , 121 , 54 , 7 , 8 , 44 , 109 , 106 , 117 , 55 , 56 , 0
Data 0 , 44 , 107 , 105 , 111 , 48 , 57 , 0 , 0 , 46 , 45 , 108 , 48 , 112 , 43 , 0
Data 0 , 0 , 0 , 0 , 0 , 92 , 0 , 0 , 0 , 0 , 13 , 0 , 0 , 92 , 0 , 0
Data 0 , 60 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0
' Shift-Taste gedrückt
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 81 , 33 , 0 , 0 , 0 , 90 , 83 , 65 , 87 , 34 , 0
Data 0 , 67 , 88 , 68 , 69 , 0 , 35 , 0 , 0 , 32 , 86 , 70 , 84 , 82 , 37 , 0
Data 0 , 78 , 66 , 72 , 71 , 89 , 38 , 0 , 0 , 76 , 77 , 74 , 85 , 47 , 40 , 0
Data 0 , 59 , 75 , 73 , 79 , 61 , 41 , 0 , 0 , 58 , 95 , 76 , 48 , 80 , 63 , 0
Data 0 , 0 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 13 , 94 , 0 , 42 , 0 , 0
Data 0 , 62 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0
Kann der String nur maximal 250 Zeichen lang sein oder liegts am Display oder woran sonst??? Wahrscheinlich hört es bei 255 Zeichen auf und es liegt daran das Bits nur bis 255 gehen, aber wie könnte ich es dann umgehen?
Mfg
Elektronik303
ich hab folgenen code, mit dem ich text eingeben kann, nur irgendwann nach dem ca. 250ten Zeichen das ich eingebe kommt der gesamte eingegebene text auf dem display verstreut angezeigt.
$lib "lcd4busy.lbx" 'ersetzt die Standard LCD Bibliothek
$regfile = "m644def.dat"
$crystal = 8000000
$baud = 19200
Config Lcd = 16 * 2
Const _lcdport = Portc
Const _lcdddr = Ddrc
Const _lcdin = Pinc
Const _lcd_e = 1
Const _lcd_rw = 2
Const _lcd_rs = 3
Dim A As Integer
Dim B As String * 1
Dim Zeile As String * 999
Dim Zeichen As Integer
Dim Fzeichen As Integer
Dim Chapter As Integer
Config Keyboard = Pind.5 , Data = Pind.6 , Keydata = Keydata
Initlcd
Cursor Off Noblink
Cls
Config Pind.7 = Output
Portd.7 = 1 'Beleuchtung
Zeile = ""
A = 0
B = ""
Zeichen = 0
Cursor On Noblink
Do
A = Getatkbd()
If A > 0 And A <> 7 And A <> 42 And A <> 8 Then
Cls
If A = 121 Then
A = 122
Elseif A = 122 Then
A = 121
End If
B = Chr(a)
Zeile = Zeile + B
End If
If A = 42 Then
Cursor Off Noblink
Chapter = 16
Do
A = Getatkbd()
If A = 54 Then Chapter = Chapter + 5
If A = 52 And Chapter > 16 Then Chapter = Chapter -5
Locate 1 , 1
Lcd Left(zeile , Chapter)
Loop Until A = 13
Cls
Lcd "Wait..."
Waitms 100
Cls
A = 0
Cursor On Noblink
End If
If A = 7 Then
Cls
Zeile = ""
End If
If A = 8 Then
Zeichen = Len(zeile) - 1
Zeile = Left(zeile , Zeichen)
Cls
End If
Locate 2 , 1
Fzeichen = 999 - Len(zeile)
Lcd "F. Zeichen:" ; Fzeichen
Locate 1 , 1
If Len(zeile) > 16 Then Lcd Right(zeile , 15)
If Len(zeile) <= 16 Then Lcd Zeile
Loop
Keydata:
' Shift-Taste nicht gedrückt
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , &H5E , 0
Data 0 , 0 , 0 , 0 , 0 , 113 , 49 , 0 , 0 , 0 , 122 , 115 , 97 , 119 , 50 , 0
Data 0 , 99 , 120 , 100 , 101 , 52 , 51 , 0 , 0 , 32 , 118 , 102 , 116 , 114 , 53 , 0
Data 0 , 110 , 98 , 104 , 103 , 121 , 54 , 7 , 8 , 44 , 109 , 106 , 117 , 55 , 56 , 0
Data 0 , 44 , 107 , 105 , 111 , 48 , 57 , 0 , 0 , 46 , 45 , 108 , 48 , 112 , 43 , 0
Data 0 , 0 , 0 , 0 , 0 , 92 , 0 , 0 , 0 , 0 , 13 , 0 , 0 , 92 , 0 , 0
Data 0 , 60 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0
' Shift-Taste gedrückt
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 81 , 33 , 0 , 0 , 0 , 90 , 83 , 65 , 87 , 34 , 0
Data 0 , 67 , 88 , 68 , 69 , 0 , 35 , 0 , 0 , 32 , 86 , 70 , 84 , 82 , 37 , 0
Data 0 , 78 , 66 , 72 , 71 , 89 , 38 , 0 , 0 , 76 , 77 , 74 , 85 , 47 , 40 , 0
Data 0 , 59 , 75 , 73 , 79 , 61 , 41 , 0 , 0 , 58 , 95 , 76 , 48 , 80 , 63 , 0
Data 0 , 0 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 13 , 94 , 0 , 42 , 0 , 0
Data 0 , 62 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0
Kann der String nur maximal 250 Zeichen lang sein oder liegts am Display oder woran sonst??? Wahrscheinlich hört es bei 255 Zeichen auf und es liegt daran das Bits nur bis 255 gehen, aber wie könnte ich es dann umgehen?
Mfg
Elektronik303