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


von chris (Gast)


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
}

von Floh (Gast)


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.

von Karl H. (kbuchegg)


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.

von Peter (Gast)


Lesenswert?

was steht denn im Datenblatt wie man an eine stelle springen kann.

von chris (Gast)


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 .

von spess53 (Gast)


Lesenswert?

Hi

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

Gut, das die nur ein Display vertreiben.

MfG Spess

von Karl H. (kbuchegg)


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.

von Peter D. (peda)


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

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
Noch kein Account? Hier anmelden.