da fehlt das #endif am Ende der Loop.
Anzeige 1,8" Uhranzeige
Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen
Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.
Hinweis kann nach Kenntnisnahme deaktiviert werden!
-
-
Hallo Mitch,
welche Routinen ? habe doch den ganzen Code geschickt, in den inc´s habe ich nichts geändert.
Und welche Start1 ? in der inc. ?
Gruß Thomas -
Hallo Heiko,
wenn ich das #endif reinmache bekomme ich folgende Fehlermeldung
Error : 1 Line : 160 Unknown statement [INIT SD CARD AND SPI] , in File : F:\µC Programme-1\Anzeige 2.4 Zoll ILI9341\Anzeigetafel_24_1.bas
Error : 222 Line : 161 Illegal character [expected (, got '=' [SDCARD = 1]] , in File : F:\µC Programme-1\Anzeige 2.4 Zoll ILI9341\Anzeigetafel_24_1.bas
Error : 326 Line : 161 #ENDIF expected , in File : F:\µC Programme-1\Anzeige 2.4 Zoll ILI9341\Anzeigetafel_24_1.bas -
das #endif fehlt und ein Do zuviel
BASCOM-Quellcode
- '*******************************************************************************
- ' Landscape Mode
- '*******************************************************************************
- '*******************************************************************************
- #if Lcd_mode = 3 Or Lcd_mode = 4
- Do < - - - - - - -do Bitte Löschen
- If Flagrefreshdisplay = 1 Then ' Flag abfragen, wenn gesetzt, dann Display aktualisieren
-
Hallo Heiko,
habe es so geändert :
Aber die Hauptschleife muss doch mit do beginnen, oder nicht, komplett verwirrt.
aber bekomme immer folgende Fehlermeldung:
Error : 1 Line : 160 Unknown statement [INIT SD CARD AND SPI] , in File : F:\µC Programme-1\Anzeige 2.4 Zoll ILI9341\Anzeigetafel_24_1.bas
Error : 222 Line : 161 Illegal character [expected (, got '=' [SDCARD = 1]] , in File : F:\µC Programme-1\Anzeige 2.4 Zoll ILI9341\Anzeigetafel_24_1.bas
Error : 326 Line : 161 #ENDIF expected , in File : F:\µC Programme-1\Anzeige 2.4 Zoll ILI9341\Anzeigetafel_24_1.bas
Quellcode
- ' Landscape Mode
- '*******************************************************************************
- '*******************************************************************************
- #if Lcd_mode = 3 Or Lcd_mode = 4
- If FlagRefreshDisplay = 1 then ' Flag abfragen, wenn gesetzt, dann Display aktualisieren
- Lcd_clear Blue
- Lcd_text "Iserlohn BF Gleis Abf." , 1 , 5 , 2 , White , Blue,1 ' Startzeile Display Pixel x=1,Y=4, Fond 4
- Lcd_line 0 , 15 , 158 , 15 , 1 , White
- Lcd_line 0 , 112 , 158 , 112 , 1 , White
- Lcd_line 28, 15, 28,112,1, White
- Lcd_line 118, 15, 118,112,1, White
- 'Lcd_line 120, 15, 120,112,1, White
- Lcd_text "RB53" , 2 , y1 , 2 , Blue, White ,1 ' Displayzeile 2-7 Angabe der Zugnummer max. 4 Zeichen
- Lcd_text "RB91" , 2 , y2 , 2 , Blue, White ,1
- Lcd_text "RB16" , 2 , y3 , 2 , Blue, White ,1
- Lcd_text "RB53" , 2 , y4 , 2 , Blue, White ,1
- Lcd_text "RB91" , 2 , y5 , 2 , Blue, White ,1
- Lcd_text "RB16" , 2 , y6 , 2 , Blue, White ,1
- Lcd_text "min" , 142 , y1 , 2 , White , Blue ,1
- Lcd_text "min" , 142 , y2 , 2 , White , Blue ,1
- Lcd_text "min" , 142 , y3 , 2 , White , Blue ,1
- Lcd_text "min" , 142 , y4 , 2 , White , Blue ,1
- Lcd_text "min" , 142 , y5 , 2 , White , Blue ,1
- Lcd_text "min" , 142 , y6 , 2 , White , Blue ,1
- Lcd_text "1" , 110 , y1 , 2 , White , Blue ,1 ' Displayzeile 2-7 Angabe der Gleisnummer Bahn 1-6 max. 1 Zeichen
- Lcd_text "2" , 110 , y2 , 2 , White , Blue ,1
- Lcd_text "2" , 110 , y3 , 2 , White , Blue ,1
- Lcd_text "1" , 110 , y4 , 2 , White , Blue ,1
- Lcd_text "2" , 110 , y5 , 2 , White , Blue ,1
- Lcd_text "1" , 110 , y6 , 2 , White , Blue ,1
- Lcd_text "Dortmund HBF" , 32 , y1 , 2 , White , Blue ,1 ' Bahnbezeichnung Bahn 1-6 max. 13 Zeichen
- Lcd_text "Hagen HBF" , 32 , y2 , 2 , White , Blue ,1
- Lcd_text "Essen HBF" , 32 , y3 , 2 , White , Blue ,1
- Lcd_text "Dortmund HBF" , 32 , y4 , 2 , White , Blue ,1
- Lcd_text "Hagen HBF" , 32, y5, 2 , White , Blue ,1
- Lcd_text "Essen HBF" , 32 , y6 , 2 , White , Blue ,1
- Bahn1 = " " + str(B1) ' Abfahrtszeit für Bahn1 bis Bahn6 max. 2 Zeichen
- Lcd_text Bahn1 , 120 , y1 , 2 , White , Blue ,1
- Bahn2 = " " + str(B2)
- Lcd_text Bahn2 , 120 , y2 , 2 , White , Blue ,1
- Bahn3 = " " + str(B3)
- Lcd_text Bahn3 , 120 , y3 , 2 , White , Blue ,1
- Bahn4 = " " + str(B4)
- Lcd_text Bahn4 , 120 , y4 , 2 , White , Blue ,1
- Bahn5 = " " + str(B5)
- Lcd_text Bahn5 , 120 , y5 , 2 , White , Blue ,1
- Bahn6 = " " + str(B6)
- Lcd_text Bahn6 , 120 , y6 , 2 , White , Blue ,1
- Lcd_text "Uhrzeit" , 10 , 118 , 1 , White , Blue ,1
- tmpString = "00" + Str(Stunden) 'Einblendung der Uhrzeit unterste Displayzeile
- Zeit = Right(tmpString , 2) + ":"
- tmpString = "00" + Str(Minuten)
- Zeit = Zeit + Right(tmpString , 2)
- lcd_text Zeit, 80,118,1,White, Blue ,1
- decr B1 'bei jedem Durchlauf runterzählen der Abfahrtszeit
- decr B2
- decr B3
- decr B4
- decr B5
- decr B6
- 'runterscrollen der abgefahrenen Bahnen
- if B1 = 0 then y1 = 96 'immer wenn die Bahn auf der Anzeige
- if B1 = 0 then y2 = 24 'die Abfahrtszeit 0min erreicht wird diese in
- if B1 = 0 then y3 = 36 'die untereste Zeile geschoben
- if B1 = 0 then y4 = 48 'und alle anderen rücken um 12 Pixel nach oben.
- if B1 = 0 then y5 = 60
- if B1 = 0 then y6 = 72
- if B1 = 0 then B1 = 60
- if B2 = 0 then y2 = 96
- if B2 = 0 then y3 = 24
- if B2 = 0 then y4 = 36
- if B2 = 0 then y5 = 48
- if B2 = 0 then y6 = 60
- if B2 = 0 then y1 = 84
- if B2 = 0 then B2 = 60
- if B3 = 0 then y3 = 96
- if B3 = 0 then y4 = 24
- if B3 = 0 then y5 = 36
- if B3 = 0 then y6 = 48
- if B3 = 0 then y1 = 72
- if B3 = 0 then y2 = 84
- if B3 = 0 then B3 = 60
- if B4 = 0 then y4 = 96
- if B4 = 0 then y5 = 24
- if B4 = 0 then y6 = 36
- if B4 = 0 then y1 = 60
- if B4 = 0 then y2 = 72
- if B4 = 0 then y3 = 84
- if B4 = 0 then B4 = 60
- if B5 = 0 then y5 = 96
- if B5 = 0 then y6 = 24
- if B5 = 0 then y1 = 48
- if B5 = 0 then y2 = 60
- if B5 = 0 then y3 = 72
- if B5 = 0 then y4 = 84
- if B5 = 0 then B5 = 60
- if B6 = 0 then y6 = 96
- if B6 = 0 then y1 = 36
- if B6 = 0 then y2 = 48
- if B6 = 0 then y3 = 60
- if B6 = 0 then y4 = 72
- if B6 = 0 then y5 = 84
- if B6 = 0 then B6 = 60
- Reset FlagRefreshDisplay 'Flag Löschen
- End If
- #endif
- loop
-
Hallo @Thomas1964
Ich glaube du solltest dir mal die Anweisungen (Befehle) in der Hilfe mal genauer ansehen.
Da gibt es im Grunde 2 Arten.
- Eigenständige Anweisungen wie Print, Lcd oder Waitms als Beispiel.
- Dann gibt Block-Anweisungen, also Anweisungen, die immer in Verbindung mit anderen Anweisung zur Anwendung kommen.
Zu einem Do gehört ein Loop,
zu einem While gehört ein Wend.
Zu einem For gehört ein Next,
zu einem Select Case gehört enn End Select, so wie
zu einem If (Als Anweisungsblock) ein End If gehört, was den Anweisungsblock abschließt.
Das gibt es auch bei Direktiven. Stichwort bedingte Compilierung. Da gibt es
#IF .. #ENDIF (zusammen geschrieben) usw.
Eine Hauptschleife muss auch nicht zwingend mit einem Do beginnen.
Man kann eine Hauptschleife auch mit
konstruieren.
Machbar ist das auch mit Label mit Goto.
Das sind alles Grundlagen! - Eigenständige Anweisungen wie Print, Lcd oder Waitms als Beispiel.
-
-
Hallo Heiko,
super, aber wo habe ich den Fehler gemacht ?
Gruß Thomas -
wie Mitch64 schon geschrieben hat das sind Grundlagen
und ganz Wichtig bei Copy and Paste baut man sich schnell Fehler ein.
Es waren nur die beiden schon genannten Fehler.
-
Hallo Heiko,
ich habe mir den Code von Dir angeschaut, und stimmt, es ist mir dann auch aufgefallen.
Werde mich noch mehr in die Basics stürzen.
Aber es ist super, das man hier im Forum eine Solche Hilfe bekommt, dann lernt es sich schneller
und besser.
Vielen Dank nochmal an alle die geholfen haben.
Gruß Thomas -
Hallo Heiko,
noch mal kurz eine Frage, immer wenn das Display die neuen Daten bekommt macht es Striche auf dem Display .
Habe mehrere Displays ausprobiert, aber alle den selben Effekt.
Weißt du woher das kommt, und kann mann das unterdrücken?
Gruß Thomas -
Hier das Bild
-
Hallo Thomas
Ich stecke jetzt nicht tief drin in den Display, die ihr da macht.
Aber die funktionieren alle irgendwie gleich.
Was mir bei deinem Bild auffällt ist, dass die Texte keine Striche haben, auch nicht die invertierten.
Auch die durchgezogenen Linien sind sauber.
Ist jetzt nur eine Vermutung, aber ich glaube es kommt vom Lcd_Clear Befehl.
Versuche da mal verschiedene Farben. -
Hallo Heiko,
du kennst dich doch super mit den Displays aus, warum ist das Feld deutlich höher als der Text ?
Kann man das irgendwo ändern ?
Lcd_text "RB53" , 2 , y1 , 4 , Blue, White
Der Text ist 6x10 Pixel groß, und das Feld fast doppelt so hoch -
Thomas1964 schrieb:
Kann man das irgendwo ändern ?
Man muss nur den Fehler beheben.
Der scheint jetzt in der Zeichenausgabe-Routine zu stecken. Scheint so als ob nur jede 2. Zeile zeile eine Zeile mit Zeichenpixeln ist.
Die Treiber sind von @hkipnik, er findet den Fehler bestimmt schneller als ich.
Bin zudem gerade mit was anderem Beschäftigt und hab grad keine Zeit dafür. -
Das kommt von der Bascom Font Datei die in der Höhe immer auf ganze Bytes angegeben wird,
soll heißen beim Font von 8x10 ist die Höhe dann 16 anstatt 10 Pixel.
für solche Aufgaben gibt es im Programm die Funktion Text Transparent.
erst die weiße Hintergrundbox zeichnen dann den Text reinschreiben.
Lcd_box(10 , 10 , 30 , 20 , 1 , White , White)
Lcd_text( "Font 6x10" , 10 , 10 , 2 , Blue , Transparent) -
Insert ST7735_functions.inc
Code:
'*********************************************************************************
' Draw Rbox (Lekerekített négyzet)
'*********************************************************************************
Sub Lcd_rbox(byval Xstart As Byte , Byval Ystart As Byte , Byval X_length As Byte , Byval Y_height As Byte , Byval Radius As Byte , Byval Color As Word)
Local Xe As Byte , Ye As Byte , Rad as Byte , Yp as byte , Xp as byte , X0 As Byte , Y0 As Byte
Local Error As Integer , Lenght as byte , Hight as byte
Xe = Xstart + X_length
Ye = Ystart + Y_height
If Radius = 0 Then
Call Lcd_line(xstart , Ystart , Xe , Ystart , 1 , Color)
Call Lcd_line(xstart , Ye , Xe , Ye , 1 , Color)
Call Lcd_line(xstart , Ystart , Xstart , Ye , 1 , Color)
Call Lcd_line(xe , Ystart , Xe , Ye , 1 , Color)
Elseif Radius <> 0 Then
Lenght = X_length / 2
Hight = Y_height / 2
If Radius > Lenght then Radius = Lenght
If Radius > Hight then Radius = Hight
Xp = Radius
Error = -radius
Yp = 0
Call Lcd_line(xstart + Radius , Ystart , Xe - Radius , Ystart , 1 , Color)
Call Lcd_line(xstart + Radius , Ye , Xe - Radius , Ye , 1 , Color)
Call Lcd_line(xstart , Ystart + Radius , Xstart , Ye - Radius , 1 , Color)
Call Lcd_line(xe , Ystart + Radius , Xe , Ye - Radius , 1 , Color)
While Xp >= Yp
X0 = Xstart -Yp : Y0 = Ystart -Xp
X0 = X0 + Radius : Y0 = Y0 + Radius '10,5h -9h
Call Lcd_set_pixel(X0 , Y0 , Color)
'
X0 = Xstart - Xp : Y0 = Ystart - Yp '9h-10,5h
X0 = X0 + Radius : Y0 = Y0 + Radius
Call Lcd_set_pixel(X0 , Y0 , Color)
X0 = Xstart + Yp : Y0 = Ystart - Xp
X0 = X0 + X_length : X0 = X0 - Radius : Y0 = Y0 + Radius
Call Lcd_set_pixel(X0 , Y0 , Color)
X0 = Xstart + Xp : Y0 = Ystart - Yp
X0 = X0 + X_length : X0 = X0 - Radius : Y0 = Y0 + Radius
Call Lcd_set_pixel(X0 , Y0 , Color)
X0 = Xstart + Xp : Y0 = Ystart + Yp
X0 = X0 + X_length : X0 = X0 - Radius : Y0 = Y0 - Radius : Y0 = Y0 + Y_height
Call Lcd_set_pixel(X0 , Y0 , Color)
X0 = Xstart + Yp : Y0 = Ystart + Xp
X0 = X0 + X_length : X0 = X0 - Radius : Y0 = Y0 - Radius : Y0 = Y0 + Y_height
Call Lcd_set_pixel(X0 , Y0 , Color)
X0 = Xstart -Yp : Y0 = Ystart + Xp
X0 = X0 + Radius : Y0 = Y0 + Y_height : Y0 = Y0 - Radius
Call Lcd_set_pixel(X0 , Y0 , Color)
X0 = Xstart - Xp : Y0 = Ystart + Yp
X0 = X0 + Radius : Y0 = Y0 + Y_height : Y0 = Y0 - Radius
Call Lcd_set_pixel(X0 , Y0 , Color)
Error = Error + Yp
Incr Yp
Error = Error + Yp
If Error >= 0 Then
Decr Xp
Error = Error - Xp
Error = Error - Xp
End If
Wend
End If
#if Modus = 1
Call Lcd_set_window(0 , 0 , 161 , 129)
#else
Call Lcd_set_window(0 , 0 , 129 , 161)
#endif
End Sub
'*******************************************************************************
Insert ST7735_szubrutin.inc
Code:
Declare Sub Lcd_rbox(byval Xstart As Byte , Byval Ystart As Byte , Byval X_length As Byte , Byval Y_height As Byte , Byval Radius As Byte , Byval Color As Word)
My BASCOM code:
Code:
$regfile = "m128def.dat" 'ATMEGA 128-as mikrokontroller
$crystal = 8000000 '8MHz órajel frekvencia
$hwstack = 250
$swstack = 250
$framesize = 300
'*********************************************************************************
Const Sdcard = 0 'use SD Card = 1 no SD Card = 0
Const Modus = 1 '0=Álló 1=Fekvő
Const Disp_typ = 0 'RGB order 0=Black Tab 1=Red Tab
'*********************************************************************************
Config Sda = PortD.1
Config Scl = PortD.0
Config I2cdelay = 10
' Kijelző pinjeinek konfigurálása
Config Portb.6 = Output
Config Portb.5 = Output
Config Portb.4 = Output
Lcd_cs Alias Portb.6
Lcd_dc Alias Portb.4
Lcd_reset Alias Portb.5
Portb.6 = 1
'*********************************************************************************
' Külső fájlok behívása
$include "ST7735_szubrutin.inc"
'
'*********************************************************************************
' Kijelző konfigurálás és indítás
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1
Spsr = 1 'SPI megszakítás engedélyezése (Atmega 48, 88, 168 esetén)
Spiinit
Dim a as byte
Call Lcd_init()
Call Lcd_clear(White)
Do
For a = 1 to 20
Call Lcd_rbox(0 , 0 , 160 , 128 , a , Blue)
Next
Call Lcd_rbox(10 , 10 , 50 , 50 , 10 , Red)
Call Lcd_rbox(65 , 20 , 20 , 20 , 20 , Green)
Call Lcd_rbox(15 , 80 , 20 , 40 , 0 , Brown)
Call Lcd_rbox(90 , 5 , 40 , 110 , 40 , Black)
Loop
End
$include "ST7735_functions.inc"
$include "Font\Font12x16.font"
$include "Font\Font8x8.font"
$include "Font\font6x10.font"
$include "Font\font10x16.font"
$include "Font\Font8x12.font"