1. Ziele
Erzielen Sie einen Stift auf Dot-Matrix-Bildschirm zu schreiben.
(2) Schaltung Analyse
Dot-Matrix-Bildschirm Handschrift besteht aus drei Hauptteilen: der Zeile Scannen Schaltung, Spalte Scan-Schaltung, Lichtgriffel Erkennungsschaltung Blockdiagramm unten. Lichtgriffel verwendet hier installierten im Inneren einen lichtempfindlichen Sensor zur Erfassung von den Zustand der Gitter-Punkte. Wie folgt:
(1) Line Scan wiederum ermöglichen Decoder Y0, Y1... wirksame, effektive 74ls138 Ausgabe ist zwar niedrig, aber verwenden wir ist gemeinsame Anode Dot-Matrix-Bildschirm, so dass es negiert werden muss, das Design verwendet PNP Transistor negiert. Alle acht Spalten Scannen einmal scannen.
(2) Spalte wiederum Scannen aktivieren Decoder Y0, Y1... effektiv und das Eingangssignal PWM auf OE1, wenn OE1 hohes Y0 ist ~ Y7 sind alle hohen Niveau, wenn OE1 niedrig, ist der Ausgang des Decoders ABC durch die drei Pins entschieden. In Folge gewählt checkten wir im Gegenzug Y0, Y1... und Helligkeit der einzelnen LED-Lampe von OE1 Verordnung.
(3) Lichtgriffel erhielt der Komparator invertierenden Eingang die Referenz-Spannung Einstellung und Lichtgriffel Licht, wenn die Umkehrung Eingangsklemme der Eingangsspannung kleiner als dieser Wert, ist wenn der Lichtgriffel nicht das Licht erhält, wenn die Umkehrung Eingangsklemme der Eingangsspannung größer als dieser Wert, wenn ein bestimmter Wert ist. Wenn der Lichtgriffel nicht erhalten ist das Licht durch die aktuellen R3 sehr klein, so den Eingang des Komparators Eingangsspannung liegt in der Nähe der Versorgungsspannung, invertieren, dann ist der Komparator-Ausgang hoch, wenn der Lichtgriffel Licht erhielt durch den Strom der R3 groß, erhöhen wird die Spannung über R3 erhöhen wird, also die Eingabe für die Eingangsspannung invertierenden Komparator verringert , dann der Komparator-Ausgang niedrig ist, dann der Mikrocontroller kann diese Veränderung zu erfassen und dann machen die geeignete Behandlung.
3. Programm-Analyse
Um das Gitter zu erkennen wir Punkt muss leuchten die LED auf dem Gitter, und es befindet sich im Microlight Zustand, wenn der Hub einen Punkt des Lichtes, setzen Sie diesen Punkt hervorheben getroffen. Also woher wissen wir die Koordinaten dieses Punktes anmachen? Das Prinzip ist Folgendes: die LED beleuchteten eins nach dem anderen, zunächst die erste Zeile des ersten, dann die erste Zeile der zweiten,..., erste Reihe bis zum letzten und dann gehen Sie in die zweite Zeile des ersten Zyklus LED leuchten nacheinander, und jede LED set einen Statuswert, wie der Wert 0 (null) gibt an, ein Mikro-Licht , 1 Vertreter hervorgehoben. Wenn der leichten Hit der Strich eines Punktes, wenn es nicht der Jahrhundertwende diese LED leuchtet, das Licht nicht die Lichtgriffel Lichtgriffel erkennt also die Ausgabe hoch gehalten wird, wenden sich die LED-Leuchten an leuchtet, da das Licht aus der Feder von LED Licht, Ausgabe Lichtgriffel von hoch zu niedrig erkannt , wenn das Gerät erkennt diese bei der Einfahrt in die Interrupt-Reihenfolge zu ändern, und erhalten Sie die aktuelle Zeile, Spaltenwerte, und durch die Reihen, Spalten, ändern der Wert an dieser Stelle den Statuswert ist 1, so dass das nächste Mal es, als war dieses kleine bisschen Licht in diese von der Beurteilung des Statuswert gesetzt wird, um Form zu markieren. Zustand. Wann ist die Scangeschwindigkeit sahen wir die ganze Dot-Matrix-Bildschirm beleuchtet und anstatt eins nach dem anderen beleuchtet.
Referenzfahrt ist wie folgt:
#include
#define COL 1
#define Zeile 2
Int Col = 0; Markieren Sie die aktuelle Zeile gescannt
Int Zeile = 0; Markieren Sie die aktuelle Spalte gescannt
Int LedState [8] [8]; Markieren Sie den aktuellen Status LED
/ * HaveUpdate, Lichtgriffel Jitter zu beseitigen, wenn die erworbenen Lichtgriffel signalisieren fallenden Flanke, wenn die Daten aktualisiert werden, verwendet * und dieses Flag wird voraussichtlich 1 bedeutet, dass die Daten aktualisiert wurde, und öffnen Sie den Timer auf die nächste Klima Jitter * da die Daten, die Vernachlässigung der Jitter, aktualisiert wurden bei der reguläre Zeit zu Zeit dieses Flag neu einstellen 0 * /
Int HaveUpdate = 0;
void setup()
{
Memset (LedState, 0, sizeof(ledState)); Alle Statuswerte werden gelöscht.
initPort(); Port-Initialisierung
TCCR2A = _BV(COM2A0) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(WGM22) | _BV(CS20); Ungeteilte
OCR2A = 100;
OCR2B = 99; Einschaltdauer von 99 %
AttachInterrupt (0, ExternInterrupt, fallen); //Set der externen interrupt fallenden Kante Interrupt
CLI(); Schließen Sie alle interrupts
TCCR1A = 0; Register A konfiguriert PWM, verwenden wir nur die Timer-Funktion
TCCR1B = (1 < TCNT1 = 0xFE79; //Counter Anfangswert, 25ms Timer
TIMSK1 = 0; Überlauf in der Nähe
sei(); Offenen globalen interrupt
} ISR(TIMER1_OVF_vect) {//Timer Interrupt Service-routine
TIMSK1 = 0; Ermöglichen Sie in der Nähe Überlauf interrupt
HaveUpdate = 0; Reset-flag
}
void loop()
{
Scan(); Zyklische scan
}
void externInterrupt() //External Interrupt Service-routine
{
If(haveUpdate == 0)
{
LedState [Zeile] [Kol] = 1; Zeigen Sie nach dem Stand der Zeilen- und Etiketten, die derzeit erkannt werden
HaveUpdate = 1;
TCNT1 = 0XFE79; Zähler Anfangswert, 25ms timer
TIMSK1 =(1< 0)
OCR2B = 1;
anderes
OCR2B = 98;
delayMicroseconds(300);
OCR2B = 98;
}
}
}
Platten aus PCBWayund mehr über Elektronik bei http://e-gather.ui3g.com/.