mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD Goto Anweisung.kleines Problem


Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.


void lcd_goto(int row, int col)
{
  row--;        
  row&=0b00000001;      
  row*=0b01000000;      
  col--;        
  col&=0b00001111;      
  char tmp=row|col;
  tmp|=0b10000000;      
  lcd_cmd(tmp);    // senden
}

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
chris schrieb:
> Stelle 2,17 oder 1,17 setzten möchte .
Klar. col wird auch abgeschnitten mit dieser Aktion:
> col--;
>   col&=0b00001111;
mit col = 17 ergibt sich als Bitmuster 0.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
chris schrieb:

>   col&=0b00001111;

von col bleiben die untersten 4 Bit übrig. D.h. nach dieser Anweisung 
KANN col nur noch Werte im Bereich 0 bis 15 haben.

Zusammen mit dem col-- unmittelbar davor, hast du damit Spaltennummern 
von 1 bis maximal 16. 17 ist ganz einfach nicht darstellbar.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was steht denn im Datenblatt wie man an eine stelle springen kann.

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 .

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Es geht um die untenstehende goto Anweisung meines Displays von
>Electronic Assembly .

Gut, das die nur ein Display vertreiben.

MfG Spess

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#ifdef LCD_4X20
#define LCD_COLUMN      20
#define LCD_LINE        4
#define LCD_LINE1       0x80
#define LCD_LINE2       (0x80 + 0x40)
#define LCD_LINE3       (0x80 + 0x14)
#define LCD_LINE4       (0x80 + 0x54)
#endif

#ifdef LCD_LINE4
#define lcd_xy(x, y)    lcd_command((x) + ((y==3) ? LCD_LINE4 : \
                                           (y==2) ? LCD_LINE3 : \
                                           (y==1) ? LCD_LINE2 : LCD_LINE1 ))
#else
#ifdef LCD_LINE3
#define lcd_xy(x, y)    lcd_command((x) + ((y==2) ? LCD_LINE3 : \
                                           (y==1) ? LCD_LINE2 : LCD_LINE1 ))
#else
#ifdef LCD_LINE2
#define lcd_xy(x, y)    lcd_command((x) + ((y==1) ? LCD_LINE2 : LCD_LINE1 ))
#else
#define lcd_xy(x, y)    lcd_command((x) + LCD_LINE1 )
#endif  
#endif  
#endif  


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.