Hallo zusammen,
ich versuche gerade einen PCF8574 an meinem MSP ans Laufen zu bekommen.
Das funktioniert eigentlich auch soweit. Ich habe an die Ports P4-P7
LEDs angeschlossen und an die anderen Ports Taster. Ich kann die LEDs
zum Leuchten bringen und die Taster abfragen. Zur Kontrolle habe ich ein
Programm geschrieben, mit welchem man mit jedem Taster eine LED
anschalten kann. Im Moment bin ich soweit, dass bei jedem Tastendruck
die entsprechende LED an geht und auch die LEDs, die bereits an sind an
bleiben.
Nun würde ich das ganze gerne so erweitern, dass die LEDs bei
entsprechendem Tastendruck auch wieder aus gehen. Ich drücke also Taster
1 -> LED 1 geht an, erneutes Drücken von Taster 1 -> LED 1 geht wieder
aus. Allerdings hab ich keine Idee, wie man das umsetzen könnte. Ich
hatte überlegt für jede LED eine Variable anzulegen, um zu speichern, ob
die LED gerade an ist. Das ginge sicherlich, aber geht es nicht
vielleicht auch noch einfacher, effizienter? Hat jemand eine Idee?
Hier einmal ein Teil des Codes:
1 | for(;;)
|
2 | {
|
3 | input= pcf8574_get_inputs(0x20);
|
4 | in= input;
|
5 | switch (in|=0xF0) // |=0xF0 dient als Maske, damit nur die ersten
|
6 | // vier Bit (Port 0-3) des PCF8574 ausgewertet
|
7 | // werden
|
8 | {
|
9 | case 254:
|
10 | pcf8574_set_outputs(0x20, input & 0xEF | 0x0F);
|
11 | break;
|
12 | case 253:
|
13 | pcf8574_set_outputs(0x20, input & 0xDF | 0x0F);
|
14 | break;
|
15 | case 251:
|
16 | pcf8574_set_outputs(0x20, input & 0xBF | 0x0F);
|
17 | break;
|
18 | case 247:
|
19 | pcf8574_set_outputs(0x20, input & 0x7F | 0x0F);
|
20 | break;
|
21 | }/* switch (input|=0xF0) */
|
22 | }/* for(;;) */
|
Grüße
Martin