mehrere Eingänge gleichzeitig

V

varunme

Guest
Wie kann ich umzuschreiben den Code unten, so dass, machen kann ich zwei Eingangsbits hoch zur gleichen Zeit?
Code:
 void main () {trisd = 0; trisc = 0xff; while (1) {if (portc.f0 == 1) portd.f0 = 1; else if (portc.f1 == 1) portd.f1 = 1; else if (portc.f2 == 1) portd.f2 = 1; else if (portc.f3 == 1) portd.f3 = 1; else if (portc.f4 == 1) portd.f4 = 1; else if (portc.f5 == 1) portd.f5 = 1; else if (portc.f6 == 1) portd.f6 = 1;}}
oder dieser Code funktioniert, wenn wir zwei Schalter simeltanously drücken?
 
Dieser Code wird nicht erkannt mehrere Tastendrücke, weil Sie sind else-if Konstruktion, so dass die letzte Aussage / Vergleich nur ausgeführt, wenn der ehemalige falsch ist, bedeutet. Wenn eine wahr ist, weil die Taste gedrückt wird dann andere sind nicht untersucht und daher zweiten Tastendruck nicht erkannt. Ich generell eher Tastendruck Erkennung ganz anderes machen. Ich einige Pseudo-Code würde dies so aussehen:.-Vorbereitung 2 Variablen: PreviousBtnState und NewBtnState. -Jeder einmal in eine Weile (kann mit Timer ausgelöst werden) zu tun following-Lesen Sie alle Tasten und schreibt sie in NewBtnState (als Bit-Flags zum Beispiel)-Vergleich NewBtnState zu PreviousBtnState und bestimmen Änderungen-entsprechend handeln-copy anstelle von PreviousBtnState NewBtnState - Wiederholen Sie diesen Weg können Sie nicht nur erkennen, Veränderungen in vielen Tasten auf einmal, aber Sie können auch erkennen, Button-Kombinationen sowie differenzieren drücken von Taste loslassen. Dies wird noch einfacher, wenn Sie Bild (von Syntax Ich gehe davon aus, dass das, was Sie verwenden) hat Eingang Änderungsbenachrichtigung Funktionalität. O, und eine echte simultane Detektion (nicht wirklich notwendig, wenn etwas ist über Tastendruck Erkennung) zu erreichen, dann können Sie nur erkennen, logische Zustände, die Single-Port beschränkt sind. U müssen Hafenstaatkontrolle einige variable kopieren und dann prüfen jedes Bit einzeln oder zu vergleichen gegen einige Bit-Muster
 
Einfache so:
Code:
 void main () {trisd = 0; trisc = 0xff; while (1) {PORTD = PORTC;}}
Eine weitere Möglichkeit ist, dass Sie entfernen else [/ I ] -Anweisung von oben Code, den Sie geschrieben. + + +
 
Ich möchte diese Methode zu verwenden, da ich PWM verwenden, anstatt einfach ein-und ausschalten, wenn ein bisschen hoch in PORTC wollen, dann entsprechende Bit in PORTD ist zu 100%, sonst ihren 50%
 
Verwendung, wenn nur, wird der Code nicht funktioniert
 
varunme, Es ist nicht ganz klar, was Sie wollen. Könnte post einige schematische Darstellung der Schaltung? + + +
 
Beispiel 1: if ((portc.f0 == 1) & & (portc.f1 == 1)) portd.f0 = 1; .... example2: if ((PORTC & 0b00000011) == 0b00000011) portd.f0 = 1;
 
Es ist nicht ganz klar, was Sie wollen.
Ich möchte mich auf ein LED-Array nach dem Eingang von den Sensoren wie wenn der Sensor ist hoch dann die entsprechende LED hoch ist, wechseln, wenn zwei Sensoren hoch sind dann die entsprechenden zwei LEDs sind hoch und so weiter
 
Ich vermute, dass Konzept von turbina zur Verfügung gestellt Ihr Problem löst. + + +
 
Aber die Eingänge nicht bekannt sind, kann es nach dem Zufallsprinzip Eingänge von den Sensoren sein, wir können nicht zuordnen ersten oder zweiten bit, in Straßen die Sensoren nach dem Zufallsprinzip aktiviert
 
In der Montage, las ich den Eingangs-Port (der Schalter), dann habe ich einfach schreiben (oder seine Ergänzung) mit dem Ausgang (der LEDs). Ich bin nicht vertraut, wie Sie diese zwei einfachen Anweisungen zu schreiben (oder 3, wenn CPL verwendet wird) mit C;)
 
Gibt es eine Möglichkeit, unbekannte Wert wie "x" ein bisschen wie porta.fx geben? so dass wir in einer Schleife Zugang
 

Welcome to EDABoard.com

Sponsor

Back
Top