Laufschrift mit einem PSoC
von
am 11.08.2011 um 21:30 (3236 Hits)
Heyho,
da meine Freundin eine Weile bei mir war, konnte ich leider nicht so viel basteln was aber auch nicht so schlimm war
Ich hab dann beschlossen was für meine Freundin zu basteln . Als Grundlage hab ich meine PSoC Seminarplatine genommen, die 4 7-Segmentanzeigen besitzt. Und für diese hab ich ein kleines Laufschriftprogramm geschrieben.
Das Programm ist sehr simpel gehalten. Es besteht aus zwei Arrays. Ein Array beinhaltet die Informationen wie die 7-Segmentanzeige für den jeweiligen Buchstaben angesteuert werden muss.
Das sieht so aus:
unsigned char ascii[] =
{
};
119,124,57,94,121,113,61,118, // ABCDEFGH 6,30,0,56,0,55,63,115, // IJ_L_NOP 0,80,109,120,62,0,0,0, // QRSTU___ 110,0 // YZ
Die Zahlen stehen für jeweils 1 Byte, welches die Informationen beinhaltet, welcher Pin auf High und welcher auf Low gesetzt wird. Wie man sieht steht die Zahl 119 für A und 124 für B usw.
Das zweite Array steht für den Satz welchen man auf den 7-Segmentanzeigen anzeigen möchte. Dieses Array sieht so aus:
unsigned char text[] = "ZZZZZZZZZZZHALLOZZZZZZZZZZZZZZ";
Dieses Array besteht aus 30 stellen und der Text wird dort einfach reingeschrieben. Die "Z" stehen für leere Stellen auf den Anzeigen, wie man auch in dem "ascii" Array sieht, da für "Z" der Wert 0 angegeben ist.
Das ganze Programm besteht nun aus zwei Zählern. Der eine Zählt die Stellen in dem Array "text" durch und der andere die Segmente.
Die "Hauptarbeit" übernimmt dabei diese Zeilen:
for (Segment = 0; Segment < 4; Segment++)
{
LED7SEG_PutPattern(ascii[text[Zaehler_Text+Segment]-65],Segment+1);
}
Dies ist eine for-Schleife die alle Segmente, die von 0-3 durchnummeriert sind, durchzählt. Anschließend wird mit
LED7SEG_PutPattern(ascii[text[Zaehler_Text+Segment]-65],Segment+1);
1 Byte auf einer 7-Segmentanzeige ausgegeben. Das geschieht so. Mit
Zaehler_Text+Segment
wird die Stelle aus dem Array "text" festgelegt, welches ausgelesen werden soll. Wenn das nun das erste Zeichen sein soll, steht der "Zaehler_Text" auf 0 und "Segment" auch auf 0. Das heißt von dem Array "text" wird die 0. Stelle ausgelesen, also ein "Z" (wenn man das Beispiel von oben nimmt). Ein "Z" hat den ASCII-Wert von 90. Von diesen 90 werden 65 abgezogen und damit erhält man 25. Diese Zahl steht dann für eine Stelle in dem Array "ascii". In meinem Beispiel ist die 25. Stelle dann ein Z oder der Wert 0 (Array beginnen mit 0). Dieser Wert 0 wird nun mit dem Befehl:
LED7SEG_PutPattern
auf die 7-Segmentanzeige übertragen und man sieht nichts. Also eine Leerstelle. Wenn man dieses Beispiel nun auf das "H" aus "HALLO" überträgt, würde das so aussehen:
"H" hat einen ASCII-Wert von 72. Davon werden 65 abgezogen und man erhält 7. Diese 7 steht für die 7. Stelle in dem Array "ascii". An der 7. Stelle steht der Wert 118. Dieser wird nun an den Port ausgegeben der die 7-Segmentanzeige ansteuert. Es wird ein "H" angezeigt.
Anschließend wird mit
Segment+1
der Zähler für die Segmente um 1 erhöht.
Und so wird jede Sekunde ein neuer Buchstabe angezeigt und man erhält eine Laufschrift .
Wem das Programm gefällt, ich hab es im Anhang angehängt. Zusammen mit dem Schaltplan für das Board welches ich verwendet habe. Die 7-Segmentanzeigen kann man bis 8 erweitern und dementsprechend auch das Programm. Man kann jeden Text anzeigen lassen, welcher die oben gezeigten Buchstaben besitzt
Damit kann man z.B. eine schöne Liebeserklärung für seine Freundin basteln
Bis dahin
Daniel