So, hier ist der fertige und korrigierte Code.
Die 3x4 Tastatur kann man wie im Schaltplan anschliessen.
Ich habe das Programm so geschrieben, dass der PIC zwichen den Tasten 1, 2 und 3 und den Zeilen 2, 3 und 4 unterscheiden kann.
Ich brauche halt nicht alle 12 Tasten.
Wer sie doch braucht, muss nur den Code der ersten Zeile Kopieren und die Pins ändern.
Der Code ist schwar nicht sehr "sauber", aber ich hoffe man kann ihn verstehen und es nützt ja vieleicht auch noch jemanden der auch eine Tastatur an einen PIC anschliessen will.
Code:
#include <pic1687x.h>
#define PORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit))
//-------------------------------------------------------------------------
unsigned int zahl;
void main (void)
{
ADCON1=6; // PortA Pins als digital definiert
TRISA = 0x00; //Port A = Ausgang mit LEDs
TRISB = 0b00011111; //RB0 - RB4 = Eingänge, RB5 - RB7 = Ausgänge
//RB0 brauchen wir im Moment nicht
PORTA = 0b00000000;
PORTB = 0b00011110; // RB5-RB7 auf Low und RB1-RB4 auf High
//RB1 - RB4 auch mit Pull-up Wiederständen auf High
//--------------------------------------------------------------------------------
// 3x4 Matrix Tastatur
do{
zahl=0;
if (RB1 == 0){ // 1, 2 oder 3. RB5-7 werden nacheinander auf
//High gesetzt
RB5=1;
if (RB1==1){ //Taste=1
zahl=zahl+1;
RB5=0;
}
else{
RB5=0;
RB6=1;
if (RB1==1){ //Taste=2
zahl=zahl+2;
RB6=0;
}
else{
RB6=0;
RB7=1;
if (RB1==1){ //Taste=3
zahl=zahl+3;
RB7=0;
}
}
}
} //if (RB1==0)
else if (RB2 == 0){ // 4, 5 oder 6
zahl=3; // hier kann man den selben Code wie bei den
//Tasten 1-3 schreiben
zahl=3+1; //nur RB1 durch RB2 ersetzen usw.
}
else if (RB3 == 0){ // 7, 8 oder 9 das selbe wie eben
zahl=6;
zahl=6+1;
}
else if (RB4 == 0){ //#, 0 oder *
zahl=10; //10 ist eigendlich 0
}
else {
PORTA = 0b00000000;
}
for(j=0;j<2;j++){ // wenn j=2, dann muss resetet werden um eine
//andere Zahl zu drücken
// Schutz vor nicht gewollter Tasten-Eingabe
if (zahl==1){
PORTA = 0b00000001; //An dieser Stelle könnte auch ein
//Unterprogramm starten.
}
else if (zahl==2){
PORTA = 0b00000010;
}
else if (zahl==3){
PORTA = 0b00000011;
}
else if (zahl==4){//der Code müsste geändert werden. Im
//Moment würde er das hier
PORTA = 0b00000100; //Für die Tasten 4,5 und 6 ausgeben.
}
else if (zahl==7){
PORTA = 0b00001001;
}
else if (zahl==10){
PORTA = 0b00001010;
}
else{
PORTA = 0b00000000;
}
}
//zahl=0;
}while (1); //immer wiederholen
}//()
Viele Grüsse und noch mal Danke an alle die geholfen haben,
Tornado
Lesezeichen