Danke vorerst !
ich werde es auch in einer Schleife machen..nur hatte ich beim ersten Versuch nur negative Aussagen, es wurden alle Tasten bestätigt obwohl keine gedrückt war. Darum habe ich das obere Listing zum Test geschrieben.
Nun muss ich sehen das ich immer die benutzte Taste(Row/Col) indentifizieren kann, also richtig auswerten kann.. Das ist mein Code jetzt, geht immer noch nicht, LED an BIT 1+2 sowie 4+5 leuchten ständig...Die Tastenauswertung zeigt den Wasserstand Honulullu... aber nix logisches
Code:
/* ========================================================================== */
/* */
/* 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 = 0b11110000; // PC0..3 Input PC4..7 Output
PORTC = 0b00001111; // PullUpR an PC0..3
while (1)
{ //PORTD = 0xFF; //Alles wieder OFF (LED= LOW aktiv)
// Voreinstellungen je Col Abfrage
//PORTC = 0b01111111 //Col 1 abfragen
//PORTC = 0b10111111 //Col 2 abfragen
//PORTC = 0b11011111 //Col 3 abfragen
//PORTC = 0b11101111 //Col 4 abfragen
PORTC = 0b01111111; //Col 1 abfragen PINC 7 = LOW
if (!(PINC & (1 << PC3))) PORTD=0b11111110;
if (!(PINC & (1 << PC2))) PORTD=0b11111101;
if (!(PINC & (1 << PC1))) PORTD=0b11111011;
if (!(PINC & (1 << PC0))) PORTD=0b11110111;
PORTC = 0b10111111; //Col 2 abfragen PINC 6 = LOW
if (bit_is_clear(PINC, 3)) PORTD=0b11110111;
if (bit_is_clear(PINC, 2)) PORTD=0b11101111;
if (bit_is_clear(PINC, 1)) PORTD=0b11011111;
if (bit_is_clear(PINC, 0)) PORTD=0b10111111;
PORTC = 0b11011111; //Col 3 abfragen PINC 5 = LOW
if (bit_is_clear(PINC, 3)) PORTD=0b11111110;
if (bit_is_clear(PINC, 2)) PORTD=0b11111101;
if (bit_is_clear(PINC, 1)) PORTD=0b11111011;
if (bit_is_clear(PINC, 0)) PORTD=0b11110111;
PORTC = 0b11101111; //Col 4 abfragen PINC 4 = LOW
if (bit_is_clear(PINC, 3)) PORTD=0b11110111;
if (bit_is_clear(PINC, 2)) PORTD=0b11101111;
if (bit_is_clear(PINC, 1)) PORTD=0b11011111;
if (bit_is_clear(PINC, 0)) PORTD=0b10111111;
}
return 0;
}
Nochmals zum Verständnis, die gedrückte Taste zieht den PINC0..3 Eingang auf LOW dann soll der PIND0..7 Ausgang auf LOW.
Es gibt 4x4 versch Auswertungen je welcher PINC4...7 auf LOW ist und welcher PINC0..3 auf LOW gezogen wird durch die Taste.
Hat wer einen Rat..ich bin im Gedanken-Dschugel angekommen
mfg
Gerhard
Lesezeichen