PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Matrixtastatur an PIC



the_Ghost666
05.03.2005, 10:46
Moin zusammen!
Ich möchte eine 8x8 Matrixtastatur an einen pic schalten und das ganze per c programmieren. die spaltenleitungen sollen an pin 0-3 von PORTB hängen, die zeilenleitungen an 4-7. Nun muss ich ja die Spalten als ausgänge definieren und auf high setzen, während die Zeilen als eingänge laufen und dann abwechselnd immer eine spalte auf low ziehen.

nun meine frage: wenn ich TRISB also mit B'00001111' initialisiere und danach per rotationsbefehl PORTB= 1111 1111 (alles high also auch die inputs) die 0 aus dem carryflag da durch schiebe, ändern sich die Pins mit den eingängen auch? will heißen wenn ich einen eingang in PORTB mit 1 beschreibe, ist ihm das egal und er zeigt dennoch den richtigen pegel an, jenachdem ob nun eine taste gedrückt ist oder nicht?oder bekommt er damit den pegel 1 und hält den auch?

ich hoffe das war verständlich ausgedrückt.
ich will mir ne routine in c schreiben die diese tastatur abfragt, aber es wird kompliziert wenn ich nur ein halbes byte ändern darf. wenn dem pic das egal ist, wird meine arbeit leichter.

PicNick
05.03.2005, 11:32
Einerseits ja, andererseits nein:
Input kommt immer vom PIN, es ist ihm also wurst, was du reinschreibst
Andererseit klappt dadurch der RRL direkt aber auch nicht.
Du wirst die Row/Column Bits schon in eigenen Feldern führen müßen, dann mixen und nach Port schreiben u. lesen
Beispielcode: www.sprut.de

the_Ghost666
05.03.2005, 13:29
ja, daher hab ich ja den grundansatz, aber ich wollte das in c machen und steh da vor nem echten denkproblem weil ich nicht direkt darauf komme wie ich das machen soll.
mh was ist denn damit
ich nehme eine for-schleife, die zuerst das das byte mit 1111 1111 beschreibt, dann einmal dreht und dann mit der & funktion die höchsten 4 bytes zurücksetzt. das setze ich dann in PORTB ein.
macht natürlich alles komplizierter

PicNick
05.03.2005, 15:27
War da nicht die Rede von 8x8 Matrix ? da brauchst du ja eh zwei ganze Ports.

the_Ghost666
05.03.2005, 16:39
argh ich bin zu blöd zum schreiben, ich meine 4x4 aber eben mit 8 leitungen

PicNick
05.03.2005, 19:04
Gut.
Also so arg isses auch wieder nicht. Das "Modell" byte machst du besser verkehrt, mit 1-er, is besser zum shiften.


char bMsk;
char bCol;

TRISB = 0x0F;

bMsk = 0x01;
for (iX = 0; iX < 4 ; iX++)
{
PORTB = 0;
PORTB |= ~bMsk;
bCol = PORTB & 0xf0;
// auswerten Taste
bMsk <<= 1;
}


Dazu kommt natürlich noch der ganze spaß mit entprellen und umsetzen auf zeichen. *g*