- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 4 von 4

Thema: 4x4 Matrixtastatur in C

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065

    4x4 Matrixtastatur in C

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Ich habe einen Code gebastelt, der eine 4x4 Tastatur abfragen soll. Ich würde euch bitten, dass mal anzusehen und zu schauen, ob es so klappen würde.

    Code:
    /*Funktion für 4x4Matrix Tastatur, i/o und pullups müssen vorher eingestellt werden */
    
    #define	Port	PORTB
    /*RB0-RB3 sind Ausgänge, RB4-RB7 sind Eingänge; Ausgänge auf high ausser einer, wenn eine Taste auf low, dann muss sie gedrückt sein gedrückt */
    
    
    char Tastatur (void)
    {
    char Taste=1;
    uns8 i,j;
    
    Port=0b.0000.1110
    
    for (i=1;i<5;i++)
    	{
    	Port = Port << 1;
    	Port++;
    	
    	for (j=4;j<8;j++)
    		{
    		if Port.j!=0
    		Taste++;
    		else
    		return Taste;		
    		}
    	}
    }
    was ich besonders unsicher finde ist mein Ausdruck "if Port.j!=0" . klappt das so?
    "Port = Port << 1;
    Port++;"
    ist dazu da um immer einen Output auf Low zu legen, das carryflag wird mit dem befehl automatisch vorher gelöscht, deswegen danach noch +1. so schieb ich die eine null durch die untere hälfte von Port.
    das ganze soll dann für MPLAB 7.10 mit CC5x free compiler benutzt werden.
    es fehlen jetzt noch die zuweisungen für die tasten, momentan sind die ja einfach nur durchnummeriert, aber das kommt wenn es so klappt.

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    41
    Beiträge
    1.780

    Re: 4x4 Matrixtastatur in C

    Zitat Zitat von the_Ghost666
    was ich besonders unsicher finde ist mein Ausdruck "if Port.j!=0" . klappt das so?
    schreib doch einfach if(Port & (1 << j))

    so klappts garantiert
    So viele Treppen und so wenig Zeit!

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    ähm was macht dieser code den du da gepostet hast, ich versteh das nicht ganz

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    41
    Beiträge
    1.780
    Ok, ich versuch mal es zu erklären...

    Die 1, also binär 00000001, wird mit dem Linksshift-Operator um j Stellen nach links geschoben. (es wird quasi das Bit "j" gesetzt)
    Das resultierende Bitmuster wird anschließend und-verknüpft mit Port.

    d.h. der gesamte Ausdruck liefert 0, wenn Bit-j in Port nicht gesetzt ist und sonst eben eine Zahl ungleich 0.


    Hier mal zwei Rechenbeispiele:

    Code:
    j = 5
    => (1 << j) = 00100000
    
    Port = 11010010
    (Port & (1 << j)):
    
      11010010
    & 00100000
    ----------
    = 00000000 = 0
    
    
    
    j = 6
    => (1 << j) = 01000000
    
    Port = 01110100
    (Port & (1 << j)):
    
      01110100
    & 01000000
    ----------
    = 01000000 = 64
    So viele Treppen und so wenig Zeit!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test