Witam.
Oprogramowuje klawiaturę membranową 4x3. Wszystko działa pozą pewnym mankamentem, a mianowicie po naciśnięciu 1 wyświetla się 4, po naciśnięciu 4, 7 - wszystko przesunięte w kolumnie +1. O dziwo inne przyciski (w kolumnie 2 i 3) działają dobrze. Mikrokontroler to Atmega16.
Kod:
Wiersze podłączone do PB0...PB3 kolumny PB4...PB6
Nie wiem gdzie leży przyczyna bo po przeanalizowaniu kodu wszystko powinno działać. Np. dla pierwszej iteracji (gdy ma wyświetlić 1):
if(!(PINB & col))
PB6/PB5/PB4/PB3/PB2/PB1/PB0
1 1 0 1 1 1 0 - stan PINB
0 0 1 0 0 0 0
Wynik:
1 1 1 1 1 1 1
Na PB4 stan niski wymuszony jest naciśnięciem przycisku "1". Więc funkcja powinna zwrócić 1, ale zwraca 4. Co może być nie tak?
Oprogramowuje klawiaturę membranową 4x3. Wszystko działa pozą pewnym mankamentem, a mianowicie po naciśnięciu 1 wyświetla się 4, po naciśnięciu 4, 7 - wszystko przesunięte w kolumnie +1. O dziwo inne przyciski (w kolumnie 2 i 3) działają dobrze. Mikrokontroler to Atmega16.
Kod:
Kod: C / C++
Wiersze podłączone do PB0...PB3 kolumny PB4...PB6
Nie wiem gdzie leży przyczyna bo po przeanalizowaniu kodu wszystko powinno działać. Np. dla pierwszej iteracji (gdy ma wyświetlić 1):
if(!(PINB & col))
PB6/PB5/PB4/PB3/PB2/PB1/PB0
1 1 0 1 1 1 0 - stan PINB
0 0 1 0 0 0 0
Wynik:
1 1 1 1 1 1 1
Na PB4 stan niski wymuszony jest naciśnięciem przycisku "1". Więc funkcja powinna zwrócić 1, ale zwraca 4. Co może być nie tak?