Guten Abend!
Ich habe hier eine Schaltung mit einer Matrix Tastatur, 2 Tastern und
einem LCD.
Das Problem ist wenn ich meine Tastatur abfrage bekomme ich immer den
Stern zurück und das in einer Endlosschleife obwohl ich keine Taste
drücke. Hier ist der Code dazu:
1 | void main(void)
|
2 | {
|
3 | // Definition von Variablen
|
4 | char data[16];
|
5 | unsigned char t;
|
6 |
|
7 | //Einstellen der Ports
|
8 | // 0 = Output
|
9 | // 1 = Input
|
10 | TRISC = 0b00000000; // PORT C Ausgang
|
11 | PORTC = 0x00;
|
12 |
|
13 | TRISB = 0b00011000; // RB3, RB4 is Input
|
14 | PORTB = 0x0F;
|
15 |
|
16 | // Port A Einstellungen
|
17 | // Alle PortA Pins digital I/O
|
18 | ADCON1 = 0xFF;
|
19 |
|
20 | TRISA = 0b00000000; // PORTA alles Ausgang
|
21 |
|
22 | // XLCD Open
|
23 | OpenXLCD( FOUR_BIT & LINES_5X7 );
|
24 |
|
25 | /** Interrupts ***********************/
|
26 | INTCONbits.GIE = 0; // Interrupts generell erlauben
|
27 | INTCONbits.RBIF = 0; // Interrupt on Change Flag aus
|
28 | INTCONbits.RBIE = 1; // Interrupt on Change aktivieren
|
29 | RCONbits.IPEN = 0; // Interrupt priority aus
|
30 |
|
31 | /** S T A R T H A U P T P R O G R A M M *********/
|
32 | while(1)
|
33 | {
|
34 | t = 0;
|
35 | t = tast();
|
36 |
|
37 | // Abfrage ob eine Taste gedrückt wurde.
|
38 | if( t )
|
39 | {
|
40 | SetDDRamAddr( 0 ); // Cursor auf Position 0.
|
41 | while( BusyXLCD() ); // Warten bis LCD fertig ist.
|
42 | putcXLCD( t ); // Ausgabe eines Zeichens am LCD.
|
43 | while( BusyXLCD() ); // Warten bis LCD fertig ist.
|
44 | }
|
45 |
|
46 | Delay1KTCYx( 50 );
|
47 | }
|
48 |
|
49 | }
|
50 |
|
51 | // Tastatur abfragen
|
52 | unsigned char tast( void )
|
53 | {
|
54 | TRISA = 0x0F; // RA0 bis RA3 sind Eingänge
|
55 |
|
56 | PORTBbits.RB0 = 0;
|
57 | PORTBbits.RB1 = 1;
|
58 | PORTBbits.RB2 = 1;
|
59 |
|
60 | if( !PORTAbits.RA3 )
|
61 | {
|
62 | return '*';
|
63 | }
|
64 |
|
65 | return 0;
|
66 | }
|
Ich suche nun schon 2 Abende aber ich finde das Problem nicht.
Bitte helft mir!
Danke
Andreas