LCD Goto Anweisung.kleines Problem

Gast #2103321
Lesenswert?

Es geht um die untenstehende goto Anweisung meines Displays von 
Electronic Assembly .
Eigentlich funktioniert alles. Allerdings habe ich jetzt gemerkt das die 
goto Anweisung nicht mehr funktioniert sobald ich den Cursor auf die 
Stelle 2,17 oder 1,17 setzten möchte .

Die LCD Anweisung habe ich zugegebenermaßen aus einem meiner alten 
Projekte kopiert .
In jedem Fall habe ich das Problem auf diese eine Funktion eingegrenzt 
,zumindest wüßte ich nicht wo sonst der Fehler liegen könnte .

Das Display arbeitet by the way im 4-Bit Modus.


1
void lcd_goto(int row, int col)
2
{
3
  row--;        
4
  row&=0b00000001;      
5
  row*=0b01000000;      
6
  col--;        
7
  col&=0b00001111;      
8
  char tmp=row|col;
9
  tmp|=0b10000000;      
10
  lcd_cmd(tmp);    // senden
11
}
Gast #2103413
Lesenswert?

Naja ich hab das Bitmuster jetzt auf 0b11111111 gesetzt .
Die Strings ändern sich in dem Fall ohnehin nicht,sodass deren Länge von 
vornherein klar ist und den "Horizont" des Displays nicht überlaufen 
kann.

Komischerweise wenn ich das Bitmuster beispielsweise auf 0b00010011 
setzte spielt der Cursor erst richtig verrückt .
#2103484
Lesenswert?

chris schrieb:

> Komischerweise wenn ich das Bitmuster beispielsweise auf 0b00010011
> setzte spielt der Cursor erst richtig verrückt .

Was ist da drann komisch?

Wenn du für eine Bank programmierst und bei der Berechnung der Zinsen 
einfach die Zehner und die Hunderter des zu verzinsenden Guthabens 
muwillig auf 0 setzt, ehe du die Zinsen ausrechnest, dann ist das auch 
nicht komisch sondern ein ausgewachsener Programmierfehler.
Und wenn du dann hinten nach noch frägst, was denn daran jetzt falsch 
wäre, dann stehen die Chancen nicht schlecht, dass man dich feuert und 
dir einen Grundlagenkurs in Mathe an der nächsten Volkshochschule 
nahelegt.
#2103690
Lesenswert?

1
#ifdef LCD_4X20
2
#define LCD_COLUMN      20
3
#define LCD_LINE        4
4
#define LCD_LINE1       0x80
5
#define LCD_LINE2       (0x80 + 0x40)
6
#define LCD_LINE3       (0x80 + 0x14)
7
#define LCD_LINE4       (0x80 + 0x54)
8
#endif
9

10
#ifdef LCD_LINE4
11
#define lcd_xy(x, y)    lcd_command((x) + ((y==3) ? LCD_LINE4 : \
12
                                           (y==2) ? LCD_LINE3 : \
13
                                           (y==1) ? LCD_LINE2 : LCD_LINE1 ))
14
#else
15
#ifdef LCD_LINE3
16
#define lcd_xy(x, y)    lcd_command((x) + ((y==2) ? LCD_LINE3 : \
17
                                           (y==1) ? LCD_LINE2 : LCD_LINE1 ))
18
#else
19
#ifdef LCD_LINE2
20
#define lcd_xy(x, y)    lcd_command((x) + ((y==1) ? LCD_LINE2 : LCD_LINE1 ))
21
#else
22
#define lcd_xy(x, y)    lcd_command((x) + LCD_LINE1 )
23
#endif  
24
#endif  
25
#endif


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren