Hallo Forumsteilnehmer, ich habe an meinem PIC18F4580 ein 4x40 Display, welches mehrseitig beschrieben ist und alles funzt wunderbar. Da ich auch Zahlen darstelle, welche ich verändern möchte, möchte ich den Cursor blinkend zum Anzeigen der Zahl, welche ich grad verstellen kann benutzen. Schreib ich CURSOR_ON mit in die OpenXLCD rein, so hab ich in der 3. Zeile alles Kästchen. OpenXLCD(FOUR_BIT & LINES_5X7 ); Zeile 1 und 2 while( BusyXLCD() ) { } Delay1KTCYx(75); OpenXLCD_2(FOUR_BIT & LINES_5X7 & CURSOR_ON ); Zeile 3 und 4 while( BusyXLCD_2() ) { } Kann mir jemand einen Tip geben, was ich für eine Reihenfolge abarbeiten muss? Ich benutze MPLAb C18. Es gibt auch noch den Befehl BLINK_ON. Muss ich gar beide benutzen? Danke im Voraus. Daniel
Gast
#4110639
Daniel EGAL schrieb: > (FOUR_BIT & LINES_5X7 & CURSOR_ON ); Bist Du Dir sicher, das Du das mit & und nicht mit | verknüpfen mußt? Kenne das von den AVRs so.
Gast
#4110665
Ich wuerde die WriteCmdXLCD-Funktion verwenden.Beispiele sind in der pdf-Datei angegeben. Hab den Lib-Sourcecode nicht gecheckt, aber offensichtlich lassen sich nur mit dieser Funktion (im Gegensatz zur OpenXLCD)verschiedene Displayeinstellungen vornehmen.
Versuch mal void SetDDRamAddr(PARAM_SCLASS unsigned char);
Hallo und Danke für den Tip !! Schreib ich nur WriteCmdXLCD( BLINK_ON ); steht der Cursor an der ersten Stelle. Schreib ich SetDDRamAddr((unsigned char) 3); // 1. Zeile 4 Stelle im Display WriteCmdXLCD( BLINK_ON ); für die 4. Stelle steht der Cursor trotzdem an der ersten Stelle. Was mache ich nur falsch? Vorab Danke. Daniel
Gast
#4110831
Vergiss nicht die Zeile: while( BusyXLCD() ); vor dem Aufruf von setDDram/writeCMd-Funktionen zu verwenden. Also immer wenn Du eine Funktion aufrufst, muss zuvor das Busy-Flag getestet werden,ansonsten schreibst Du Daten oder Commands zum Display die der Lcd-Kontroller nicht verarbeiten kann,weil er noch mit was anderem beschaeftigt ist.
@Daniel EGAL (everyday_fun69) >SetDDRamAddr((unsigned char) 3); // 1. Zeile 4 Stelle im Display SetDDRamAddr(3); reicht >für die 4. Stelle steht der Cursor trotzdem an der ersten Stelle. Was >mache ich nur falsch? SetDDRamAddr(4); sollte funktionieren. Sinnvollerweise schreibst du dir eine Funktion zum Setzen des Cursors, das ist vor allem hier wichtig, weil dieses LCD 2 Controller hat (einer für die Zeilen 1+2, einer für 3+4. Wie diese prinzipiell aussieht, sieht man u.a. hier. Erweiterte LCD-Ansteuerung
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
Hallo Gemeinde, ich habe den Code mal eingebaut, jedoch steht der Cursor immer noch an der ersten Stelle. while( BusyXLCD() ); SetDDRamAddr((unsigned char) 6); // 1. Zeile im Display WriteCmdXLCD(BLINK_ON ); SetDDRamAddr((unsigned char) 0); // 1. Zeile im Display putrsXLCD(( char*)"Uhrzeit"); Im übrigen habe ich für Zeile 1+2 eine xlcd.h und für Zeile 3+4 eine xlcd_.h. Siehe auch mein Thread hier: Funzt wunderbar. Beitrag "Error - could not find definition of symbol 'putrsXLCD_2' in file 'D:\LCD_2015\main.o'." Was könnte den noch die Ursache sein? Danke und Grüße. Daniel
Gast
#4112070
Daniel EGAL schrieb: > while( BusyXLCD() ); > SetDDRamAddr((unsigned char) 6); // 1. Zeile im Display > WriteCmdXLCD(BLINK_ON ); > SetDDRamAddr((unsigned char) 0); // 1. Zeile im Display > putrsXLCD(( char*)"Uhrzeit"); Die logische Abfolge waere so: //====================================== while( BusyXLCD() ); WriteCmdXLCD(BLINK_ON ); // dies sollte schon bei der initialisierung // des Lcd's erfolgen - der Uebersicht wegen... while( BusyXLCD() ); // Lcd ready? SetDDRamAddr(0) // Cursor an 1. Stelle while( BusyXLCD() ); // Lcd ready? putrsXLCD( "Uhrzeit" ); // Texteinblendung while( BusyXLCD() ); // Lcd ready? SetDDRamAddr(6); // Cursor an 7.Stelle & sollte zudem blinken //======================================
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.