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
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.
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.
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
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 | // Setzt den Cursor in Zeile y (0..3) Spalte x (0..15)
|
3 | |
4 | void lcd_setcursor( uint8_t x, uint8_t y ) { |
5 | uint8_t data; |
6 | |
7 | switch (y) { |
8 | case 0: // 1. Zeile |
9 | data = LCD_SET_DDADR + LCD_DDADR_LINE1 + x; |
10 | break; |
11 | case 1: // 2. Zeile |
12 | data = LCD_SET_DDADR + LCD_DDADR_LINE2 + x; |
13 | break; |
14 | case 2: // 3. Zeile |
15 | data = LCD_SET_DDADR + LCD_DDADR_LINE3 + x; |
16 | break; |
17 | case 3: // 4. Zeile |
18 | data = LCD_SET_DDADR + LCD_DDADR_LINE4 + x; |
19 | break; |
20 | default:
|
21 | return; // für den Fall einer falschen Zeile |
22 | }
|
23 | |
24 | lcd_command( data ); |
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
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 //======================================
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.