Äh: Sowohl ich als auch Mark haben genau das gepostet: Eine Idee für
den mehrfachen Aufruf.
Natürlich kannst Du Dir auch eine Funktion basteln, die das kapselt, à
la
Sorry, meinte noch was anderes.
Möchte die 8 Sonderzeichen mehrfach verschieden aufrufen. So wie das
erste mal 8 Zeichen für einen Displayaufbau, wie striche, Ecken usw.
Beim zweiten mal Sonderzeichen für Gebäude, z.B. Anzeige ob Ausgang
An/aus, Gerät ein / aus. Als dritte Anzeige 8 Sonderzeichen z.B. über
Gefahren. Das andere ist klar
achim
Hi
>Möchte die 8 Sonderzeichen mehrfach verschieden aufrufen.
Dann musst du halt jedes mal die passenden Sonderzeichen in den
Displaycontroller laden.
MfG Spess
@ Achim Seeger
Theoretisch solltest Du, wenn Du einen Zeichensatz definieren kannst,
denselben Vorgang auch für andere Zeichensätze beliebig oft und an
beliebigen Stellen durchführen können, resp. ein solches Programm
schreiben können.
Das setzt natürlich voraus, das Du C kannst, die Technik der
Unterprogramme kennst und ein gewisses theoretisches Verständis vom
Begriff der Abstraktion in Bezug auf die Programmierung hast. Was ist
jetzt im Detail Dein Problem?
Beachte allerdings, das Du, (ich hoffe ich irre mich da nicht), immer
nur EINEN eigenen Satz aus 8 Zeichen gleichzeitg anzeigen kannst.
D.h. es ist NICHT möglich, erstmal einen Zeichensatz mit 8 verschiedenen
Häusern (mit und ohne Balkon, Schornstein und Terasse) zu definieren,
diese alle anzuzeigen und danach einen neuen Zeichensatz mit
Gartenzwergen zu definieren (mit und ohne Hacke, Giesskanne und Bart) zu
definieren und während noch die Häuser angezeigt werden, jeweils einen
besonderen Gartenzwerg davorzustellen. War das Deine Frage?
Es wäre vielleicht sinnvoll, das Du mal ausführlich erklärst wie Du
darauf kommst, das da eine Verschachtelung notwendig ist. Das scheint
mir ein grundlegendes Verständnisproblem bei der Programmierung zu sein.
Jedenfalls läuft es dann etwas so:
1
staticconstPROGMEMunsignedcharZeichensatz1[]=
2
{
3
0x00,...
4
};
5
6
staticconstPROGMEMunsignedcharZeichensatz2[]=
7
{
8
0x00,...
9
};
10
11
staticconstPROGMEMunsignedcharZeichensatz3[]=
12
{
13
0x00,...
14
};
15
16
main{
17
...
18
19
for(i=0;i<64;i++)
20
{
21
lcd_data(pgm_read_byte_near(&Zeichensatz1[i]));
22
}
23
24
// Verwendung von Zeichensatz 1
25
26
for(i=0;i<64;i++)
27
{
28
lcd_data(pgm_read_byte_near(&Zeichensatz2[i]));
29
}
30
31
// Verwendung von Zeichensatz 2
32
33
for(i=0;i<64;i++)
34
{
35
lcd_data(pgm_read_byte_near(&Zeichensatz3[i]));
36
}
37
38
// Verwendung von Zeichensatz 3
39
40
...
41
}
Im übrigen könnte es nützlich sein, wenn Du verstehst, das Du NICHT
jedesmal den kompletten Zeichensatz austauschen musst. Du kannst auch
einzelne Zeichen im LCD austauschen.
vor allem musst du den überblick behalten wann welcher zeichensatz aktiv
und damit nutzbar ist und darfst den zeichensatatz/ das zeichen nur
tauschen wenn es gerade nicht angezeigt wird.
>Für das nächste mal muss ich neu laden, mit einem anderen Namen.>Das erste mal mit diesem. Das zweite und mehr einen anderen Namen.
Mir ist nicht so ganz klar, warum Du hier so deutlich auf die "Namen"
abfährst. Die Namen wovon genau?
Der einzige "Name" der hier eine Rolle spielt ist der Name der
Variablen, die Deinen Zeichensatz enthält.
Das Inhalte über den Namen der Variablen identifiziert werden (im
Kontext der Programmierung nennt man das Variablenname), ist eigentlich
Grundlage der Programmierung. Verschiedene Werte werden über den Namen
der sie enthaltenden Variablen unterschieden.
Vielleicht erklärst Du mal, was es für Dich mit den Namen auf sich hat.
> ... darfst den zeichensatatz/ das zeichen nur tauschen wenn es gerade >nicht
angezeigt wird.
Wobei noch zu ergänzen wäre, Winfried, dass es technisch durchaus
möglich ist, die Zeichendefinition zu ändern, während es angezeigt wird.
Natürlich ist es seltsam, wenn sich bei einer Anzeige auf einmal ein
Zeichen ändert. Es kann dann sein, dass die Anzeige auf einmal keinen
Sinn mehr ergibt.
Darauf bezogst Du Dich wahrscheinlich, Winfried.
Ich merke das hier nur an, weil Deine Verwendung von "darfst" einem
Anfänger möglicherweise suggeriert, das es andernfalls zu Fehlfunktionen
oder gar Defekten kommt.
Man kann immer nur 8 verschiedene Sonderzeichen darstellen.
Kürzlich war ein Thread, wo mehr dargestellt wurden. Dann ist aber die
CPU zu 100% beschäftigt, ist also praktisch nutzlos.
@ Peter Dannegger
> Man kann immer nur 8 verschiedene Sonderzeichen darstellen.
Nanu? Das ist hier schon geschrieben worden:
Beitrag "Re: Selbstdefinierte Zeichen"
Oder war etwas missverständlich?
und eine dieser Funktionen aufrufen, ehe du dann die entsprechenden
Zeichen benutzt.
1
#define OK_SYMBOL 1
2
#define LEFT_ARROW_SYMBOL 2
3
4
....
5
6
voidMenu1()
7
{
8
lcd_clrscr();
9
LoadGUIChars();
10
11
lcd_putc(OK_SYMBOL);
12
lcd_string("erster Punkt");
13
14
lcd_putc(LEFT_ARROW_SYMBOL);
15
lcd_string("zweiter Punkt");
16
}
(die #define wird man sinnvollerweise zu den Zeichensatzdefinitionen mit
dazu nehmen)
Du stehst jetzt an einem Punkt, an dem die Sprache C immer unwichtiger
wird und die Kombinationen und die Möglichkeiten die dir die Sprache
gibt immer wichtiger werden. Jetzt fängt programmieren erst richtig an!
Du bist der Programmierer, du kombinierst die Elemente der Sprache zu
einem Programm. Genau aus dem Grund predige ich hier im Forum wieder und
immer wieder: lernt die Grundlagen eurer Sprache. Aber lernt sie gut!
Denn ansonsten werdet ihr von der Programmiersprache erschlagen. Man
muss seine Sprache in Summe gut beherrschen - es reicht nicht nur 30%
der Sprache zu kennen, denn dann weißt du nicht, welcher Möglichkeiten
du eigentlich hast, was du überhaupt zur Verfügung hast um es
einzusetzen. Alles hängt irgendwie mit allem anderen zusammen und erst
in Summe ergibt sich dann das mächtige Werkzeug, das eine
Programmiersprache darstellt. Das ist wie Schach: die Grundlage sind die
Möglichkeiten wie die Figuren ziehen können. Aber die Komplexität eines
Schachspiels und die Möglichkeiten ergeben sich daraus. Das ist nichts,
was in die Figuren eingebaut wäre. Erst alle Figuren zusammen, ihre
Schlagmöglichkeiten, ihre Zugmöglichkeiten machen das aus, was ein
Schachspiel ausmacht. Nur weil man von ein paar Figuren weiß, wie sie
ziehen können, ist man noch lang kein Schachspieler. Man ist auch dann
noch kein Schachspieler, wenn man das von allen Figuren kennt. Aber in
der Umkehrung kann man nie ein Schachspieler werden, wenn man nicht alle
Figuren mit allen Zugmöglichkeiten kennt.
Und deswegen predige ich unermüdlich hier im Forum: Lernt eure Sprache
und lernt sie gut! Sie sind die Schachfiguren, mit denen man arbeitet.
Alles weitere ist dann ein Kombinieren der Möglichkeiten die man hat.
Und daran lernt man ein Leben lang.
Aber die wenigsten wollen das hören.
Danke Karl Heinz
Sehe jetzt deutlich, das ich es nicht zuende gedacht habe, war aber auf
dem richtigen weg. Damit habe ich alle Möglichkeite, Anzeige und
Programm anzupassen. Wunderbar. Danke.
Hallo Spess53
Danke für die Info, hatte es übersehen. Der Preis ist unschlagbar. Habe
mich gerade von einen Graphik zu einem Textdisplay bewegt und es soweit
in den griff bekommen. Bei diesem Typ ist der SED 1520 angegeben, ist
der identisch? Sorry muss mir erst die Daten holen. Was ich jetz auf die
schnelle nicht weiss, wie ist die Ansteuerung und die Ausgabe in Bezug
auf die lcd-put usw, ist die gleich oder was ist der Unterschied? Meine
damit z.B. das zeichnen von strichen oder box
achim
@ Karl Heinz
Ich scheine überhaupt nicht begriffen zu haben, was das Problem des TO
war.
Magst Du Dir mal kurz meine Antworten anschauen und einen kurzen
Kommentar geben? Das wäre nett.
Hi
>Bei diesem Typ ist der SED 1520 angegeben, ist der identisch?
Wenn du identisch mit dem HD44780 meinst, dann nein. Aber der SED1520
ist ein Grafikcontroller mit einem recht übersichtlichen Befehlssatz.
Aber ist er recht alt, so das sich recht viel im Internet finden lässt.
MfG Spess
Oh. Falscher Name. Sorry.
@ Karl Heinz
Ich scheine überhaupt nicht begriffen zu haben, was das Problem des TO
war.
Magst Du Dir mal kurz meine Antworten anschauen und einen kurzen
Kommentar geben? Das wäre nett.
Grummel schrieb:> @ Karl Heinz>> Ich scheine überhaupt nicht begriffen zu haben, was das Problem des TO> war.> Magst Du Dir mal kurz meine Antworten anschauen und einen kurzen> Kommentar geben? Das wäre nett.
Ich kann jetzt nicht ganz nachvollziehen, welche Antwort von dir war.
Wenn ich aber so alle Antworten durchsehe, dann würde ich von keiner
sagen, dass sie am Thema vorbei geht. Alle beantworten die etwas
unpräzise gestellte Frage auf ihre eigene Art und Weise, wobei der Fokus
der einzelnen Antworten auf anderen Teilaspekten liegt, je nachdem was
der Beantworter meint, aus der Frage herausgelesen zu haben.
Ich persönlich konzentriere mich als erstes meistens auf Sprachprobleme,
Funktionsaufrufe etc. und liege damit meistens nicht so schlecht, wenn
es darum geht zu erraten, was das eigentliche Problem des Fragestellers
ist.
Obwohl ich mitlerweile denke, dass der Knackpunkt an dieser Stelle die
TO-Annahme war, dass man den Zeichensatz nur einmal laden kann und dass
dies unbedingt am Programmanfang passieren muss.
>Ich kann jetzt nicht ganz nachvollziehen, welche Antwort von dir war.
Tschuldigung. Mein Fehler.
Jedenfalls Danke für den Kommentar.
> ... die TO-Annahme war ...
Ein Problem, das ich eigentlich immer versuche zu klären in dem ich nach
den Gründen für die diversen Annahmen frage. Man bekommt aber fast nie
eine Antwort darauf. (Siehe in diesem Thread die Frage nach der
Bedeutung der "Namen" oder die Frage nach der "Verschachtelung").
Ich will da jetzt keine Diskussion anfangen. Dankeschön, jedenfalls.