Hallo Kenner !
Ich bin gerade dabei eine Routine zuum Auswerten eines 4x4 Keypads zu schreiben. Am KPd Port sind 4 Pins auf Input und 4 auf Output geschaltet. Je nach Maskierung(Binäre Angabe) ist immer eine Spalte COL1...4 auf Low gezogen. Je nach gedrückter Taste wird dann einer der 4 Eingänge, von HI auf Low gezogen..
Bei der Auswertungschleife breche ich mir den Kopf entwei und finde keinen rechten Anfang.
Ich habe hier mal den Code und hoffe er ist gut genug kommentiert, um zu zeigen wo nach ich suche. Am Port D sind erst mal 8 LED vom Stk500 als Auswertung(Binär).
Ich hoffe es kann mir wer einen "Tritt in den ..." geben, damit ich weiterfinde.
Gruss und DankCode:/* ========================================================================== */ /* */ /* 4x4 Keypad-Abfrage */ /* */ /* ========================================================================== */ #include<avr/io.h> #ifndef F_CPU #define F_CPU 1600000UL #endif #include<util/delay.h> #include <avr/io.h> /* ========================================================================== */ /* PC0...PC3 = Row1...Row4 Taste gedrückt = LOW Pegel */ /* */ /* PC4...PC7 = Col4...Col1 über 5k6 R Schutzwiderstand */ /* */ /* ========================================================================== */ int main(void) { //DDR PortD als Ausgabe für LED Auswertung DDRD = 0xFF; //alles auf HI = LED OFF(STK500) PORTD = 0xFF; //INPUT/OUTPUT Einstellen für PORTC DDRC = 0xF0; // PC0..3 Input PC4..7 Output PORTC = 0x0F; // PullUpR an PC0..3 while (1) { // Voreinstellungen je Col Abfrage //PORTC = 0b01111111 //Col 1 abfragen //PORTC = 0b10111111 //Col 2 abfragen //PORTC = 0b11011111 //Col 3 abfragen //PORTC = 0b11101111 //Col 4 abfragen if (bit_is_clear(PINC, 0)) PORTD = 0xFE; // 0xFE = LED 0 am STK500 ON ..COL1/ROW1 else PORTD =0xFF; if (bit_is_clear(PINC, 1)) PORTD = 0xFD; // 0xFD = LED 1 am STK500 ON...COL1/ROW2 else PORTD =0xFF; } return 0; }
Gerhard
Lesezeichen