LCD Goto Anweisung.kleines Problem

Gast #2103321
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
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 .
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.
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

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.